python - PyWin32 PostMessage 或 SendMessage 不会在 BlueStacks 上没有窗口焦点的情况下发送击键
问题描述
如果窗口处于焦点位置,我可以让我的代码工作。但是,如果我在记事本或其他程序上测试它就可以了。我使用相同的方法来模拟没有焦点的鼠标点击。它只是不想在没有窗口焦点的情况下发送击键。
我已经尝试使用 SendMessage 和 PostMessage 并且我的 HWND 是接受消息的子窗口(我也尝试过向下树并使用更多的子 HWND)
有人有解决方法吗?我愿意使用不同的库,我只是不想关注窗口。
import win32api, win32con, win32gui, win32ui
import time
def send_input_hax(msg,pycwnd):
for c in msg:
if c == "\n":
pycwnd.SendMessage(win32con.WM_KEYDOWN, win32con.VK_RETURN, 0)
pycwnd.SendMessage(win32con.WM_KEYUP, win32con.VK_RETURN, 0)
else:
pycwnd.SendMessage(win32con.WM_CHAR, ord(c), 0)
def click(x,y,pycwnd):
lParam = win32api.MAKELONG(x,y)
pycwnd.SendMessage(win32con.WM_LBUTTONDOWN, win32con.MK_LBUTTON, lParam);
pycwnd.SendMessage(win32con.WM_LBUTTONUP, 0, lParam);
def get_whndl():
whndl = win32gui.FindWindowEx(0, 0, None, 'BlueStacks')
return whndl
def make_pycwnd(hwnd):
PyCWnd = win32ui.CreateWindowFromHandle(hwnd)
return PyCWnd
hwnd = win32gui.FindWindow(None, 'BlueStacks')
whndl = get_whndl()
def callback(hwnd, hwnds):
if win32gui.IsWindowVisible(hwnd) and win32gui.IsWindowEnabled(hwnd):
hwnds[win32gui.GetClassName(hwnd)] = hwnd
return True
hwnds = {}
win32gui.EnumChildWindows(whndl, callback, hwnds)
whndl = hwnds['plrNativeInputWindowClass']
pycwnd = make_pycwnd(whndl)
time.sleep(5)
send_input_hax('red')
解决方案
推荐阅读
- discord.js - 当有人加入我的服务器时,我需要一个 AutoRole 命令
- python - Get argument names from a parser, without parsing arguments in argparse python
- redis - 如何使用 Redis 查找位于不同键的两个值之间的结果?
- import - How to reuse code from the main bin in another bin?
- sql - How to count values of a column of the same type in postgresql?
- wpf - 如何告诉 Dispatcher 已初始化并正在运行?
- node.js - Type as property 使用 graphql-yoga 和 prisma 解析为 null
- firebase - 如何在 Firebase 托管 + Cloud Run 中使用多个 cookie?
- java - 继承类中的 Spring 自动装配
- javascript - 对象解构返回嵌套对象