VB Postmessage发送字符串问题

偶尔玩一下网络游戏,为了方便 就想用VB 做一个简单的打怪辅助工具。
现在的问题是:
Postmessage往游戏窗口(已知句柄)发送按键消息时 没有反映。 但是对文本窗口是有效的。
这个问题是出在哪里呢?
用VB写的
游戏是 天龙八部

任何应用程序(包括背景)发送的任何关键信息(包括普通字符键,功能键,按住Shift键/控制/ Alt键加任意组合按键的键)来自动执行特定的功能,是一种用途很广,功能很实用价值,很多人都被困在此,很难理解,我也遇到过这方面的需求,并封锁。开始查了很多的信息化解决方案和互联网用户,一些可以发挥作用,但也有许多程序的测试证明行不通的。发送移位/控制/ Alt加任何的按键组合没有找到一个可行的解决方案,例如,下面的代码就不会被发送到指定的窗口(HWND)按Ctrl + C:
PostMessage的HWND,WM_KEYDOWN WM_KEYDOWN ,VK_C H002E0001“按C键的
PostMessage的HWND VK_CONTROL,H001D0001”的按下Ctrl键
PostMessage的HWND WM_KEYUP,VK_C和HC02E0001释放C键
PostMessage的HWND WM_KEYUP VK_CONTROL, HC01D0001“释放Ctrl键
上面的例子中,只能发送一个小写字母c。
下面的代码可以模拟Ctrl + C键,但它不能被发送到指定窗口的背景:
keybd_event VK_Ctrl,0,0,0'按下Ctrl键
的keybd_event VK_C的,0 0,0,按C键
keybd_event VK_C,0,KEYEVENTF_KEYUP,“C键
keybd_event VK_Ctrl 0,KEYEVENTF_KEYUP释放,释放Ctrl键
有真的没有办法解决这个问题的方式吗?我觉得应该这样做!后来,经过反复的Windows消息机制和键盘输入系统调用数据,终于找到了一个解决方案,并成功地展示了测试。自己一度被困在这里,得到最终的解决方案,而不是排斥的,现在来了,同样需要将大部分这方面的需求的朋友,而且这个问题已不再是少数“大师”的独家秘籍。
任何应用程序窗口发送模拟的关键,必须先获得输入焦点,要接收的关键不需要激活该应用程序的窗口句柄,以便使用Windows API的查找窗口FindWindowEx,首先FindWindow顶部的应用程序(顶层)的窗口句柄,然后使用FindWindowEx得到你想要领取钥匙的子窗口或控制的句柄,因为顶层窗口的应用程序不一定是关键的是接受窗口(如记事本。exe“的记事本程序实际收到的”关键点“窗口是主窗口中的”记事本“编辑控制)的ClassID或Caption找到。已经取得了假设的目标窗口句柄(HWND),窗口,然后使用PostMessage发送消息的普通字符键直接最简单的WM_CHAR消息如下:
PostMessage的HWND,WM_CHAR,ASC(“A”;),0'字符
发送的非普通字符键如功能键,箭头键使用WM_KEYDOWN,WM_KEYUP消息如下:
PostMessage的hWndMsg WM_KEYDOWN,VK_ESCAPE&H00010001'模拟按下Esc键
的PostMessage的hWndMsg的WM_KEYUP,VK_ESCAPE HC0010001模拟电梯Esc键
最后一个参数(LPARAM)低16位(0001)表示,按键高8位00表示,C0被解除,第二个最高(01个)的扫描码键,可以使用API?? MapVirtualKey( VirtualKey,0),得到(注:在每个系统中的扫描码可能会有所不同,在这个特定的数值例子,在实际应用中MapVirtualKey)。
下一个点偏移/控制/ ALT修饰键与其他键组合如何发送,使用下面的方法(使用Shift和Control API keybd_event):
keybd_event VK_SHIFT,H2A,0,0'模拟按下SHIFT键,与H2A是扫描码VK_SHIFT BR /> PostMessage的hWndMsg,WM_KEYDOWN,VK_A,及H001E0001的模拟按下A键,SHIFT + A产生一个大写的A字
的PostMessage的hWndMsg的WM_KEYUP,VK_A HC01E0001的模拟提起的一个关键
keybd_event VK_SHIFT&H2A,KEYEVENTF_KEYUP,0'模拟电梯的SHIFT键
(扫描码2A)替换上述VK_SHIFT VK_CONTROL(扫描1D)Ctrl键组合,可以实现VK_A(扫描代码1E)可以替换为任何功能键,如VK_F4(扫描代码3E)。
ALT修饰键特殊,它是一个系统的关键使用WM_SYSKEYDOWN / WM_SYSKEYUP消息,如下:
PostMessage的hWndMsg,WM_SYSKEYDOWN,VK_F4和H003E0001或&H20000000'模拟按Alt + F4
PostMessage的hWndMsg,WM_SYSKEYUP,VK_F4,与HC03E0001或&H20000000'模拟电梯ALT + F4
'&H20000000范围内的码位,设置Alt键被按下 / a>
在这一点上,你就大功告成了!我希望你快乐!
温馨提示:内容为网友见解,仅供参考
第1个回答  2012-12-11
你对游戏窗口发送字符串是没有用的,得发送按键消息,用sendmessage函数

