使用C#将鼠标单击发送到任务栏中的按钮

时间:2020-03-05 18:41:13  来源:igfitidea点击:

在我当前正在处理的应用程序中,一个要求是将外部应用程序的窗口置于前台。始终无法进行诸如BringWindowToTop和SetForeground窗口之类的Win32 API调用。这是由于Windows XP中的某些限制。我想做的是发送模拟鼠标单击任务栏上的窗口按钮,我希望它将窗口置于最前面。有人知道这怎么可能吗?

解决方案

回答

这是可能的。但这是非常粗略的。应用程序可能也未随Windows的下一版本一起发布,因为该文档尚未记录。我们需要做的是找到任务栏的窗口句柄,然后找到代表该按钮的子窗口的窗口句柄,然后向其发送WM_MOUSEDOWN(我认为)消息。

以下是查找任务栏的窗口句柄的一些步骤:

http://www.codeproject.com/

FWIW上存在BringWindowToTop / SetForeground的限制,因为当窗口窃取焦点时,这很烦人。如果我们在公司环境中工作,那可能没关系。只要记住它。 :)

回答

我在需要模拟点击和鼠标移动的程序中使用了此功能。

全局鼠标和键盘库

回答

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

我们需要确保执行以下操作:

  • 检查IsIconic(最小化)
  • 如果#1结果为true,则通过SW_RESTORE调用ShowWindow
  • 然后调用SetForegroundWindow

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

回答

在http://www.codeproject.com/KB/dialog/dlgboxtricks.aspx上查看"如何专注于2K / XP"部分,因为这正是我们所需要的。我不会走任务栏路线,因为任务栏可能被隐藏或者根本不在那儿。