WM _QUERYENDSESSION вызывает у меня проблемы

Создание простого приложения, поэтому, когда пользователь выходит из Windows, оно, конечно же, закрывает приложение. Мы делаем простое приложение USB Alert, которое ОСТАНАВЛИВАЕТ отключение, если USB обнаруживается, когда пользователь выходит из системы

. Это код до сих пор.

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;
            }
        }
    }

Что происходит, так это то, что отображается экран Windows Force Programs to Quit, я где-то читал, если вы возвращаете 0 в WM _QUERYENDSESSION, он не отображает это, но все еще отображает это...

Любые идеи?

РЕДАКТИРОВАТЬ:

Мы использовали код, который кто-то ответил, но мы все еще получаем этот экран.

The screen we want to avoid!

6
задан x06265616e 28 June 2012 в 10:27
поделиться