PostMessage Ctrl + V而不抬起窗口

时间:2015-01-16 02:40:56

标签: c windows

我维护了Vim-R-plugin,直到最后发布的版本,在Windows上,我使用Python将R代码从Vim文本编辑器复制到Windows剪贴板中,然后将其粘贴到R控制台窗口而不提高R控制台窗口。用于将Ctrl + V发送到R控制台的Python代码是:

def CntrlV():
    global RConsole
    win32api.keybd_event(0x11, 0, 0, 0)
    try:
        win32api.PostMessage(RConsole, 0x100, 0x56, 0x002F0001)
    except:
        RConsole = 0
        pass
    if RConsole:
        time.sleep(0.05)
        try:
            win32api.PostMessage(RConsole, 0x101, 0x56, 0xC02F0001)
        except:
            pass
    win32api.keybd_event(0x11, 0, 2, 0)

在插件的开发版本中,我将大多数用Python编写的代码转移到C库中,以避免使插件依赖于Python。但是,下面的代码(我尝试翻译Python代码)无效:

keybd_event(0x11, 0, 0, 0);
if(!PostMessage(RConsole, 0x100, 0x56, 0x002F0001))
    RConsole = NULL;
if(RConsole){
    Sleep(0.05);
    PostMessage(RConsole, 0x101, 0x56, 0xC02F0001);
}
keybd_event(0x11, 0, 2, 0);

Windows上的哪些C代码可用于将Ctrl + V发送到不在前台的窗口,甚至可以最小化?

1 个答案:

答案 0 :(得分:1)

如果您要模拟键盘事件,则只能粘贴到焦点窗口。

您可以在系统窗口中枚举窗口;找到您粘贴的窗口并使用WM_SETTEXT代替?