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

創作者介紹
創作者 隨心記憶 的頭像
小幻 微風

隨心記憶

小幻 微風 發表在 痞客邦 留言(0) 人氣( 2441 )