【问题标题】:unable to send shift-end with Win32::GuiTest无法使用 Win32::GuiTest 发送 shift-end
【发布时间】:2018-01-11 11:07:56
【问题描述】:

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

这是我发送的内容

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

但它似乎只需要 {END}。

奇怪的是

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

工作正常并发送SOME TEXT

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

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

有人知道为什么吗?

谢谢:)

【问题讨论】:

  • 你试过+{35} 吗?
  • 刚刚试过,它的行为与 +{END} 相同,似乎只考虑了 {35} 但感谢您的回答:)

标签: perl win32gui


【解决方案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();
}

【讨论】:

    猜你喜欢
    • 2010-12-15
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2022-12-28
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多