如何在服务(Service)程序中显示对话框
来源:互联网 发布:网络db是什么意思啊 编辑:程序博客网 时间:2024/06/07 04:41
原文:http://www.vckbase.com/index.php/wv/94
服务程序(Service)一般是不能和用户进行交互的,所以他一般是不能显示窗口的。要和用户进行交互(如显示窗口),我们必须打开用户WinSta0和desktop,下面的这段代码就是打开上述两个,并显示一个dialog:
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.
}
0 0
- 如何在服务(Service)程序中显示对话框
- 如何在服务(Service)程序中显示对话框(转贴)
- 如何在服务(Service)程序中显示对话框
- 如何在服务(Service)程序中显示对话框
- 如何在服务(Service)程序中显示对话框
- 如何在service中显示对话框dialog
- Android 在服务Service中创建Dialog对话框
- 如何在非Activity中启动、绑定Service(服务)
- 如何在对话框中显示一个位图
- Android如何在service中显示Dialog
- 如何在service中显示Dialog
- 如何在对话框程序中让对话框捕获WM_KEYDOWN消息
- 如何在对话框程序中让对话框捕获WM_KEYDOWN消息
- 如何在对话框程序中让对话框捕获WM_KEYDOWN消息
- 如何隐藏显示在任务栏中的对话框程序
- GAC 在“添加引用”对话框中显示程序集
- 在“添加引用”对话框中显示程序集
- 在广播接收器中显示对话框失败,并退出程序
- 把github上没提供部分支持库的的项目导入eclipse时发生错误的解决思路
- 江苏建设人才在线
- 当项目进度不能按照当初制定的计划来,应采用哪些管理措施来保证项目整体进度不被拖延?
- jQuery鼠标悬停放射出炫幻效果
- C Luo accept -200 ℃ cold treatment to eliminate fatigue, wonders! Feel like sex
- 如何在服务(Service)程序中显示对话框
- UNICODE编码下CFile写入文本(TEXT)
- NSString常用方法
- oracle常用命令整理
- 如何成为一名数据科学家?
- Spring AOP 面向切面编程
- 使用VS2005创建“OCX”
- C Luo barb didn't touch the ball out, idol! Rival fans as he sang the praises
- 那时候年轻气盛,我不动你