vb 给其他程序的文本框发送字符 似乎是sendmassege

2025-03-07 09:37:21
推荐回答(3个)
回答1:

比如下面的代码:Private Sub Command1_Click()
Dim data() As Byte
Dim i, h1, h2 As Long
i = 0
data = StrConv("测试", vbFromUnicode)
h1 = FindWindow(vbNullString, "form1")
h2 = FindWindowEx(h1, 0, "ThunderTextBox", "")
While i <= UBound(data)
PostMessage h2, WM_CHAR, data(i), 0
DoEvents
i = i + 1
Wend
End Sub以上代码是给form1窗口的文本框发送“测试”两个字,注意要用postmessage函数,因为用sendmessage时要等待响应后才返回,所以很容易卡死,postmessage是直接返回结果的

回答2:

'纠正下,是PostMessagePrivate Declare Function MapVirtualKey Lib "user32" Alias "MapVirtualKeyA" (ByVal wCode As Long, ByVal wMapType As Long) As Long
Private 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, lParam As Any) As Long
Const WM_KEYDOWN = &H100
Const WM_KEYUP = &H101
Const WM_CHAR = &H102
Const VK_A = &H41
Const VK_CONTROL = &H11Private 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 = Right("00" & Hex(Scancode), 2)
s = Firstbyte & Secondbyte & "0001" '0001为lparam参数的0-15位,即发送次数和其它扩展信息
MakeKeyLparam = Val("&H" & s)
End FunctionPrivate Sub Timer1_Timer() '示例:
Call PostMessage(FindWindow(vbNullString, "Form123"), WM_KEYDOWN, VK_CONTROL, 0)
Call PostMessage(FindWindow(vbNullString, "Form123"), WM_KEYUP, VK_CONTROL, 0)
End Sub

回答3:

如果可以的话,先采纳我吧,我要用分数参加比赛.