使用win32api发送按键到记事本不起作用

2 投票
1 回答
603 浏览
提问于 2025-04-17 20:47

这是我用来发送字符串“Hello world”中的按键的代码。
我打开了一个记事本,证明是字符串“found”被打印出来了,但我的记事本上什么也没有显示。

有什么想法吗?

import win32con
import win32api
import win32gui

def enumHandler(hwnd, lParam):
    if win32gui.IsWindowVisible(hwnd):
        if 'Notepad' in win32gui.GetWindowText(hwnd):
            print 'found'
            for c in "Hello World\n":
                win32api.PostMessage(
                                    hwnd,
                                    win32con.WM_CHAR,
                                    ord(c),
                                    0)

win32gui.EnumWindows(enumHandler, None)

1 个回答

3

问题在于,你把消息发送到了主记事本窗口。这个窗口就是最上面的那个,有标题栏的窗口。消息会被这个窗口下面的编辑控件处理。你只能通过发送消息到这个地方来让它工作。

不过,我相信你真正的问题并不是模拟键盘输入到记事本程序。你真正的问题很可能有更好的解决办法。Windows提供了UIAutomation功能,专门用来自动化应用程序。这很可能是解决你实际问题的正确方法。

撰写回答