如何在服务(Service)程序中显示对话框
2014-04-19 14:51
375 查看
原文:http://www.vckbase.com/index.php/wv/94
服务程序(Service)一般是不能和用户进行交互的,所以他一般是不能显示窗口的。要和用户进行交互(如显示窗口),我们必须打开用户WinSta0和desktop,下面的这段代码就是打开上述两个,并显示一个dialog:
view
source
print?
服务程序(Service)一般是不能和用户进行交互的,所以他一般是不能显示窗口的。要和用户进行交互(如显示窗口),我们必须打开用户WinSta0和desktop,下面的这段代码就是打开上述两个,并显示一个dialog:
view
source
print?
01.
BOOL
CServiceModule::ShowMsgDlg(
void
)
02.
{
03.
HDESK
hdeskCurrent;
04.
HDESK
hdesk;
05.
HWINSTA
hwinstaCurrent;
06.
HWINSTA
hwinsta;
07.
08.
hwinstaCurrent = GetProcessWindowStation();
09.
if
(hwinstaCurrent == NULL){
10.
LogEvent(_T(
"get window station err"
));
11.
return
FALSE;
12.
}
13.
14.
hdeskCurrent = GetThreadDesktop(GetCurrentThreadId());
15.
if
(hdeskCurrent == NULL){
16.
LogEvent(_T(
"get window desktop err"
));
17.
return
FALSE;
18.
}
19.
20.
//打开winsta0
21.
hwinsta = OpenWindowStation(
"winsta0"
, FALSE,
22.
WINSTA_ACCESSCLIPBOARD |
23.
WINSTA_ACCESSGLOBALATOMS |
24.
WINSTA_CREATEDESKTOP |
25.
WINSTA_ENUMDESKTOPS |
26.
WINSTA_ENUMERATE |
27.
WINSTA_EXITWINDOWS |
28.
WINSTA_READATTRIBUTES |
29.
WINSTA_READSCREEN |
30.
WINSTA_WRITEATTRIBUTES);
31.
if
(hwinsta == NULL){
32.
LogEvent(_T(
"open window station err"
));
33.
34.
return
FALSE;
35.
}
36.
37.
if
(!SetProcessWindowStation(hwinsta)){
38.
LogEvent(_T(
"Set window station err"
));
39.
40.
return
FALSE;
41.
}
42.
43.
//打开desktop
44.
hdesk = OpenDesktop(
"default"
, 0, FALSE,
45.
DESKTOP_CREATEMENU |
46.
DESKTOP_CREATEWINDOW |
47.
DESKTOP_ENUMERATE |
48.
DESKTOP_HOOKCONTROL |
49.
DESKTOP_JOURNALPLAYBACK |
50.
DESKTOP_JOURNALRECORD |
51.
DESKTOP_READOBJECTS |
52.
DESKTOP_SWITCHDESKTOP |
53.
DESKTOP_WRITEOBJECTS);
54.
if
(hdesk == NULL){
55.
LogEvent(_T(
"Open desktop err"
));
56.
57.
return
FALSE;
58.
}
59.
60.
SetThreadDesktop(hdesk);
61.
62.
//到这一步,我们获取了和用户交互(如显示窗口)的权利
63.
CMsgDlg dlgMsg;
64.
//显示一个dialog
65.
dlgMsg.DoModal();
66.
67.
if
(!SetProcessWindowStation(hwinstaCurrent))
68.
return
FALSE;
69.
70.
if
(!SetThreadDesktop(hdeskCurrent))
71.
return
FALSE;
72.
73.
if
(!CloseWindowStation(hwinsta))
74.
return
FALSE;
75.
76.
if
(!CloseDesktop(hdesk))
77.
return
FALSE;
78.
79.
return
TRUE;
80.
}
相关文章推荐
- 如何在服务(Service)程序中显示对话框
- 如何在服务(Service)程序中显示对话框
- 如何在服务(Service)程序中显示对话框(转贴)
- 如何在服务(Service)程序中显示对话框
- 如何在服务(Service)程序中显示对话框
- 如何删除 MOSS 共享服务提供程序 (SSP, Shared Service Provider)
- 出现“无法通过windows installer服务安装此安装程序包。您必须安装带有更新版本Windows Installer服务的Windows Service Pack”提示如何解决?
- 如何在service中显示对话框dialog
- 如何使对话框程序启动以及主窗口最小化时不在任务栏上显示
- 如何隐藏显示在任务栏中的对话框程序
- 如何删除 MOSS 共享服务提供程序 (SSP, Shared Service Provider)
- How to add a exe application run as a service(如何将一个可执行程序当作服务运行)?
- vc 对话框程序里,如何在密码输入框显示为****,屏蔽掉密码
- 如何隐藏显示在任务栏中的对话框程序
- Delphi如何获取系统服务(即Service服务程序)列表
- [置顶] Windows服务(Windows Service,system权限)程序显示界面与用户交互(xp,win7通用)
- Windows服务(system权限)程序显示界面与用户交互,Session0通知Session1里弹出对话框(真的很牛) good
- 如何隐藏显示在任务栏中的对话框程序
- 如何使对话框程序启动以及主窗口最小化时不在任务栏上显示
- 如何使MFC编写的程序作为服务运行,并正常显示界面