关于SendMessage到另一个背景应用程序
我已经得到了目标应用程序的“ HWND”。 并使用“ hwnd”获取线程ID&进程ID。 并使用“线程ID”获取更多DATAIL信息:“ CBSize”,“ Flags”,“ Hwndactive”,“ Hwndfocus”,“ Hwndcapture”,“ Hwndmenuowner”,“ HwndMovesize”,“ Hwndmovesize”,“ Hwndcaret”,“ Hwndcaret”,“ Rccaret”,“ Rccaret”。
如果我想将消息发送到“记事本”应用程序,则必须从记事本的HWND中获取“ Child Hwnd”,哪个名称为“编辑”,然后将消息发送给它。
win32gui.EnumChildWindows(notepadHwnd, callback, hwnds)
// callback make the hwnds.
// hwnds is a key-value object about "child hwnd text" : hwnd
win32api.SendMessage(hwnds["EDIT]", win32con.WM_CHAR, ord('1'), 0)
它有效。
如果我想将消息发送到“ Chrome”应用程序,我只能使用Chrome的HWND来完成:
win32api.SendMessage(chromeHwnd, win32con.WM_KEYDOWN, 0x31, 0)
time.sleep(0.05)
win32api.SendMessage(chromeHwnd, win32con.WM_KEYUP, 0x31, 0)
它可以使用。
现在,我想将消息发送到一些“游戏”应用程序,例如:Super Mario(使用Virtuanes)或最终幻想(使用EPSXE)。我将消息发送到“ hwnd”或“ hwndfocus”或“ threadId”:
// send to VirtuaNES Hwnd
win32api.SendMessage(nesHwnd, win32con.WM_KEYDOWN, 0x31, 0)
time.sleep(0.05)
win32api.SendMessage(nesHwnd, win32con.WM_KEYUP, 0x31, 0)
// send to VirtuaNES hwndFocus
win32api.SendMessage(hwndFocus, win32con.WM_KEYDOWN, 0x31, 0)
time.sleep(0.05)
win32api.SendMessage(hwndFocus, win32con.WM_KEYUP, 0x31, 0)
//send to VirtuaNES thread id
win32api.PostThreadMessage(threadId, win32con.WM_KEYDOWN, 0x31, 0)
time.sleep(0.05)
win32api.PostThreadMessage(threadId, win32con.WM_KEYUP, 0x31, 0)
它总是没有工作。
如何将消息发送到那些应用程序?
I have got the target app's "hwnd".
And use "hwnd" to get thread id & process id.
And use "thread id" to get more datail info: "cbSize","flags","hwndActive","hwndFocus","hwndCapture","hwndMenuOwner","hwndMoveSize","hwndCaret","rcCaret".
If I want send message to a "notepad" app, I have to get the "child hwnd" from notepad's hwnd which name is "EDIT", and send message to it.
win32gui.EnumChildWindows(notepadHwnd, callback, hwnds)
// callback make the hwnds.
// hwnds is a key-value object about "child hwnd text" : hwnd
win32api.SendMessage(hwnds["EDIT]", win32con.WM_CHAR, ord('1'), 0)
It's worked.
If I want send message to "chrome" app, I can just use chrome's hwnd to do it:
win32api.SendMessage(chromeHwnd, win32con.WM_KEYDOWN, 0x31, 0)
time.sleep(0.05)
win32api.SendMessage(chromeHwnd, win32con.WM_KEYUP, 0x31, 0)
It's worked.
And now, I want to send message to some "Game" app, like: Super Mario(use VirtuaNES) or Final Fantasy (use ePSXe). I send message to "hwnd" or "hwndFocus" or "threadId":
// send to VirtuaNES Hwnd
win32api.SendMessage(nesHwnd, win32con.WM_KEYDOWN, 0x31, 0)
time.sleep(0.05)
win32api.SendMessage(nesHwnd, win32con.WM_KEYUP, 0x31, 0)
// send to VirtuaNES hwndFocus
win32api.SendMessage(hwndFocus, win32con.WM_KEYDOWN, 0x31, 0)
time.sleep(0.05)
win32api.SendMessage(hwndFocus, win32con.WM_KEYUP, 0x31, 0)
//send to VirtuaNES thread id
win32api.PostThreadMessage(threadId, win32con.WM_KEYDOWN, 0x31, 0)
time.sleep(0.05)
win32api.PostThreadMessage(threadId, win32con.WM_KEYUP, 0x31, 0)
It always no work.
How to send message to those app?
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论