我需要通过Windows服务隐藏任务栏和启动按钮。
在控制台程序中,我可以成功调用FindWindow
和/或EnumWindows
来获取"Shell_TrayWnd"
窗口,然后使用ShowWindow(hwnd, SW_HIDE)
隐藏它。
但是当服务执行FindWindow("Shell_TrayWnd", NULL)
时,它会返回NULL
,当服务执行EnumWindows
时,它会获得一个不包含"Shell_TrayWnd"
窗口的不完整列表。
任何人都可以建议服务如何看到"Shell_TrayWnd"
窗口,或建议隐藏任务栏和开始按钮(在服务中工作)的替代方法?感谢。
答案 0 :(得分:2)
为服务提供UI(或以其他方式与UI元素交互)的正确方法是提供在用户上下文中运行的GUI客户端,并使用一些IPC方法(可能是RPC,可能是消息传递)与之通信服务。特权服务中的UI处理始终是一个安全漏洞。
如果您只是想要一个以计算机为导向的过程来杀死任务栏,那么既不需要也不需要服务。配置计划任务以在登录时运行。或者将注册表设置为启动自定义shell而不是explorer.exe。除了用户自己的帐户之外,您没有做任何需要特权的事情。
要避免使控制台窗口闪烁,请为WINDOWS
子系统构建程序,或在构建完成后使用editbin /SUBSYSTEM:WINDOWS
更改PE标头中的标记。
答案 1 :(得分:0)
不幸的是,服务无法访问窗口。这是服务的(设计)限制。