Windows服务无法看到Shell_TrayWnd

时间:2012-11-28 15:56:52

标签: windows service taskbar

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

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

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

任何人都可以建议服务如何看到"Shell_TrayWnd"窗口,或建议隐藏任务栏和开始按钮(在服务中工作)的替代方法?感谢。

2 个答案:

答案 0 :(得分:2)

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

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

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

答案 1 :(得分:0)

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