【问题标题】:Retrieve Window Handle and Press Button Programatically以编程方式检索窗口句柄并按下按钮
【发布时间】:2010-01-27 15:04:39
【问题描述】:

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

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

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

【问题讨论】:

  • 我怀疑这将比修复导致对话框弹出的问题更麻烦,在安装期间和之后都会出现问题。毕竟,弹出模式对话框必须有充分的理由。
  • 确实,很可能是这样,我也可能会发布关于它的内容。但这种方法也有助于提高我的开发技能,而且看起来更有趣! :)
  • autohotkey.com,有来源

标签: c#


【解决方案1】:

查看AutoIt3。它可以很容易地进行此类转换,如果您深入研究它,您会发现它使用哪些 WindowsAPI 调用来完成它的工作。如果你真的需要这些 API,你可以在 C# 中 PInvoke。否则只需编写一个 AutoIt 脚本来执行您的任务。

【讨论】:

    【解决方案2】:

    两种方法:

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

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

    但这引出了一个问题:假设某处有一个“取消”按钮,为什么要这样做...

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-05-27
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多