处理注销事件

【勇芳软件工作室】汉化HomePreviousNext

与用户交互的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;

}