Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/windows/17.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
PostMessage Ctrl+;不升窗_C_Windows - Fatal编程技术网

PostMessage Ctrl+;不升窗

PostMessage Ctrl+;不升窗,c,windows,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(RConsol

我维护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发送到不在前台且甚至可以最小化的窗口?

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


您可以通过系统窗口枚举窗口;找到要粘贴到的窗口并使用
WM_SETTEXT

我在网上发现了一些评论,说WM_SETTEXT不适用于PostMessage。微软已经改变了系统块应用程序的功能,使其不再执行此类操作。你研究过窗钩程序吗?用Python编写的代码是在Windows XP上开发的,现在仍然可以在Windows 8上运行。我想我不需要钩子过程,因为我不想监视操作系统。我需要从一个应用程序向另一个应用程序发送消息。我想这里提到的一些事情可能会有所帮助