以下代码不适用于 VB.net,而是适用于 VB/VBA,它与 sendkeys 方法类似,但可能更可靠一些,因为它将密钥专门发送到目标应用程序。 (我得到它的帖子也显示了 sendkeys 方法)
Public Declare Function FindWindowX Lib "user32" Alias "FindWindowExA" (ByVal hWnd1 As Long, _
ByVal hWnd2 As Long, ByVal lpsz1 As Long, ByVal lpsz2 As Long) As Long
Public Declare Function FindWindow Lib "user32" Alias "FindWindowA" (ByVal lpClassName As String, ByVal lpWindowName As String) As Long
Private Declare Function PostMessage Lib "user32" Alias "PostMessageA" (ByVal hwnd As Long, _
ByVal wMsg As Long, ByVal wParam As Long, ByVal lParam As Long) As Long
Public Declare Function SendMessage Lib "user32" Alias "SendMessageA" (ByVal hwnd As Long, ByVal wMsg As Long, ByVal wParam As Integer, ByVal lParam As Integer) As Long
Private Const WM_KEYDOWN = &H100
Private Const WM_KEYUP = &H101
Sub Three()
hWind = FindWindow(vbNullString, "Untitled - Notepad")
cWind = FindWindowX(hWind, 0, 0, 0)
Debug.Print PostMessage(cWind, WM_KEYDOWN, vbKeyA, 0)
Debug.Print PostMessage(cWind, WM_KEYDOWN, vbKeyB, 0)
Debug.Print PostMessage(cWind, WM_KEYDOWN, vbKeyC, 0)
End Sub
代码取自this论坛帖子
如果将其粘贴到 Excel/VBA 中的新模块中并运行记事本的新实例,则执行子程序时“abc”应出现在记事本中。
我不明白如何使用此方法或 sendkeys 方法可能“损坏”目标窗口。只要您正确地计时消息(不要同时向窗口发送大量字符),就不会造成任何问题。