VB Postmessage发送字符串问题
VB SendMessage发送字符串 Global Const WM_SETTEXT = &HC Declare Function SendMessageByString& Lib "user32" Alias "SendMessageA" (ByVal hwnd As Long, ByVal wMsg As Long, ByVal wParam As Long, ByVal lParam As String)Dim a As String a = "大家好呀!"'一定要用SendMessageByS...

VB Postmessage发送字符串问题
已经取得了假设的目标窗口句柄(HWND),窗口,然后使用PostMessage发送消息的普通字符键直接最简单的WM_CHAR消息如下:PostMessage的HWND,WM_CHAR,ASC(“A”;),0'字符 发送的非普通字符键如功能键,箭头键使用WM_KEYDOWN,WM_KEYUP消息如下:PostMessage的hWndMsg WM_KEYDOWN,VK_ESCAPE&H00010001'...

VB PostMessage 函数的问题
函数原型 BOOLWINAPIPostMessage(HWNDhWnd,UINTMsg,WPARAMwParam,LPARAMlParam);参数说明 hWnd:其窗口程序接收消息的窗口的句柄。可取有特定含义的两个值:HWND_BROADCAST:消息被寄送到系统的所有顶层窗口,包括无效或不可见的非自身拥有的窗口、 被覆盖的窗口和弹出式窗口。消息不被寄送到子窗口 NULL:此...

vb postmessage问题
Private Declare Function PostMessage Lib "user32" Alias "PostMessageA" (ByVal hwnd As Long, ByVal wMsg As Long, ByVal wParam As Long, ByVal lParam As Long) As Long 声明出错~ 还有有些edit是不能发送按键的 要直接设置文本 按键是发送给主窗体 ...

VB中postmessage用法
postmessage 成功与否 ,不仅和 键盘码有关,还和控件句柄 和 程序设置有关。不知道你 postmessage 是发送到哪个程序的 ,有可能程序屏蔽了 键盘消息,你怎么发都不会有响应了。

vb postmessage 中 怎么向某窗口发送 ctrl+F
仔细研究了下这个问题,向后台发送单键可以,发送组合键只能发送alt+x这种,ctrl的shift的都不行 alt+V的发法:Private Sub Command4_Click()SendMessage Command2.hWnd, BM_CLICK, 0, 0 End Sub Private Sub Text1_KeyDown(KeyCode As Integer, Shift As Integer)If KeyCode = vbKeyV And ...

VB向已知窗口句柄的窗口postmessage失败了,为什么的??
如果用PostMessage发送局部消息模拟按键不成功的话,你可以试一试全局级的键盘消息,看看能不能骗过目标程序。用API函数keybd_event,这个函数可以用来模拟一个键盘事件,它的VB声明为:Declare Sub keybd_event Lib "user32" (ByVal bVk As Byte, ByVal bScan As Byte, ByVal dwFlags As Long, By...

vb的postmessage函数的使用,完全没反应,想破脑袋也没想通
下行加个debug.print hWndX '看看是否为0 另外应该还少一个api函数FindWindowEx 如果只用窗体一个函数就够了,如果还要窗体下的一个控件那还得需要一个api函数,spy++是看控件类型的,就一窗体根本用不了spy++ 参考一下以前我写的(看怎么找控件,用的是sendmessage,你的问题就出在这里):Option ...

VB中postmessage用法
postmessage 成功与否 ,不仅和 键盘码有关,还和控件句柄 和 程序设置有关。不知道你 postmessage 是发送到哪个程序的 ,有可能程序屏蔽了 键盘消息,你怎么发都不会有响应了。

vb6.0 怎么向子窗口传入字符
先获取CMD窗口句柄,再用PostMessage传过去。以下代码实现子类化并发送字符串到控制台,测试通过。Private Declare Function GetWindowThreadProcessId Lib "user32" (ByVal hwnd As Long, lpdwProcessId As Long) As LongPrivate Declare Function GetParent Lib "user32" (ByVal hwnd As Long) As Long...

相似回答