任何人都可以帮助我这样做。 我正在尝试运行一个进程,然后在该进程中激活一个按钮。
像这样的东西
我有一个像WPF.exe这样的.exe文件,它有一个开始按钮。
这是代码..我知道它不是这样工作但是这样做的正确方法是什么?
Process.run("WPF.exe")
' i have no idea how to run this start button
Start_Click(sender, New System.EventArgs())
MsgBox("Start button clicked")
答案 0 :(得分:3)
按钮点击等事件基本上只是在操作系统后台进程之间发送的消息。每个'流程' (或窗口,控件等..)有自己的ID称为句柄,每个都是唯一的。您可以使用Windows Message API查找您正在查找的控件的句柄,然后向其发送消息。
您需要做的第一件事是声明您将使用的函数,并告诉编译器在哪里找到它们。您也可以借此机会声明点击消息不变(稍后会使用)。看起来像这样:
Private Declare Function FindWindow Lib "user32.dll" Alias "FindWindowA" (ByVal lpClassName As String, ByVal lpWindowName As String) As IntPtr
Private Declare Function FindWindowEx Lib "user32.dll" Alias "FindWindowExA" (ByVal hwndParent As IntPtr, ByVal hwndChildAfter As IntPtr, ByVal lpszClass As String, ByVal lpszWindow As String) As IntPtr
Private Declare Function SendMessage Lib "user32.dll" Alias "SendMessageA" (ByVal hWnd As IntPtr, ByVal wMsg As Integer, ByVal wParam As Integer, ByVal lParam As Integer) As Integer
Private Const BM_CLICK As Integer = &HF5
然后,在您的代码中,您可以先调用这些函数,找到父窗口的句柄(可能是包含您要单击的按钮的窗口),其次,使用该句柄查找按钮的句柄您想要单击的控件,最后,向该按钮发送单击消息。
Dim hWindow As IntPtr = FindWindow(vbNullString, "Window Title")
Dim hButton As IntPtr = FindWindowEx(hWindow, vbNullString, vbNullString, "Button Text")
Dim result As Integer = SendMessage(hButton, BM_CLICK, 0, 0)
请注意,您可能需要进行一些错误检查'在每个步骤之后,确保您已正确捕获控制句柄(hWindow
和hButton
),并且您从SendMessage
获得了非空结果。
更多信息:
要详细了解这些API函数,您可以查看其MSDN页面: