2012-06-28 31 views
6

Tạo một ứng dụng đơn giản, vì vậy khi người dùng đăng xuất khỏi Windows, tất nhiên sẽ tắt ứng dụng. Chúng tôi đang thực hiện một ứng dụng USB Alert đơn giản mà STOPS tắt nếu phát hiện thấy USB khi người dùng đang đăng xuấtWM_QUERYENDSESSION đang gây ra sự cố cho tôi

Đây là mã cho đến thời điểm này.

public Form1() 
    { 
     InitializeComponent(); 
    } 

    private static int WM_QUERYENDSESSION = 0x11; 
    private static bool systemShutdown = false; 
    protected override void WndProc(ref System.Windows.Forms.Message m) 
    { 
     if (m.Msg == WM_QUERYENDSESSION) 
     { 
      //MessageBox.Show("queryendsession: this is a logoff, shutdown, or reboot"); 
      systemShutdown = true; 
      m.Result = (IntPtr)0; 
     } 

     // If this is WM_QUERYENDSESSION, the closing event should be 
     // raised in the base WndProc. 
     m.Result = (IntPtr)0; 
     base.WndProc(ref m); 

    } //WndProc 

    private void Form1_FormClosing(object sender, FormClosingEventArgs e) 
    { 
     if (systemShutdown) 
     { 
      systemShutdown = false; 
      bool hasUSB = false; 

      foreach (DriveInfo Drive in DriveInfo.GetDrives()) 
      { 
       if (Drive.DriveType == DriveType.Removable) 
       { 
        hasUSB = true; 
       } 
      } 

      if (hasUSB) 
      { 
       e.Cancel = true; 
       MessageBox.Show("You still have USB device plugged in, please unplug it and log off again"); 
      } 
      else 
      { 
       e.Cancel = false; 
      } 
     } 
    } 

gì đang xảy ra là các chương trình Force Quit Windows để màn hình đang được hiển thị, tôi đọc ở đâu đó nếu bạn quay lại từ 0 đến WM_QUERYENDSESSION nó không hiển thị này, nhưng nó vẫn được hiển thị này ...

Bất kỳ ý tưởng nào?

EDIT:

Chúng tôi đã sử dụng mã mà ai đó đã trả lời nhưng chúng tôi vẫn nhận được màn hình này.

The screen we want to avoid!

+2

Việc ngăn hệ thống tắt ý tưởng tốt ngay từ đầu? –

+1

Nhưng chúng tôi đang xây dựng một chương trình, rằng nếu một Người dùng đã để lại một USB cắm nó, họ không thể tắt hoặc đăng xuất cho đến khi họ gỡ bỏ nó. – x06265616e

Trả lời

3

Các bạn đã thử

[DllImport("advapi32.dll", SetLastError=true)] 
static extern bool AbortSystemShutdown(string lpMachineName); 

nên hủy bỏ việc tắt máy.

+0

Không hoạt động với chúng tôi:/ – x06265616e

+0

Đó là tài liệu để làm việc, cũng như những người khác đã nói http://msdn.microsoft.com/en-us/library/aa376877%28VS.85%29.aspx ShutdownBlockReasonCreate() nên cũng làm việc. Mã trả về của 0 dường như đã chết với vista. – BugFinder

1

tôi đã làm việc này tốt bây giờ bằng cách thêm mã này trong

 [DllImport("user32.dll", SetLastError = true)] 
    static extern int CancelShutdown(); 

Tôi cũng đã thay đổi tiêu đề từ WM_QUERYENDSESSION = 0x11; tới WM_QUERYENDSESSION = 0x0011;

Không chắc chắn nếu điều này đã làm bất cứ điều gì, nhưng mã dường như hoạt động, Cảm ơn tất cả các câu trả lời

Các vấn đề liên quan