在我当前正在开发的应用程序中,要求是将外部应用程序的窗口带到前台。进行 Win32 API 调用(例如 BringWindowToTop 和 SetForeground 窗口)并不总是有效。这是由于 Windows XP 中的一些限制造成的。我想做的是发送模拟鼠标单击任务栏上的窗口按钮,我希望这会将窗口带到前面。有谁知道这怎么可能?

有帮助吗?

解决方案

请查看“如何转移对 2K/XP 的关注”部分,网址为 http://www.codeproject.com/KB/dialog/dlgboxtricks.aspx, ,因为这正是您所需要的。我不会走任务栏路线,因为任务栏可能被隐藏或根本不在那里。

其他提示

这是可能的。但它非常粗略。您的应用程序也可能会在下一版本的 Windows 中崩溃,因为它没有文档记录。您需要做的是找到任务栏的窗口句柄,然后找到代表该按钮的子窗口的窗口句柄,然后向其发送 WM_MOUSEDOWN (我认为)消息。

以下是有关查找任务栏窗口句柄的一些信息:

http://www.codeproject.com/

FWIW,对 BringWindowToTop/SetForeground 的限制是存在的,因为当窗口窃取焦点时它会很烦人。如果您在公司环境中工作,这可能并不重要。请记住这一点。:)

我在一个需要模拟点击和鼠标移动的程序中使用了它;

全球鼠标和键盘库

老实说,我在 XP/Vista/2003/2000 上将窗口置于前台时从未遇到过问题。

您需要确保执行以下操作:

  1. 检查是否IsIconic(最小化)
  2. 如果#1导致True,请致电ShowWindow通过SW_Restore
  3. 然后调用SetForegroundWindow

我从来没有遇到过可以用这些步骤来完成的问题。

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top