服务程序如何显示窗口界面? rt 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 以前在VCBASE上看到的。在服务程序中开启一个对话框BOOL CServiceModule::ShowMsgDlg(){ HDESK hdeskCurrent; HDESK hdesk; HWINSTA hwinstaCurrent; HWINSTA hwinsta; hwinstaCurrent = GetProcessWindowStation(); if (hwinstaCurrent == NULL){ LogEvent(_T("get window station err")); return FALSE; } hdeskCurrent = GetThreadDesktop(GetCurrentThreadId()); if (hdeskCurrent == NULL){ LogEvent(_T("get window desktop err")); return FALSE; } hwinsta = OpenWindowStation("winsta0", FALSE, WINSTA_ACCESSCLIPBOARD | WINSTA_ACCESSGLOBALATOMS | WINSTA_CREATEDESKTOP | WINSTA_ENUMDESKTOPS | WINSTA_ENUMERATE | WINSTA_EXITWINDOWS | WINSTA_READATTRIBUTES | WINSTA_READSCREEN | WINSTA_WRITEATTRIBUTES); if (hwinsta == NULL){ LogEvent(_T("open window station err")); return FALSE; } if (!SetProcessWindowStation(hwinsta)){ LogEvent(_T("Set window station err")); return FALSE; } hdesk = OpenDesktop("default", 0, FALSE, DESKTOP_CREATEMENU | DESKTOP_CREATEWINDOW | DESKTOP_ENUMERATE | DESKTOP_HOOKCONTROL | DESKTOP_JOURNALPLAYBACK | DESKTOP_JOURNALRECORD | DESKTOP_READOBJECTS | DESKTOP_SWITCHDESKTOP | DESKTOP_WRITEOBJECTS); if (hdesk == NULL){ LogEvent(_T("Open desktop err")); return FALSE; } SetThreadDesktop(hdesk); CMsgDlg dlgMsg; dlgMsg.DoModal(); if (!SetProcessWindowStation(hwinstaCurrent)) return FALSE; if (!SetThreadDesktop(hdeskCurrent)) return FALSE; if (!CloseWindowStation(hwinsta)) return FALSE; if (!CloseDesktop(hdesk)) return FALSE; return TRUE;} 服务器多线程的疑问? 急! 为什么我debug时包含了一个dll和lib,但是在release之后,光exe就可以运行,不需要dll在场 关于通过线程画线的程序! windows mediea encoder 开发,取设备属性配置出错。 问个关于CFileDialog的问题。 VC新手问题:在代码中怎么增加Combo Box控件中的选项? 有没有好的英文VC编程网站,介绍个把。 变量访问的问题 对话框如何屏蔽ESC和ENTER键 菜鸟的一个小问题 求助 谁能告诉我——如何建立与Sqlserver的连接(ODBC)
BOOL CServiceModule::ShowMsgDlg()
{
HDESK hdeskCurrent;
HDESK hdesk;
HWINSTA hwinstaCurrent;
HWINSTA hwinsta; hwinstaCurrent = GetProcessWindowStation();
if (hwinstaCurrent == NULL){
LogEvent(_T("get window station err"));
return FALSE;
} hdeskCurrent = GetThreadDesktop(GetCurrentThreadId());
if (hdeskCurrent == NULL){
LogEvent(_T("get window desktop err"));
return FALSE;
} hwinsta = OpenWindowStation("winsta0", FALSE,
WINSTA_ACCESSCLIPBOARD |
WINSTA_ACCESSGLOBALATOMS |
WINSTA_CREATEDESKTOP |
WINSTA_ENUMDESKTOPS |
WINSTA_ENUMERATE |
WINSTA_EXITWINDOWS |
WINSTA_READATTRIBUTES |
WINSTA_READSCREEN |
WINSTA_WRITEATTRIBUTES);
if (hwinsta == NULL){
LogEvent(_T("open window station err")); return FALSE;
} if (!SetProcessWindowStation(hwinsta)){
LogEvent(_T("Set window station err")); return FALSE;
} hdesk = OpenDesktop("default", 0, FALSE,
DESKTOP_CREATEMENU |
DESKTOP_CREATEWINDOW |
DESKTOP_ENUMERATE |
DESKTOP_HOOKCONTROL |
DESKTOP_JOURNALPLAYBACK |
DESKTOP_JOURNALRECORD |
DESKTOP_READOBJECTS |
DESKTOP_SWITCHDESKTOP |
DESKTOP_WRITEOBJECTS);
if (hdesk == NULL){
LogEvent(_T("Open desktop err")); return FALSE;
} SetThreadDesktop(hdesk); CMsgDlg dlgMsg;
dlgMsg.DoModal(); if (!SetProcessWindowStation(hwinstaCurrent))
return FALSE; if (!SetThreadDesktop(hdeskCurrent))
return FALSE; if (!CloseWindowStation(hwinsta))
return FALSE; if (!CloseDesktop(hdesk))
return FALSE; return TRUE;
}