与用户交互的Win32服务应该准备好处理注销活动.当注销事件发生时,Win32服务必须关闭用户的窗口站和桌面的所有句柄。
此示例演示了如何在注销时将交互示例代码中的消息框消除。此示例中的【ConsoleCtrlHandler】功能是通过调用SetConsoleCtrlHandler功能指定的HandlerRoutine.
BOOL CALLBACK EnumProc(
HWND hwnd,
LPARAM lParam)
{
/*
*发送WM_CLOSE以销毁窗口,因为DestroyWindow
*不能跨线程工作
*/
SendMessage(hwnd, WM_CLOSE, 0, 0);
return TRUE;
}
BOOL ConsoleCtrlHandler(
DWORD dwCtrlType)
{
if (dwCtrlType == CTRL_LOGOFF_EVENT && dwGuiThreadId != 0) {
SetThreadDesktop(GetThreadDesktop(dwGuiThreadId));
EnumThreadWindows(dwGuiThreadId, EnumProc, 0);
}
return FALSE;
}