ile öldürdüğümde aldığım hangi ileti var? C++ uygulamasında, Windows İletilerini izlemek için C# uygulamasında kullanıyorum. WM_CLOSE ve WM_QUERYENDSESSION öğelerinin gönderilip gönderilmediğini bilmek istiyorum çünkü C# uygulamasından bunu göremiyorum. Bu iletilerden birini alırsam, dosyalarımla bazı temizleme yapmak istiyorum, ancak sorun, TM ile çalışırken onu öldürmüyorum. Mesajları anlamadığımı söylüyor. Sorun şu ki, Görev Yöneticisi C++ uygulamasına C++ uygulamasına bir ileti göndermiyor.Programımı görev yöneticisi
Bazı Kodu:
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#: Ölen olup olmadığını
[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();
Görev yöneticisinde Uygulamalar sekmesini kullanırken yalnızca WM_CLOSE elde edersiniz. İşlemler sekmesinden onu öldürmek kaba bir sonlandırmadır. C++ kodunda mesajın nasıl sonlandığı belirsizdir, kullanıcı arayüzü genellikle C# ile yapılır. –
Veya konsol uygulamalarında bir 'CTRL_CLOSE_EVENT' olayı alırsınız. İlgili eski mesajlara zorunlu bağlantı [blog yazısı] (http://blogs.msdn.com/b/oldnewthing/archive/2004/07/22/191123.aspx) –