首页 > 解决方案 > 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')

标签: pythonpywin32sendmessagepostmessagehwnd

解决方案


推荐阅读