2015-08-24 70 views
0

我只是想枚舉系統中的所有頂級窗口。當我在exe中使用EnumWindows函數時,它列舉了所有的窗口。相反,我使用的服務,我不能。它只列舉爲什麼EnumWindows不能在服務中工作?

C:\ WINDOWS \ SYSTEM32 \閥芯\工具\ PNT \ rpccp.exe C:\ WINDOWS \ SYSTEM32 \閥芯\工具\ PNT \ winfsmgr.exe

這些只有exe文件。我正在創建一個服務如下。 schService = CreateService(schSCManager,pServiceName,pServiceName,SERVICE_ALL_ACCESS,SERVICE_WIN32_OWN_PROCESS,SERVICE_AUTO_START,SERVICE_ERROR_NORMAL,pModuleFile,NULL,NULL,NULL,NULL,NULL);

是否有任何權限需要溝通來自此應用程序(服務)的另一個應用程序。或者我進一步做什麼enumwindows。

+0

這是一個Windows編程問題。與C++無關(即使您碰巧使用C++爲Windows編程,問題也與Windows相關)。 – Peter

回答

3

服務在會話0中運行,具有非交互式桌面。交互式桌面運行在會話1和更高版本中。 EnumWindows枚舉調用進程的桌面中的窗口。您的服務不會在交互式用戶的桌面上運行。

如果要枚舉特定桌面上的窗口,則需要在該桌面上執行該過程。服務是這項工作的錯誤工具。如果您絕對需要了解服務中的信息,則需要在服務與目標桌面上運行的另一個進程之間使用IPC。

+0

對不起@David Heffernan我不知道什麼是會話0和會話1.你會給我一個鏈接來閱讀它是什麼。 – baru

+0

以這些條款的網絡搜索開始:session 0 isolation –

+0

反正謝謝@David Heffernan – baru

相關問題