我在winforms中有一个计时器,用于在我的服务器上查找特定的OK对话框(它在内存耗尽的第三方应用程序上单击“确定”,然后重新启动它 - 没有其他解决办法)。因此,当我远程桌面时,服务器和远程桌面窗口处于活动状态(实际的远程桌面窗口处于活动状态,而不是具有必须单击的确定的实际窗口。我可以有一个与窗口无关的窗口好的,它的工作原理),该程序可以正常工作。它找到OK的窗口,然后单击OK按钮。当我不在远程destop中,或者远程桌面窗口未激活(或选择)时,它找到窗口并找到“确定”按钮,但无法单击“确定”按钮。
所以这就是我在我的计时器中使用的单击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
答案 0 :(得分: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
甚至不会返回任何有效句柄)。