1

我在 winforms 中有一个计时器,用于在我的服务器上查找特定的确定对话框(它在内存不足的第三方应用程序上单击确定,然后重新启动它——没有其他解决方法)。因此,当我远程桌面时,服务器和远程桌面窗口处于活动状态(实际的远程桌面窗口处于活动状态,而不是必须单击 OK 的实际窗口。我可以有一个与好的,它可以工作),程序可以正常工作。它找到OK的窗口,然后点击OK按钮就好了。当我不在远程桌面时,或者当远程桌面窗口未激活(或选择)时,它会找到窗口并找到确定按钮,但无法单击确定按钮。

所以这是我在计时器中使用的点击确定:

Private Sub TimerCloseOK_Tick(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles TimerCloseOK.Tick
    Dim dialogBoxText As String = "My Program - Application Error"
    Dim hwnd As IntPtr = FindWindow("#32770", dialogBoxText)
    Dim WindowID As String = hwnd.ToString
    Dim buttonTitle As String
    buttonTitle = "OK"
    Dim dialogButtonHandle As IntPtr = FindWindowEx(hwnd, IntPtr.Zero, "Button", "OK")
    If Len(WindowID) > 0 And Integer.Parse(WindowID) <> 0 Then
        'CLICK OK
        SendMessage(dialogButtonHandle, BM_CLICK, 1, 0)
        mbCounter = mbCounter + 1
        Application.DoEvents()
        lCount.Text = mbCounter
    End If
End Sub
4

1 回答 1

0

那这个呢?

dim control1 as Control = Control.FromHandle(hwnd)
dim button1 as Button = TryCast(control1, Button)
If button1 IsNot Nothing Then button1.PerformClick()

编辑:假设您要在属于您的项目的 Windows.Forms.Button 上执行 ButtonClick(否则Control.FromHandle即使对于有效句柄也不会返回任何内容)。

于 2012-06-11T09:56:25.027 回答