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

时间:2008-08-20 18:22:55

标签: c# .net windows winapi

在我目前正在处理的应用程序中,要求是将外部应用程序的窗口置于前台。进行Win32 API调用(如BringWindowToTop和SetForeground窗口)始终不起作用。这是由于Windows XP中的一些限制。我想要做的是发送模拟鼠标单击任务栏上的窗口按钮,我希望将窗口放在前面。有谁知道这有可能吗?

4 个答案:

答案 0 :(得分:4)

http://www.codeproject.com/KB/dialog/dlgboxtricks.aspx查看“如何将注意力集中在2K / XP上”部分,因为这正是您所需要的。我不会去任务栏路线,因为任务栏可能被隐藏或根本不存在。

答案 1 :(得分:2)

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

这里有一点关于找到任务栏的窗口句柄:

http://www.codeproject.com/

FWIW,对BringWindowToTop / SetForeground的限制是存在的,因为当窗口窃取焦点时它会令人恼火。如果你在企业环境中工作,这可能无关紧要。请记住它。 :)

答案 2 :(得分:1)

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

Global Mouse and Keyboard Library

答案 3 :(得分:1)

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

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

  1. 检查是否IsIconic(最小化)
  2. 如果#1结果为true则调用 ShowWindow传递SW_RESTORE
  3. 然后调用SetForegroundWindow
  4. 我从来没有遇到过这些问题我能想到的问题。