我知道窗户把手" HWND"可以通过ShowWindow函数(hwnd,SW_HIDE)隐藏,此函数可以取消激活并隐藏窗口。
我想要做的是同时隐藏和激活窗口,我想从窗口获取数据但同时隐藏它。如何实现这一目标?
答案 0 :(得分:1)
隐藏窗口(SW_HIDE
)活动(也称为聚焦)是不可能的。不过,这是一件好事,因为如果可能,那将是一个巨大的安全风险。用户可能正在输入他们的密码并无意中将其提供给隐藏的窗口,该窗口已经失去了焦点。更不用说让一个看不见的窗口窃取所有输入事件会令人难以置信。
现在,您可以通过最小化窗口(SW_SHOWMINIMIZED
)或将其大小减小到非常小的位置来模拟隐藏窗口。最小化的窗口仍然可以是活动/聚焦窗口;他们的任务栏图标将相应更改以说明这一点。同样,Windows并不关心窗口在屏幕上的小小,它仍然可以是活动/聚焦的。
一些较旧的应用程序会尝试通过将其移动到极大的正(或小负)坐标来模拟隐藏窗口,其中假设窗口始终在屏幕外。当然,一旦Windows开始支持多个监视器(大约在Windows 98的时候),这种方法的问题立即变得明显 - 这些“隐形”窗口开始显示在位于其左侧和右侧的其他监视器用户主屏幕。糟糕。
但是,我不认为这些方法中的任何一种都是非常好的设计。这是我经常要求人们解释为什么他们认为他们需要这样做的地方。像这样的问题通常是XY Problem的表现形式,在那里你询问你想象的问题解决方案而不是询问如何解决问题本身。你说那个
我想从窗口获取数据,但同时隐藏它
但我不确定这意味着什么。 “从窗口获取数据”是什么意思?无论是否处于活动状态,您都可以从窗口“获取数据”。如果你告诉我们你想要获得什么样的数据,我可以建议一种更好的方法来检索数据。但是,例如,如果要从窗口上的文本框控件中检索文本,则可以向文本框控件发送WM_GETTEXT
消息。其他常见控件也有类似的消息。
您需要关注窗口的唯一时间是,如果您尝试使用类似SendInput
的内容将鼠标和键盘事件注入输入队列,目标是以编程方式驱动应用程序。这是愚蠢的,尤其是因为它的脆弱性。即使您设法让窗口隐藏并且活动就像您想要的那样,也没有什么能阻止用户点击其他地方,更改聚焦窗口,并打破您仔细设置的所有内容。几乎总有一种更好的方法来实现UI自动化。