原文: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.}

如何在服务(Service)程序中显示对话框的更多相关文章

  1. 微信小程序中显示html富文本的方法

    微信小程序中显示html富文本的方法 使用方法:git地址:https://github.com/icindy/wxParse 一.下载wxParse文件 二.在要引入的页面的js文件中,引入文件 j ...

  2. 在Win32程序中显示Dos调试窗口,可暂停(AllocConsole,WriteConsole,FreeConsole函数,GetStdHandle函数取得输入句柄)

    在很多程序中,都可以看到程序运行中,会有一个Dos窗口,实时显示一些运行信息,这里就告诉大家是如何实现的,我们做个简单的,其实对控制台的操作还有很多,有兴趣的可以去查资料. 用到的API函数如下: / ...

  3. 在Win32程序中显示Dos调试窗口

    在很多程序中,都可以看到程序运行中,会有一个Dos窗口,实时显示一些运行信息,这里就告诉大家是如何实现的,我们做个简单的,其实对控制台的操作还有很多,有兴趣的可以去查资料. 用到的API函数如下: / ...

  4. 自己主动化的在程序中显示SVN版本号

    有时候会有这种情况,策划拿着应用过来提一个bug,但我们却不好确定策划的手机上装的应用相应的是那个代码版本号. 为了解决问题.我们希望能在应用上显示出当前应用所相应的代码版本号,即svn版本号. 构想 ...

  5. 在fragment中显示对话框出现异常

    异常类型为:android.view.WindowManager$BadTokenException: Unable to add window 我在fragment中public View onCr ...

  6. 微信小程序中显示与隐藏(hidden)

    1.wx.wxml页面部分 <view bindtap='click'>点击</view> //这是显示隐藏的部分 <view hidden="{{hidden ...

  7. C#在Winform程序中显示QQ在线状态

    首先,引入必要的命名空间 using System.Windows.Forms;  using System.Net; 其次,在Form中拖入一个PictureBox控件,并设置其SizeMode为A ...

  8. QT程序中显示中文字体解决办法

    Qt4.7.1 默认没有中文字体库,迅为给用户提供“文泉驿”字体和配置方法.本节需要的 文件在网盘: 用一个简单测试程序说明“文泉驿”字体的配置方法. 在 Qt Creater 新建工程“nihao” ...

  9. select引起的服务端程序崩溃问题

    现象: 某个线上的服务最近频繁崩溃.该服务使用C++编写,是个网络服务端程序.作为TCP服务端,接收和转发客户端发来的消息,并给客户端发送消息.该服务跑在CentOS上,8G内存.线上环境中,与客户端 ...

随机推荐

  1. vim配置python开发环境

    vim配置python开发环境 一.安装vim sudo apt-get install vim 二.vim基础配置 #Centos6.5 /usr/share/vim/vim72 vi /etc/v ...

  2. 【linux】学习笔记

    2014.06.07 开机无法上网,每次都得 $ sudo ifconfig eth1 up $ sudo dhclient eth1 后面发现原来是网卡没设置开机启动 编辑/etc/sysconfi ...

  3. xv6实验环境搭建

    安装bochs 因为要运行的是xv6,所以不能直接使用 apt-get 直接获取软件.apt-get获取到的软件不支持SMP (Symmetric Multi-Processing).因此,需要下载源 ...

  4. Discuz X1.5 利用添加好友处存储xss进行蠕虫worm扩散

    Discuz X1.5 在添加好友的地方有处存储xss,借助此处xss跟用户交互可以进行蠕虫指数扩散. 位置在添加好友处 x完之后的效果 点击后触发 ok 借助此存储xss,我们进行worm传播,dz ...

  5. 拥抱ARM妹纸第二季 之 第一次 点亮太阳

    上次做鱼缸LED灯时还有很多材料正好拿来用.穆等等哥- 俺去找材料. 材料列表     3W LED   x  3     散热片     x  1     恒流IC     x  1     其他零 ...

  6. PAT乙级真题1016.部分A+B(15)(2016-4-28)

    原题: 时间限制 100 ms 内存限制 65536 kB 代码长度限制 8000 B 正整数A的“DA(为1位整数)部分”定义为由A中所有DA组成的新整数PA.例如:给定A = 3862767,DA ...

  7. innobackupex:Error:xtrabackup child process has died at /usr/bin/innobackupex

    使用innobackupex进行数据库备份,报如下错误:innobackupex --compress --parallel=4  --user=root  --password=yoon /expo ...

  8. libnuma.so.1()(64bit) is needed by mysql-community-server-5.7.9-1.el6.x86_64

    版本:5.7.9 新装的CentOS 6.3 安装MySQL 5.7.9 出现的问题 1.首先卸载系统自带的mysql 5.1的包    yum   -y  remove   mysql-libs-5 ...

  9. 【UI控件总结】【UIScrollView】深入理解篇UIScrollerView

    [UI控件总结][UIScrollView]基本方法+基本描述 接下来,我整理一下自己的思路,深入理解 UIScrollView 基本点 : 1 . UIScrollView 是一个UIView. 每 ...

  10. Codeforces Round #333 DIV2

    D: B. Lipshitz Sequence time limit per test 1 second memory limit per test 256 megabytes input stand ...