为啥 EnumWindows 不能在服务中工作?

Posted

技术标签:

【中文标题】为啥 EnumWindows 不能在服务中工作?【英文标题】:Why EnumWindows Not Working in service?为什么 EnumWindows 不能在服务中工作? 【发布时间】:2015-08-24 08:03:56 【问题描述】:

我只是想枚举系统中的所有***窗口。当我在 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。

【问题讨论】:

这是一个 Windows 编程问题。与 C++ 无关(即使您碰巧使用 C++ 为 windows 编程,问题是 windows 特定的)。 【参考方案1】:

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

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

【讨论】:

对不起@David Heffernan,我不知道第 0 次会议和第 1 次会议是什么。你能给我一个链接来阅读它是什么吗? 从网络搜索这些术语开始:会话 0 隔离

以上是关于为啥 EnumWindows 不能在服务中工作?的主要内容,如果未能解决你的问题,请参考以下文章

为啥 MPMoviePlayerController 能在模拟器中工作,而不能在设备中工作?

为啥 getResourceAsStream() 可以在 IDE 中工作,但不能在 JAR 中工作?

为啥字体松鼠 @font-face 生成器不能在 IE8 中工作?

为啥这个 jQuery AJAX PUT 可以在 Chrome 中工作,但不能在 FF 中工作

为啥 SwiftUI ObservedObject 不能在列表行中工作?

Kivy:为啥 ScrollView 不能在 GridLayout 中工作?