Vì vậy, tôi có một dll C++, mà tôi đang sử dụng trong ứng dụng C# của mình, để giám sát Windows Messages. Tôi muốn biết nếu WM_CLOSE và WM_QUERYENDSESSION được gửi bởi vì tôi không thể thấy điều đó từ một ứng dụng C#. Nếu tôi nhận được một trong những thông điệp này, tôi muốn làm một số dọn dẹp với các tập tin của tôi nhưng vấn đề là khi tôi giết nó với TM các chức năng không hoạt động. Nó seams rằng tôi không nhận được tin nhắn. Tôi nghĩ vấn đề là Task Manager sẽ gửi một tin nhắn đến ứng dụng C# và không gửi tới C++ dll.Tôi nhận được thông báo gì khi tôi giết chương trình của mình bằng trình quản lý tác vụ
Một số 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();
Bạn chỉ nhận được WM_CLOSE khi sử dụng tab Ứng dụng trong trình quản lý tác vụ. Giết nó từ tab Processes là một kết thúc thô lỗ. Làm thế nào tin nhắn kết thúc trong mã C + + là rất không rõ ràng, giao diện người dùng thường được thực hiện trong C#. –
Hoặc bạn sẽ nhận được sự kiện 'CTRL_CLOSE_EVENT' trong các ứng dụng bảng điều khiển. Liên kết bắt buộc với bài đăng cũ có liên quan [bài đăng trên blog] (http://blogs.msdn.com/b/oldnewthing/archive/2004/07/22/191123.aspx) –