我正在开发一个App,它有多个线程等待来自DLL和串行端口的不同输入。
我想添加一个功能,在机器进入睡眠状态之前,我必须卸载某些DLL并且在唤醒时必须重新加载DLL。 为此,我需要通知睡眠和醒来。
我发现很多关于在C#中执行的文件,但我想在C ++中执行此操作。
我尝试使用此code Project但无法捕获任何事件。我删除了与Window Paint和All相关的所有内容,因为我不需要它的GUI并仅保留main message loop (The While loop in the main)
编辑: -
我使用它作为我的主循环: -
// Start the message loop.
while( (bRet = GetMessage( &msg, NULL, 0, 0 )) != 0)
{
if (bRet == -1)
{
// handle the error and possibly exit
}
else
{
TranslateMessage(&msg);
DispatchMessage(&msg);
}
}
坦白说,我已经从CodeProject复制了这个,并且只做了一次修改,即从MSDN文章中检查了GetMessage(..)!= 0。
我错过了什么吗?
或任何其他解决方案??
我正在使用VS2010并使用C ++进行编程
提前致谢!
答案 0 :(得分:7)
尝试处理WM_POWERBROADCAST消息
这是应该有效的示例代码。显然你需要创建一个窗口,否则你不会收到消息。该示例创建了一个隐藏窗口来实现此目的。
static long FAR PASCAL WindowProc(HWND hWnd, UINT message, WPARAM wParam, LPARAM lParam)
{
if(message == WM_POWERBROADCAST)
{
//Do something
return TRUE;
}
else
return DefWindowProc(hWnd, message, wParam, lParam);
}
int _tmain(int argc, _TCHAR* argv[])
{
WNDCLASS wc = {0};
// Set up and register window class
wc.lpfnWndProc = WindowProc;
wc.lpszClassName = _T("SomeNameYouInvented");
RegisterClass(&wc);
HWND hWin = CreateWindow(_T("SomeNameYouInvented"), _T(""), 0, 0, 0, 0, 0, NULL, NULL, NULL, 0);
BOOL bRet;
MSG msg;
while( (bRet = GetMessage( &msg, hWin, 0, 0 )) != 0)
{
if (bRet == -1)
{
// handle the error and possibly exit
}
else
{
TranslateMessage(&msg);
DispatchMessage(&msg);
}
}
return 0;
}