为什么 EnumWindows 在服务中不起作用?

bar*_*aru 2 c++ winapi

我只是想枚举系统中的所有顶级窗口。当我在 exe 中使用 EnumWindows 函数时,它会枚举所有窗口。相反,我在我不能使用的服务中使用。它只列举

C:\Windows\System32\spool\tools\pnt\rpccp.exe C:\Windows\System32\spool\tools\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。

Dav*_*nan 6

服务在会话 0 中运行,具有非交互式桌面。交互式桌面在会话 1 和更高版本中运行。EnumWindows枚举调用进程桌面中的窗口。您的服务不在交互式用户的桌面上运行。

如果要枚举特定桌面上的窗口,则需要在该桌面上执行该过程。服务是该工作的错误工具。如果您绝对需要知道服务中的信息,则需要在服务和目标桌面上运行的另一个进程之间使用 IPC。