Какое сообщение я получаю, когда завершаю свою программу с помощью диспетчера задач

Итак, у меня есть dll C++, которую я использую в своем приложении C# для мониторинга сообщений Windows. Я хочу знать, отправлены ли WM_CLOSE и WM_QUERYENDSESSION, потому что я не вижу этого из приложения C#. Если я получаю одно из этих сообщений, я хочу немного почистить свои файлы, но проблема в том, что когда я убиваю его с помощью TM, функции не работают. Похоже, я не получаю сообщения. Я думаю, проблема в том, что диспетчер задач отправляет сообщение в приложение С#, а не в dll С++.

Код:

С++:

typedef void (*CLOSING_FUNCTION)();
CLOSING_FUNCTION myClosingFunction;

typedef void (*SHUTDOWN_FUNCTION)();
SHUTDOWN_FUNCTION myShutdownFunction;

LRESULT CALLBACK WndProc(HWND hwnd, UINT message, WPARAM wParam, LPARAM lParam)
{
    switch(message)
    {

    case WM_CREATE:
        return 0;

    case WM_CLOSE:
        myClosingFunction();
        return 0;

    case WM_QUERYENDSESSION:
        myShutdownFunction();
        return 1;

    case WM_DESTROY:
        myClosingFunction();
        PostQuitMessage(0);
        return 0;
    }

    return DefWindowProc(hwnd, message, wParam, lParam);
}

С#:

[UnmanagedFunctionPointer(CallingConvention.Cdecl)]
private delegate void Close_Function();
private static Close_Function myCloseDelegate;

[UnmanagedFunctionPointer(CallingConvention.Cdecl)]
private delegate void Shutdown_Function();
private static Shutdown_Function myShutdownDelegate;
static void StartMonotoring()
{
       myCloseDelegate = Close;
       myShutdownDelegate = Shutdown;

       InterceptMessages(myCloseDelegate, myShutdownDelegate);
}

static void Close();
static void Shutdown();
5
задан Thanatos 22 May 2012 в 16:42
поделиться