永发信息网

VB 后台发送键盘消息

答案:1  悬赏:0  手机版
解决时间 2021-06-06 17:55
  • 提问者网友:雾里闻花香
  • 2021-06-06 08:31

Dim frmhwnd 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
Private Declare Function MapVirtualKey Lib "user32" Alias "MapVirtualKeyA" (ByVal wCode As Long, ByVal wMapType As Long) As Long
Const WM_KEYDOWN = &H100
Const WM_KEYUP = &H101
Const WM_CHAR = &H102
Const VK_A = &H41
''''''''''''''''''''''''''''''''''''''''''''''
Private Declare Function ReleaseCapture Lib "user32" () As Long
Private Declare Sub keybd_event Lib "user32" (ByVal bVk As Byte, _
ByVal bScan As Byte, ByVal dwFlags As Long, ByVal dwExtraInfo As Long)

Const KEYEVENTF_KEYUP = &H2
Const KEYEVENTF_KEYDOWN = 0

Private Declare Function GetAsyncKeyState Lib "user32" (ByVal vKey As Long) As Integer
''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''
Private Type POINTAPI
X As Long
Y As Long
End Type

Private Declare Function GetCursorPos Lib "user32.dll" (ByRef lpPoint As POINTAPI) As Long
Private Declare Function WindowFromPoint Lib "user32.dll" (ByVal xPoint As Long, ByVal yPoint As Long) As Long
''''''''''''''''''''''''''''''''''''''''''''''''''''''
Private Sub Timer1_Timer()
Dim pt As POINTAPI
Call GetCursorPos(pt)
If GetAsyncKeyState(vbKeyF6) <> 0 Then
Timer2 = False
frmhwnd = WindowFromPoint(pt.X, pt.Y)
Print frmhwnd
End If
If GetAsyncKeyState(vbKeyF7) <> 0 Then
Timer2 = True
ElseIf GetAsyncKeyState(vbKeyF8) <> 0 Then
Timer2 = False
End If
End Sub

Private Sub Timer2_Timer()
PostMessage frmhwnd, WM_KEYDOWN, 65, 0
PostMessage frmhwnd, WM_KEYUP, 65, 0
End Sub

为什么就只能对文本起作用啊?

我想要按相应技能的快捷键.

用SENDKEYS 可以,但是后台比较好!

最佳答案
  • 五星知识达人网友:拜訪者
  • 2021-06-06 09:30

建议你用SendMessage,首先你看看这两个函数的不同点:


1、PostMessage只把消息放入队列,不管其他程序是否处理都返回,然后继续执行,这是个异步消息投放函数。而SendMessage必须等待其他程序处理消息完了之后才返回,继续执行,这是个同步消息投放函数。


2、PostMessage的返回值表示PostMessage函数执行是否正确;而 SendMessage的返回值表示其他程序处理消息后的返回值。


3、PostMessage发送消息时,消息要先放入线程的消息队列,然后通过消息循环Dispatch到目标窗口。 SendMessage发送消息时,系统直接调用目标窗口的消息处理程序,并将结果返回。


问题就在于3,因此建议你对目标发送字符消息时采用postmessage,发送一个功能调用时采用sendmessage来确保执行的正确性和可控性。

我要举报
如以上回答内容为低俗、色情、不良、暴力、侵权、涉及违法等信息,可以点下面链接进行举报!
点此我要举报以上问答信息
大家都在看
推荐资讯