Perl 无法使用Win32::GuiTest发送移位结束

Perl 无法使用Win32::GuiTest发送移位结束,perl,win32gui,Perl,Win32gui,我需要在perl脚本中自动执行一些键盘输入。为此,我使用模块。 这适用于除shift end之外我需要的所有条目 这是我寄的 Win32::GuiTest::SendKeys("+{END}"); 但它似乎只需要{END} 奇怪的是 Win32::GuiTest::SendKeys("+(some text)"); 工作正常并发送一些文本 事实上,我无法执行+{}命令,它总是只取{}中的键 另一方面,使用^(ctrl)或%(alt)的命令工作正常,例如Win32::GuiTest::Send

我需要在perl脚本中自动执行一些键盘输入。为此,我使用模块。 这适用于除shift end之外我需要的所有条目

这是我寄的

Win32::GuiTest::SendKeys("+{END}");
但它似乎只需要{END}

奇怪的是

Win32::GuiTest::SendKeys("+(some text)");
工作正常并发送一些文本

事实上,我无法执行
+{}
命令,它总是只取
{}
中的键

另一方面,使用
^
(ctrl)或
%
(alt)的命令工作正常,例如
Win32::GuiTest::SendKeys(“%{F4}”)
关闭窗口

有人知道为什么吗


谢谢:)

迟到的回答,不管怎样,也许这对某人有帮助

像Shift{End}这样的Shift{foo}命令需要通过SendRawKey包装器使用低级keybd_事件执行。这就是你想要的:

    SendRawKey(VK_LSHIFT, KEYEVENTF_EXTENDEDKEY);
    SendKeys('{END}');
    SendRawKey(VK_RSHIFT, KEYEVENTF_KEYUP);
    SendRawKey(VK_LSHIFT, KEYEVENTF_KEYUP);
完整示例(将完整行复制到剪贴板):


您是否尝试过
+{35}
?刚刚尝试过,它的行为与+{END}相同,它似乎只考虑了{35},但感谢您的回答:)
use warnings;
use strict;

use Win32::Clipboard;
use Win32::GuiTest qw (:ALL);   # Win32-GuiTest-1.63 used

print "place cursor now...\n"; sleep(5); print get_line();

sub get_line {

    Win32::Clipboard()->Empty();

    SendKeys('{HOME}');
    SendRawKey(VK_LSHIFT, KEYEVENTF_EXTENDEDKEY);
    SendKeys('{END}');
    SendRawKey(VK_RSHIFT, KEYEVENTF_KEYUP);
    SendRawKey(VK_LSHIFT, KEYEVENTF_KEYUP);

    SendKeys('^c');
    return Win32::Clipboard()->GetText();
}