百分相送,向进程句柄发送虚拟按键消息??
偶玩网游,想编一个简单的模拟按键的外挂.
用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效果好得多。