一个善良的灵魂是否会帮助提供一个 vba 解决方案来按下 Microsoft 计算器中的按钮(例如 3)而不使用 sendkeys?
请原谅我的糟糕工作,因为我是新手,我相信我被卡住了,因为窗户不是独一无二的。
如果有人对此问题有解决方案,请随时发布您的答案。我欢迎除了 sendkeys 之外的所有选择。非常感谢。
下面是我失败的代码。
Private Const BM_CLICK = &HF5
Private Declare Function FindWindow Lib "user32" Alias "FindWindowA" (ByVal lpClassName As String, ByVal lpWindowName As String) As Long
Private Declare Function SendMessage Lib "user32" Alias "SendMessageA" (ByVal hwnd As Long, ByVal wMsg As Long, ByVal wParam As Long, lParam As Any) As Long
Private Declare Function FindWindowEx Lib "user32" Alias "FindWindowExA" (ByVal hWndParent As Long, ByVal hWndChildAfter As Long, ByVal lpClassName As String, ByVal lpWindowName As String) As Long
Sub Calculator()
Dim Program As String, TaskID As Double
Program = "calc.exe"
On Error Resume Next
AppActivate "Calculator"
If Err <> 0 Then
Err = 0
TaskID = Shell(Program, 1)
Do
DoEvents
hwindow2 = FindWindow(vbNullString, "Calculator")
Loop Until hwindow2 > 0
main_view = FindWindowEx(hwindow2, 0&, "Calcframe", vbNullString)
sub_view = FindWindowEx(main_view, 0&, "#32770", vbNullString)
sub_window = FindWindowEx(sub_view, 0&, "Button", vbNullString)
'Call SendMessage(sub_window, BM_CLICK, 0, ByVal0&)
If Err <> 0 Then MsgBox "Can't start " & Program
End If
End Sub