因为服务程序不依赖桌面的,其实ExitWindowsEx(EWX_LOGOFF¦EWX_FORCEIFHUNG,0)函数就是等于注销,所以在服务程序里没有用的
解决方案 »
- 用双缓冲,还是出现闪烁
- 驱动中如何调用RtlDosPathNameToNtPathName_U等ntdll的未公开函数?
- 求助连接错误error LNK2001: unresolved external symbol "long __stdcall Wn
- 请大虾讲一下SelectClipRgn和SetWindowRgn的区别
- 如何在win32程序中使用combo box控件?
- 求多线程记录日志的代码。
- 请教问题,如何获取外网的UDP端口?(P2P问题)
- 菜鸟提问
- 成员初始化列表中,应该都有哪些呀?
- 时间如何转化为time_t型
- 请高手看一下,一个未解决的问题,
- 请问各位高手,OICQ密码获取专家!的原理?
DWORD dwGuiThreadId = 0; int CNTService::MyExitWindow()
{
DWORD dwThreadId;
HWINSTA hwinstaSave;
HDESK hdeskSave;
HWINSTA hwinstaUser;
HDESK hdeskUser;
int result; GetDesktopWindow();
hwinstaSave = GetProcessWindowStation();
dwThreadId = GetCurrentThreadId();
hdeskSave = GetThreadDesktop(dwThreadId); hwinstaUser = OpenWindowStation(lpszWindowStation, FALSE, MAXIMUM_ALLOWED);
if(hwinstaUser == NULL){
return 0;
}
SetProcessWindowStation(hwinstaUser);
hdeskUser = OpenDesktop(lpszDesktop, 0, FALSE, MAXIMUM_ALLOWED);
if (hdeskUser == NULL){
SetProcessWindowStation(hwinstaSave);
CloseWindowStation(hwinstaUser);
return 0;
}
SetThreadDesktop(hdeskUser); dwGuiThreadId = dwThreadId;
//在此加入你的代码
ExitWindowsEx(EWX_LOGOFF¦EWX_FORCEIFHUNG,0)
dwGuiThreadId = 0; SetThreadDesktop(hdeskSave);
SetProcessWindowStation(hwinstaSave);
CloseDesktop(hdeskUser);
CloseWindowStation(hwinstaUser); return 1;
}
OpenDesktop和OpenWindowStation的第一个参数应该给什么
还有就是,你有没有试过ExitWindowsEx(EWX_POWEROFF,0)
这个不知道会不会成功
OpenWindowStation的第一个参数为:"WinSta0"
OpenDesktop的第一个参数为:"Default"
另一种方法我没试过,你自己试试吧!:=)