2010-01-27 86 views
1

我确信这是可能的,但不确定是否有太多的箍环可以跳过去使它值得,希望有人可能指向正确的方向。我遇到了一个问题(与安装程序相关),因此我有一个定期的对话框弹出窗口,我需要按取消。以编程方式检索窗口句柄和按下按钮

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

如果有人知道我会如何实现这个或者一些很棒的初学者。

+0

我怀疑这会比解决导致对话框弹出的问题更麻烦,在安装过程中和之后都会遇到麻烦。毕竟,弹出一个模式对话框必须有一个很好的理由。 – Lazarus 2010-01-27 15:08:08

+0

事实上,它可能是,我也可能会发布有关这一点。但这种方法也有助于提高我的开发技能,看起来更有趣! :) – Ian 2010-01-27 15:09:45

+0

看到http://www.autohotkey.com/,与源代码 – lsalamon 2010-01-27 16:30:10

回答

0

两种方法可以做到这一点:

  • 为了让手柄,当你谈论一个窗口,使用FindWindow API,那么你就必须列举与该句柄相关联的控制,并发送消息WM_BUTTONDOWN,WM_BUTTONUP一起模拟鼠标点击通过使用SendMessage
  • 但更简单的方法存在,假设取消按钮被称为btnCancel,那么这就足够了btnCancel.Click()

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

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

希望这会有所帮助, 最好的问候, 汤姆。

1

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

相关问题