我写的是可以通过其他服务进行加载的程序(我们的控制之下),或者通过登录的用户。该程序需要知道窗口站是否交互以显示对话框。我知道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. 如何知道socket.Io是否连接android
- 4. 如何知道网络是否连接?
- 5. 如何知道地图上的标记是否互相接触
- 6. 如何知道MS Windows是否存在红色或互联网连接?
- 7. 如何知道IEEE 1394(FireWire)是否连接到我的Windows 7?
- 8. 我如何知道服务器的连接是否正确?
- 9. 代理(如squid)如何知道连接是否使用http?
- 10. android:如何知道internet连接是否可用?
- 11. 如何知道您是否连接到Wifi Hotspot/Wifi/Wifi Direct
- 12. 如何知道Josso 1是否已成功连接到LDAP?
- 13. 如何知道本地区域连接是否可用
- 14. 如何立即知道与Socket.IO连接是否丢失?
- 15. 我如何知道连接是否与websockets一起存在?
- 16. 如何快速知道服务器是否连接?
- 17. 如何知道是否连接wifi形式的移动热点AP?
- 18. 如何知道webkitSpeechRecognition是否启动?
- 19. 如何知道是否
- 20. 如何知道查询所采用的sql连接大小?
- 21. 如何知道我的DirectoryEntry是否真的连接到我的LDAP目录?
- 22. 推送通知是否需要互联网连接?
- 23. 如何通知互联网连接断开,但WiFi仍连接
- 24. Facebook如何快速知道所有用户连接?
- 25. 如何知道你是否有Python中的非连续列表?
- 26. 如何知道wifi是否与新的Android连接Lollipop wifi管理
- 27. 如何知道与现有数据库Neo4j的连接是否成功?
- 28. 如何知道指定的JID是否已连接到服务器?
- 29. 如何知道NSWindow是否是前窗?
- 30. 如何知道表是否是数组?
伟大的答案。一个警告 - 我得到的窗口站是“WinSta0”。字符串比较函数需要是lstrcmpi。 – cuteCAT 2009-12-18 20:20:52