невозможно отправить сдвиг с помощью Win32::GuiTest


person Flying_whale    schedule 11.01.2018    source источник
comment
Вы пробовали +{35} ?   -  person Kosh    schedule 12.01.2018
comment
только что попробовал, он ведет себя так же, как + {END}, кажется, учитывает только {35}, но спасибо за ваш ответ :)   -  person Flying_whale    schedule 12.01.2018


Ответы (1)


Поздний ответ, в любом случае, может быть, это поможет кому-то...

Команды Shift{foo}, такие как Shift{End}, необходимо выполнять с низкоуровневым keybd_event через оболочку SendRawKey. Итак, это то, что вы ищете:

    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();
}
person Andreas Kneissl    schedule 28.06.2018