无法使用Win32 :: GuiTest

时间:2018-01-11 11:07:57

标签: perl win32gui

我需要在perl脚本中自动化一些键盘条目。为此,我使用Win32::GuiTest模块。 除了shift-end之外,这适用于我需要的所有条目。

这是我发送的内容

Win32::GuiTest::SendKeys("+{END}");

但似乎只需要{END}。

奇怪的是

Win32::GuiTest::SendKeys("+(some text)");

正常工作并发送SOME TEXT

事实上,我无法执行+{}命令,它只占用{}

中的密钥

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

有人会知道为什么吗?

谢谢:)

1 个答案:

答案 0 :(得分:1)

无论如何,最新答案也许对某人有所帮助...

像Shift {End}这样的

Shift {foo}命令需要通过SendRawKey包装器与低级keybd_event一起执行。这就是您要寻找的:

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

完整样本(将整行复制到剪贴板中):

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();
}