首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 开发语言 > VB >

百分相送,向进程句柄发送虚拟按键消息?解决办法

2012-02-15 
百分相送,向进程句柄发送虚拟按键消息??偶玩网游,想编一个简单的模拟按键的外挂.用PostMessage向游戏发送

百分相送,向进程句柄发送虚拟按键消息??
偶玩网游,想编一个简单的模拟按键的外挂.
用PostMessage向游戏发送按键消息.(为的是能在游戏最小化时起作用)
当用FindWindow得到窗口句柄时,PostMessage发送按键消息,游戏没反应,但是当焦点在聊天框时,能够输出按键文本.
于是怀疑,向用FindWindow得到的窗口句柄发送消息不是正确的方法.
那么,
问题1、PostMessage能不能向进程句柄发送按键消息呢?
问题2、进程句柄是不是像窗体句柄一样不变的,还是处在变化中?
问题3、用hwnd   =   OpenProcess(PROCESS_ALL_ACCESS,   True,   uProcess.th32ProcessID)获取进程句柄对不对?
请高人帮我解答以上三个问题,小弟感激不尽。。。。

附偶的进程句柄获取方法:

Dim   whwnd   As   Long   '定义进程句柄变量
Dim   uSnapShot   As   Long   '系统快照返回值
Dim   uResult   As   Long   '遍历进程返回值
Dim   uProcess   As   PROCESSENTRY32   '定义进程结构变量
uSnapShot   =   CreateToolhelp32Snapshot(TH32CS_SNAPPROCESS,   0&)   '建立系统快照
uProcess.dwSize   =   Len(uProcess)   '初始化进程信息长度
If   uSnapShot   Then
        uResult   =   Process32First(uSnapShot,   uProcess)   '取得第一个进程
        Do   While   uResult
            If   InStr(Left(uProcess.szExeFile,   InStr(uProcess.szExeFile,   Chr(0))   -   1),   "elementclient.exe ")   >   0   Then
                whwnd   =   OpenProcess(PROCESS_ALL_ACCESS,   True,   uProcess.th32ProcessID)
                'whwnd就是你想要的游戏的进程句柄
            End   If
        uResult   =   Process32Next(uSnapShot,   uProcess)   '取得快照中的下一个进程
        Loop
       
End   If
CloseHandle   hSnapshot

[解决办法]
1 SendInput
2 constant during process lifetime
3 wrong, use EnumWindows
[解决办法]
SendMessage 和PostMessage好象只能向窗口发送消息

进程ID 不会变 但进程句柄 每次调用OPENPROCESS都会不同
在没有CLOSEHANDLE前有效

hwnd = OpenProcess(PROCESS_ALL_ACCESS, True, uProcess.th32ProcessID)
把中间的参数改成0 或者FALSE

[解决办法]
//我非常想知道,vb中除了sendmessage和PostMessage,还有没有别的方法向后台程序发送按键消息??

最常用也最有效的就是用vb提供的sendkeys语句,使用sendkeys前,要先后调用GetWindowThreadProcessId AttachThreadInput SetFocus这些api函数,使目标窗口获得输入焦点
[解决办法]
后台发送消息也只能postmessage sendmessage或postthreadmessage了
postmessage和sendmessage的第一个句柄参数是由enumwindows得来的窗口句柄
你这里postmessage不生效,可以检查一下,是否游戏的处理机制不允许postmessage或忽略掉其它进程post的消息。
如完美世界的洙仙和武林外传,都是有一个简单的检查机制,当其它进程向客户端post或send消息时,判断客户端是否出于活动状态,如果不是则忽略掉这个消息,所以你需要writeprocessmemory到客户端进程,将这个机制绕过。
实际上,postmessage不是很好的解决方案,脱机的咱们技术水平有限作不了,简单的call还是能实现的,要不postmessage效果好得多。

热点排行