永发信息网

VB 后台发送键盘消息

答案:1  悬赏:0  手机版
解决时间 2021-06-06 17:55

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 可以,但是后台比较好!

最佳答案

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


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


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


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


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

我要举报
如以上问答信息为低俗、色情、不良、暴力、侵权、涉及违法等信息,可以点下面链接进行举报!
大家都在看
为什么不好好学习就要受苦
PSP晓之觉醒
DNF波比20级升不了级
N95 N82浙江水货最新报价
公安县荆州雅丽窗饰在哪里啊,我有事要去这里
学城市燃气工程技术专业毕业的大专生适合考公
指头断了能再次生长出来你信吗?
镜之边缘SP3能玩吗
这道题怎样?当a>0时,|a|=____.
网站申请的第一视频广告还有弹窗的吗?
2010年国假有多少天?具体哪些天?
如何把朋友间的友谊处好?
谁知到韩剧IRIS中所有的歌曲名?
本人没刷图就是在搞下公会一样的2小时之内掉4
一氧化碳为什么不能写成Co
推荐资讯
怎么算生命的卡罗牌,我的好像是"4 "皇帝牌
有适合NOKIA6030的电子书软件吗?
在浴室里洗个澡 正常价格要多少钱
海贼王救哎斯啊到 漫画第几集开始
我想知道,我QQ目前值多少钱?
怎么生小孩
为什么QQ空间更新后音乐盒页面显示不了呢?一
武陵区常德技师学院地址在什么地方,想今天过
铁锋区齐齐哈尔市商业银行(南马路支行)在什么
孝南区孝感文昌社区城市网格化管理办公室地址
无限极传买店
N7309年还有得卖吗?
正方形一边上任一点到这个正方形两条对角线的
阴历怎么看 ?