killt Also habe ich eine C++ - DLL, die ich in meiner C# -Anwendung verwende, um Windows-Nachrichten zu überwachen. Ich möchte wissen, ob WM_CLOSE und WM_QUERYENDSESSION gesendet werden, da ich das aus einer C# -Anwendung nicht sehen kann. Wenn ich eine dieser Nachrichten bekomme, möchte ich mit meinen Dateien etwas aufräumen, aber das Problem ist, wenn ich es mit TM abbringe funktionieren die Funktionen nicht. Es scheint, dass ich die Nachrichten nicht bekomme. Ich denke, das Problem ist, dass der Task-Manager eine Nachricht an die C# -App und nicht an die C++ - DLL sendet.Welche Nachricht erhalte ich, wenn ich mein Programm mit dem Taskmanager
Einige Code:
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();
Sie erhalten WM_CLOSE nur, wenn Sie die Registerkarte Anwendungen im Task-Manager verwenden. Es ist eine unhöfliche Beendigung, wenn Sie es auf der Registerkarte "Prozesse" löschen. Wie die Nachricht im C++ - Code endet, ist sehr unklar. Die Benutzeroberfläche wird normalerweise in C# erstellt. –
Oder Sie erhalten ein Ereignis "CTRL_CLOSE_EVENT" in Konsolenanwendungen. Obligatorischer Link zum relevanten oldnewthing [Blogbeitrag] (http://blogs.msdn.com/b/oldnewthing/archive/2004/07/22/191123.aspx) –