使用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"部分,因为这正是我们所需要的。我不会走任务栏路线,因为任务栏可能被隐藏或者根本不在那儿。