Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/320.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 使用什么SendMessage将密钥直接发送到另一个窗口?_Python_Winapi_Input_Pywin32 - Fatal编程技术网

Python 使用什么SendMessage将密钥直接发送到另一个窗口?

Python 使用什么SendMessage将密钥直接发送到另一个窗口?,python,winapi,input,pywin32,Python,Winapi,Input,Pywin32,我正在尝试使用SendMessage将键盘输入发送到另一个窗口。我知道缺点,但我必须这样做,因为我必须发送几个键,我不能保证窗口会有焦点-所以当窗口没有焦点时,这必须起作用 我试着将按键发送到记事本窗口来测试它。我尝试过以下几种变体,但都没有成功: def post_keys1(hwnd): win32api.SendMessage( hwnd, win32con.WM_KEYDOWN, ord('A'), 0 + (0 << 8) + (or

我正在尝试使用
SendMessage
将键盘输入发送到另一个窗口。我知道缺点,但我必须这样做,因为我必须发送几个键,我不能保证窗口会有焦点-所以当窗口没有焦点时,这必须起作用

我试着将按键发送到记事本窗口来测试它。我尝试过以下几种变体,但都没有成功:

def post_keys1(hwnd):
    win32api.SendMessage(
        hwnd, win32con.WM_KEYDOWN, ord('A'),
        0 + (0 << 8) + (ord('A') << 16) + (0 << 24))
    win32api.SendMessage(
        hwnd, win32con.WM_CHAR, ord('A'),
        0 + (0 << 8) + (ord('A') << 16) + (0 << 24))
    win32api.SendMessage(
        hwnd, win32con.WM_KEYUP, ord('A'),
        0 + (0 << 8) + (ord('A') << 16) + (0xC0 << 24))

def post_keys2(hwnd):
    win32api.PostMessage(
        hwnd, win32con.WM_KEYDOWN, ord('A'),
        0 + (0 << 8) + (ord('A') << 16) + (0 << 24))
    win32api.PostMessage(
        hwnd, win32con.WM_CHAR, ord('A'),
        0 + (0 << 8) + (ord('A') << 16) + (0 << 24))
    win32api.PostMessage(
        hwnd, win32con.WM_KEYUP, ord('A'),
        0 + (0 << 8) + (ord('A') << 16) + (0xC0 << 24))

def post_keys3(hwnd):        
    win32api.SendMessage(hwnd, win32con.WM_CHAR,
                         ord('A'), 0)

def post_keys4(hwnd):        
    win32api.PostMessage(hwnd, win32con.WM_CHAR,
                         ord('A'), 0)

def post_keys5(hwnd):        
    win32api.PostMessage(hwnd, win32con.WM_KEYDOWN, ord('A'), 0)
    win32api.PostMessage(hwnd, win32con.WM_CHAR, ord('A'), 0)
    win32api.PostMessage(hwnd, win32con.WM_KEYUP, ord('A'), 0)

def post_keys6(hwnd):
    win32api.SendMessage(hwnd, win32con.WM_KEYDOWN, ord('A'), 0)
    win32api.SendMessage(hwnd, win32con.WM_CHAR, ord('A'), 0)
    win32api.SendMessage(hwnd, win32con.WM_KEYUP, ord('A'), 0)
def post_键1(hwnd):
win32api.SendMessage(
hwnd,win32con.WM_KEYDOWN,ord('A'),

0 + (0当我写这个问题时,我知道
SendKeys
是生成键盘输入的正确方法,而且这是唯一一种在所有情况下都有效的方法。但是,我不能使用
SendKeys
,因为我的程序正在运行的计算机将在我的程序运行时被积极使用,这意味着鼠标点击可能在某个时间发生y时间将改变窗口的焦点,并使
SendKeys
开始向错误的窗口发送输入

我想知道的是为什么我的代码不起作用——我发送的消息类型是否有问题?
Post
vs.
Send
?WPARAM应该是什么?等等……答案可能是因为我将消息发送到记事本窗口,而不是发送到我的编辑控件de记事本-我怀疑这会起作用

不管怎样,我尝试将输入发送到我希望它实际工作的应用程序,但最终成功:

def send_input_hax(hwnd, msg):
    for c in msg:
        if c == "\n":
            win32api.SendMessage(hwnd, win32con.WM_KEYDOWN, win32con.VK_RETURN, 0)
            win32api.SendMessage(hwnd, win32con.WM_KEYUP, win32con.VK_RETURN, 0)
        else:
            win32api.SendMessage(hwnd, win32con.WM_CHAR, ord(c), 0)

因此,答案是,就消息类型或消息内容而言,我没有做错任何事情,只是到达了一个错误的目的地。

+1但这只是一个注意事项,以防它发生在其他人身上:在某些应用程序中,你必须使用
PostMessage
而不是
SendMessage
来模拟
VK\u返回到工作K