我寫的是可以通過其他服務進行加載的程序(我們的控制之下),或者通過登錄的用戶。該程序需要知道窗口站是否交互以顯示對話框。我知道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