关于SendMessage到另一个背景应用程序

发布于 2025-02-06 18:27:07 字数 1483 浏览 3 评论 0原文

我已经得到了目标应用程序的“ 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 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。
列表为空,暂无数据
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文