سؤال

أقوم بعمل تطبيق يستخدم لمسح ملفات TEMP وتاريخ الخ، عند تسجيل الخروج المستخدم. إذا كيف يمكنني معرفة ما إذا كان النظام ذاهب إلى تسجيل الخروج (في C #)؟

هل كانت مفيدة؟

المحلول

هناك عقار في بيئة الطبقة التي تحكي عنها إذا بدأت عملية الإغلاق:

Environment.HasShutDownStarted

ولكن بعد بعض googling اكتشفت أن هذا قد يكون مساعدتك لك:

 using Microsoft.Win32;

 //during init of your application bind to this event  
 SystemEvents.SessionEnding += 
            new SessionEndingEventHandler(SystemEvents_SessionEnding);

 void SystemEvents_SessionEnding(object sender, SessionEndingEventArgs e)
 {
     if (Environment.HasShutdownStarted)
     {
         //Tackle Shutdown
     }
     else
     {
         //Tackle log off
     }
  }

ولكن إذا كنت ترغب فقط في مسح ملف TEMP، فما أعتقد أن التمييز بين الإغلاق أو تسجيل الخروج ليس من أي نتيجة لك.

نصائح أخرى

إذا كنت بحاجة خصيصا إلى حدث تسجيل الدخول، فيمكنك تعديل التعليمات البرمجية المتوفرة في إجابة TheVillageIdiot على النحو التالي:

using Microsoft.Win32;

//during init of your application bind to this event   
SystemEvents.SessionEnding += 
    new SessionEndingEventHandler(SystemEvents_SessionEnding);

void SystemEvents_SessionEnding(object sender, SessionEndingEventArgs e) 
{     
    if (e.Reason == SessionEndReasons.Logoff) 
    {  
        // insert your code here
    }
}

يمكنك استخدام WMI ومشاهدة Win32_Computershutdownevent حيث النوع يساوي 0. يمكنك العثور على مزيد من المعلومات حول هذا الحدث هنا, ، وأكثر من استخدام WMI في .NET هنا.

اذا كان لديك نموذج ويندوز, ، يمكنك التعامل مع FormClosing الحدث، ثم تحقق e.CloseReason قيمة ENUM لتحديد ما إذا كان يساوي CloseReason.WindowsShutDown.

private void FormMain_FormClosing(object sender, FormClosingEventArgs e)
{
    if (e.CloseReason == CloseReason.WindowsShutDown)
    {
        // Your code here
    }
}
مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top