Public Class API_SendMessage
Private Declare Function FindWindowEx Lib "user32" Alias "FindWindowExA" (ByVal hWnd1 As Integer, ByVal hWnd2 As Integer, ByVal lpsz1 As String, ByVal lpsz2 As String) As Integer
Private Declare Function FindWindow Lib "user32.dll" Alias "FindWindowA" (ByVal lpClassName As String, ByVal lpWindowName As String) As Integer
Declare Function PostMessage Lib "user32" Alias "PostMessageA" (ByVal hwnd As IntPtr, ByVal wMsg As IntPtr, ByVal wParam As IntPtr, ByVal lParam As IntPtr) As IntPtr
Private Declare Ansi Function SendMessage Lib "user32.dll" Alias "SendMessageA" (ByVal hwnd As Integer, ByVal wMsg As Integer, ByVal wParam As Integer, ByVal lParam As String) As Integer
Declare Function MapVirtualKey Lib "user32" Alias "MapVirtualKeyA" (ByVal wCode As Long, ByVal wMapType As Long) As Long
'Public Const WM_CHAR = &H46
Public Const WM_KEYDOWN = &H100
Public Const WM_KEYUP = &H101
Public Const WM_UP = &H101
Public Const WM_CHAR = &H102
Public Const VK_A = &H41
Const VK_NUMLOCK = &H90 ' Num Lock
Const KEYEVENTF_KEYDOWN = &H0 ' KeyDown
Const KEYEVENTF_KEYUP = &H2 ' KeyUp
Const VK_F1 = &H70
Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
TextBox1.Text = "a"
Dim hwnd As Integer = FindWindow("notepad", vbNullString)
Dim x As Integer = FindWindowEx(hwnd, 0, "Edit", vbNullString)
' PostMessage(hwnd, WM_KEYDOWN, VK_A, MakeKeyLparam(VK_A, WM_KEYDOWN)) '按下A键
' PostMessage(hwnd, WM_CHAR, Asc("A"), MakeKeyLparam(VK_A, WM_KEYDOWN)) '输入字符A
' PostMessage(hwnd, WM_UP, VK_A, MakeKeyLparam(VK_A, WM_UP)) '释放A键
PostMessage(x, WM_KEYDOWN, VK_A, 0) '按下A键
End Sub
Function MakeKeyLparam(ByVal VirtualKey As Long, ByVal flag As Long) As Long
Dim s As String
Dim Firstbyte As String 'lparam参数的24-31位
If flag = WM_KEYDOWN Then '如果是按下键
Firstbyte = "00"
Else
Firstbyte = "C0" '如果是释放键
End If
Dim Scancode As Long
'获得键的扫描码
Scancode = MapVirtualKey(VirtualKey, 0)
Dim Secondbyte As String 'lparam参数的16-23位,即虚拟键扫描码
Secondbyte = Strings.Right("00" & Hex(Scancode), 2)
s = Firstbyte & Secondbyte & "0001" '0001为lparam参数的0-15位,即发送次数和其它扩展信息
MakeKeyLparam = Val("&H" & s)
End Function
End Class
請先 登入 以發表留言。