我写的是可以通过其他服务进行加载的程序(我们的控制之下),或者通过登录的用户。该程序需要知道窗口站是否交互以显示对话框。我知道GetProcessWindowStation函数,但是这个返回一个句柄。有没有办法找出答案?如何知道所连接的windowstation是否互动?
1
A
回答
5
交互式窗口站总是winsta0。所以你需要获得窗口站名来确定它。下面是一些伪代码:
wchar_t buffer[256] = {0};
DWORD length = 0;
GetUserObjectInformation(GetProcessWindowStation(), UOI_NAME, buffer, 256, &length);
if (!lstrcmp(buffer, "winsta0")) {
// Interactive!
}
从http://msdn.microsoft.com/en-us/library/ms687096(VS.85).aspx:
交互式窗口站,Winsta0,是唯一的窗口站,可以显示的用户接口或接收用户输入
0
我建议让服务传递命令行参数,让程序知道它是由服务而不是用户启动的。
0
请注意,这仅适用于Windows XP(然后只是偶尔) - 在Windows Vista和超越,从交互用户单独的会话中运行的服务,所以你永远无法连接到控制台上的那些操作系统。
此外在Windows XP中,你的应用程序不会,如果有机器(快速用户切换),多用户,因为只有第一个用户登录到会话0(其中服务运行)工作。
你会好得多分裂您的服务分为两个部分 - 它做的工作和一小块的代码运行的任务(使用Win32任务调度程序的API)服务运行的UI。
相关问题
- 1. 如何知道用户是否连接到互联网?
- 2. 如何知道互联网连接是否存在?
- 3. 如何知道网络是否连接?
- 4. 如何知道socket.Io是否连接android
- 5. 如何知道地图上的标记是否互相接触
- 6. 如何知道MS Windows是否存在红色或互联网连接?
- 7. 如何知道IEEE 1394(FireWire)是否连接到我的Windows 7?
- 8. 我如何知道服务器的连接是否正确?
- 9. 代理(如squid)如何知道连接是否使用http?
- 10. 如何知道Josso 1是否已成功连接到LDAP?
- 11. 如何快速知道服务器是否连接?
- 12. 如何知道设备是否有数据连接?
- 13. SFTP:如何知道我是否连接到unix或windows主机?
- 14. 如何知道客户端是否已关闭连接?
- 15. 如何知道服务容器是否已准备好连接?
- 16. android:如何知道internet连接是否可用?
- 17. 如何知道在java中是否完成了tcp连接?
- 18. PHP:如何知道PostgreSQL持久连接是否已经打开?
- 19. 如何知道您是否连接到Wifi Hotspot/Wifi/Wifi Direct
- 20. NodeJS MySQL - 如何知道连接是否发布
- 21. 我如何知道连接是否与websockets一起存在?
- 22. Android - 如何知道TCP连接是否仍然打开
- 23. 如何知道远程用户是否在django中连接?
- 24. 如何知道本地区域连接是否可用
- 25. 如何立即知道与Socket.IO连接是否丢失?
- 26. 如何知道连接是否已经进行
- 27. 如何知道是否连接wifi形式的移动热点AP?
- 28. 如何知道webkitSpeechRecognition是否启动?
- 29. iPhone:如何知道UISlider是否滑动?
伟大的答案。一个警告 - 我得到的窗口站是“WinSta0”。字符串比较函数需要是lstrcmpi。 – cuteCAT 2009-12-18 20:20:52