无法使用 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的主要内容,如果未能解决你的问题,请参考以下文章