Quindi ho una DLL C++, che sto usando nella mia applicazione C#, per monitorare i messaggi di Windows. Voglio sapere se WM_CLOSE e WM_QUERYENDSESSION vengono inviati perché non riesco a vederlo da un'applicazione C#. Se ricevo uno di questi messaggi, voglio fare un po 'di pulizia con i miei file, ma il problema è che quando lo uccido con TM le funzioni non funzionano. Sembra che non ricevo i messaggi. Penso che il problema è che Task Manager invia un messaggio all'app C# e non alla DLL C++.Quale messaggio ricevo quando cancello il mio programma con il task manager
Alcuni Codice:
C++:
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);
}
C#:
[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();
Si ottiene WM_CLOSE solo quando si utilizza la scheda Applicazioni in Gestione attività. Ucciderlo dalla scheda Processi è una conclusione maleducata. Il modo in cui il messaggio finisce nel codice C++ è molto poco chiaro, l'interfaccia utente è in genere eseguita in C#. –
Oppure riceverai un evento 'CTRL_CLOSE_EVENT' nelle applicazioni della console. Collegamento obbligatorio al precedente oggetto precedente [post di blog] (http://blogs.msdn.com/b/oldnewthing/archive/2004/07/22/191123.aspx) –