3

我需要通过 Windows 服务隐藏任务栏和开始按钮。

在控制台程序中,我可以成功调用FindWindow和/或EnumWindows获取"Shell_TrayWnd"窗口,然后使用ShowWindow(hwnd, SW_HIDE).

但是当服务执行时FindWindow("Shell_TrayWnd", NULL)它返回NULL,并且当服务执行时EnumWindows它得到一个不包括"Shell_TrayWnd"窗口的不完整列表。

谁能建议服务如何查看"Shell_TrayWnd"窗口,或建议隐藏任务栏和开始按钮的替代方法(在服务中有效)?谢谢。

4

2 回答 2

2

为服务提供 UI(或以其他方式与 UI 元素交互)的正确方法是提供在用户上下文中运行并使用某种 IPC 方法(可能是 RPC,可能是消息传递)与服务通信的 GUI 客户端。特权服务中的 UI 处理一直是一个安全漏洞。

如果您只是想要一个计算机进程来杀死任务栏,那么服务既不需要也没有帮助。将计划任务配置为在登录时运行。或者将注册表设置为启动自定义 shell 而不是 explorer.exe。除了用户自己的帐户之外,您没有做任何需要特权的事情。

为避免控制台窗口闪烁,请为WINDOWS子系统构建程序,或editbin /SUBSYSTEM:WINDOWS在构建完成后更改 PE 标头中的标志。

于 2013-12-21T20:02:45.713 回答
0

不幸的是,服务无法访问窗口。这是服务的(设计的)限制。

于 2012-12-02T18:18:34.653 回答