无法使用 Win32::GuiTest 发送 shift-end

Posted

技术标签:

【中文标题】无法使用 Win32::GuiTest 发送 shift-end【英文标题】:unable to send shift-end with Win32::GuiTest 【发布时间】: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 但感谢您的回答:) 【参考方案1】:

无论如何,迟到的答案,也许它对某人有帮助......

像 ShiftEnd 这样的 Shiftfoo 命令需要通过 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();

【讨论】:

以上是关于无法使用 Win32::GuiTest 发送 shift-end的主要内容,如果未能解决你的问题,请参考以下文章

可以用 Perl 编程语言做哪些神奇好玩的事情

Zookeeper异常宕机重启失败分析

Centos 定时任务发送smtp邮件

求助,win10蓝牙显示已配对,但是没有连接

为啥在终端上写 ppm 时会在终端上弹出 Perl 包管理器而不是 ppm>

Win11系统软件无法拖拽发送文件的解决方法