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

vb的postmessage函数的使用,完全没反应,想破脑袋也没想通
Private Declare Function SendMessage Lib "user32 " Alias "SendMessageA" (ByVal hwnd As Long, ByVal wMsg As Long, ByVal wParam As Long, lParam As Any) As Long Private Declare Function FindWindow Lib "user32" Alias "FindWindowA" (ByVal lpClassName As String, ByVal lpWindowNa...

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...

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...

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 鼠标位置的一些问题
先移动鼠标的位置,给个API Private Declare Function SetCursorPos Lib "user32" Alias "SetCursorPos" (ByVal x As Long, ByVal y As Long) As Long

相似回答