(高分相送)急切求助-服务程序 接收桌面程序消息问题!

renjieit 2010-06-10 11:37:14
问题描述:
写了一个服务程序,并在服务程序中单独开启一个线程创建了一个窗口(隐藏的) 然后想用这个窗口来响应消息.结果是操作系统发送的消息我都能接收到.但是桌面应用程序广播的消息我就接受不到.查了半天,看见网上的同仁们都说是因为服务程序与桌面应用程序不在同一个"桌面"中.需要经过OpenDesktop()函数和SwitchThreadDesktop()函数获取用户桌面环境(好像是名为Default). 然后将服务本身设置到这个环境中,用SetWorkStation()这个函数.问题是我查了半天,就是不明白服务程序的桌面环境和普通应用程序的桌面环境有什么不同.这个"桌面"是用做什么的? 我该怎么才能把我服务中启动的窗口线程或者这个服务进程添加到普通应用程序所在的"桌面"中? 很急啊...大牛们帮忙啊...
...全文
78 5 打赏 收藏 转发到动态 举报
写回复
用AI写文章
5 条回复
切换为时间正序
请发表友善的回复…
发表回复
wltg2001 2010-06-11
  • 打赏
  • 举报
回复
问题是我查了半天,就是不明白服务程序的桌面环境和普通应用程序的桌面环境有什么不同.这个"桌面"是用做什么的? 我该怎么才能把我服务中启动的窗口线程或者这个服务进程添加到普通应用程序所在的"桌面"中?
===========
服务程序的桌面与应用程序并不是运行在同一个window station下,普通的桌面程序运行在window station下的Winsta0桌面上。而服务程序不在。
其实,如果想服务和桌面通信,只要创建服务时选可交互服务就行了。比如写成:
schService=CreateService(schSCManager,TEXT(SZSERVICENAME),TEXT(SZAPPNAME), SERVICE_ALL_ACCESS,SERVICE_WIN32_OWN_PROCESS|SERVICE_INTERACTIVE_PROCESS,SERVICE_DEMAND_START, SERVICE_ERROR_NORMAL,szPath,NULL, NULL,NULL,NULL, NULL);
oyljerry 2010-06-11
  • 打赏
  • 举报
回复
不能修改服务,那么就不要走消息这个通道,可以走Event,管道等其他方式
renjieit 2010-06-11
  • 打赏
  • 举报
回复
[Quote=引用 1 楼 wltg2001 的回复:]
问题是我查了半天,就是不明白服务程序的桌面环境和普通应用程序的桌面环境有什么不同.这个"桌面"是用做什么的? 我该怎么才能把我服务中启动的窗口线程或者这个服务进程添加到普通应用程序所在的"桌面"中?
===========
服务程序的桌面与应用程序并不是运行在同一个window station下,普通的桌面程序运行在window station下的Winsta0桌面上。而服务程序不在。
其……
[/Quote]

感谢这位大侠的支持,是这样的服务程序还要启动好多的其他插件,那个建立了隐藏窗口的插件是我的.我不能去改写服务的代码. 而且,我记得这个窗口栈还是在 "会话"的层次下面. 这样说的话,服务的会话 和 普通桌面应用程序的 "会话" 还不同, 那要怎么跳跃 "会话" 呢? 如果我在服务中 获取 "winsta0" 这个窗口栈是不是和 普通程序所在的这个栈?
renjieit 2010-06-11
  • 打赏
  • 举报
回复
权限权限啊...居然是拒绝访问.真郁闷
renjieit 2010-06-11
  • 打赏
  • 举报
回复
我是想这样,在发消息这边呢,因为消息不时特别频繁,每次发消息的时候就将自己设置到当前会话->service-0x0-3e7$->default .然后发消息.
发送完成后再将本进程设置回原来的桌面模式:当前会话->winsta0->default .
但是调用OpenWindowStation()这函数总是不能成功~.用这个函数还要有什么约束吗?

15,471

社区成员

发帖
与我相关
我的任务
社区描述
VC/MFC 进程/线程/DLL
社区管理员
  • 进程/线程/DLL社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