以编程方式检索窗口句柄和按钮

时间:2010-01-27 15:04:39

标签: c#

我确信这有可能以某种方式,但不确定是否有一些太多的箍要跳过来让它值得,希望有人可能指出我正确的方向。我遇到了一个问题(与安装程序有关),我经常会有一个对话框弹出窗口,我需要按下取消。

我想要做的是以编程方式/可能通过服务关闭它,以便它不再妨碍我(假设我无法解决根问题)。所以,我想知道的是,是否有办法以某种方式抓住窗口的句柄(通过在标签上进行文本比较来检查它是否正确),然后在窗口上找到一个控件(取消按钮)并发送一个事件呢?

如果有人知道我将如何实现这一目标,或者一些优秀的先发球员。

2 个答案:

答案 0 :(得分:1)

查看AutoIt3。它可以很容易地进行这样的转换,如果你深入挖掘它,你会发现它用来做它的东西的WindowsAPI调用。如果你真的需要这些API,你可以在C#中进行PInvoke。否则只需编写一个AutoIt脚本来执行任务。

答案 1 :(得分:0)

两种方法:

  • 要获取句柄,当您谈论窗口时,请使用FindWindow API,然后您必须枚举与该句柄关联的控件,并将消息WM_BUTTONDOWN,WM_BUTTONUP一起发送以模拟鼠标单击通过使用SendMessage
  • 但是更简单的方法存在,假设取消按钮被称为btnCancel,那么这就足够了btnCancel.Click()

除非我弄错了,你说的是一个不属于你的过程的窗口,那么我的第一个建议就是这样。既然你没有说,如果你在谈论自己的应用程序或者不属于你的流程窗口......那么奥利弗的建议可能会更容易......

但这引出了一个问题:你为什么要这样做,因为你假设某个地方有一个取消按钮......

希望这有帮助, 最好的祝福, 汤姆。