Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2012.01.01;
Скачать: CL | DM;

Вниз

Имитация нажатия клавиш   Найти похожие ветки 

 
я   (2011-09-27 06:07) [0]

function KeyboardInput(InputWord:string):boolean;
begin

if (InputWord ="SHIFT+END") then
begin
    keybd_event(VK_LSHIFT, 0, 0, 0);
    keybd_event(VK_END, 0, 0, 0);
    sleep(random(500));
    keybd_event(VK_END, 0, KEYEVENTF_KEYUP, 0);
    sleep(random(500));
    keybd_event(VK_LSHIFT, 0, KEYEVENTF_KEYUP, 0);
    sleep(random(1200));
end
else
if (InputWord ="END") then
Begin
    keybd_event(VK_END, 0, 0, 0);
    sleep(random(500));
    keybd_event(VK_END, 0, KEYEVENTF_KEYUP, 0);
End
else
if (InputWord ="HOME") then
begin
    keybd_event(VK_Home, 0, 0, 0);
    keybd_event(VK_Home, 0, KEYEVENTF_KEYUP, 0);
end
else
if (InputWord ="DELETE") then
begin
    keybd_event(VK_Delete, 0, 0, 0);
    sleep(random(300));
    keybd_event(VK_Delete, 0, KEYEVENTF_KEYUP, 0);
end

result:=true;

end;


есть такая процедура, которая должна эмулировать нажатие кнопок.

Далее при активном поле неизвестного класса, но работающего как Edit начинаем вызывать функцию в следующей последовательности:

.....
KeyboardInput("HOME");
KeyboardInput("SHIFT+END");
KeyboardInput("DELETE");
.....


Я пытаюсь этим добиться того, чтобы сначала произошел переход в начало строки - и на сколько я могу судить это происходит. Затем вторым вызовом строка должна выделится, а курсор перейти в конец строки. И далее строка удаляется третим вызовом.

А на практике выходит. Что курсор уходит в начало, потом в конец, но строка при этом не выделяется. Где косяк?


 
я   (2011-09-27 06:10) [1]

да, если делать вручную то же самое с реальной клавиатуры, то проблем нет. Кроме того случается так, что после пробегания по этому коду Вдруг сбрасывается фокус с редактируемого поля - чтобы это такое могло быть?

Ну разве что еще перед этими тремя действиями вызывается подобное, но по кликанью мышкой в этом поле, чтобы ему фокус передать.


 
Омлет ©   (2011-09-27 07:57) [2]

Для VK_END нужен ещё флаг KEYEVENTF_EXTENDEDKEY.


 
Омлет ©   (2011-09-27 08:15) [3]

const
 ExtendedKeys: set of Byte = [
       VK_LBUTTON, VK_RBUTTON, VK_CANCEL, VK_MBUTTON, VK_BACK, VK_TAB, VK_CLEAR,
       VK_RETURN, VK_SHIFT, VK_CONTROL, VK_MENU, VK_PAUSE, VK_CAPITAL, VK_KANA,
       VK_HANGUL, VK_JUNJA, VK_FINAL, VK_HANJA, VK_KANJI, VK_ESCAPE,
       VK_CONVERT, VK_NONCONVERT, VK_ACCEPT, VK_MODECHANGE, VK_SPACE, VK_PRIOR, VK_NEXT,
       VK_END, VK_HOME, VK_LEFT, VK_UP, VK_RIGHT, VK_DOWN, VK_SELECT, VK_PRINT, VK_EXECUTE,
       VK_SNAPSHOT, VK_INSERT, VK_DELETE, VK_HELP, VK_LWIN, VK_RWIN, VK_APPS, VK_NUMPAD0,
       VK_NUMPAD1, VK_NUMPAD2, VK_NUMPAD3, VK_NUMPAD4, VK_NUMPAD5, VK_NUMPAD6,
       VK_NUMPAD7, VK_NUMPAD8, VK_NUMPAD9, VK_MULTIPLY, VK_ADD, VK_SEPARATOR,
       VK_SUBTRACT, VK_DECIMAL, VK_DIVIDE, VK_F1, VK_F2, VK_F3, VK_F4, VK_F5, VK_F6, VK_F7,
       VK_F8, VK_F9, VK_F10, VK_F11, VK_F12, VK_F13, VK_F14, VK_F15, VK_F16, VK_F17, VK_F18,
       VK_F19, VK_F20, VK_F21, VK_F22, VK_F23, VK_F24, VK_NUMLOCK, VK_SCROLL, VK_LSHIFT,
       VK_RSHIFT, VK_LCONTROL, VK_RCONTROL, VK_LMENU, VK_RMENU, VK_PROCESSKEY, VK_ATTN,
       VK_CRSEL, VK_EXSEL, VK_EREOF, VK_PLAY, VK_ZOOM, VK_NONAME, VK_PA1, VK_OEM_CLEAR
 ];

procedure SendKeyInput(AKey: Byte; IsKeyUp: boolean = false);
var
 Input: TInput;
begin
 Input.Itype := INPUT_KEYBOARD;
 with Input.ki do
 begin
   wVk := AKey;
   if AKey in ExtendedKeys then
     dwFlags := KEYEVENTF_EXTENDEDKEY;
   if IsKeyUp then
     dwFlags := dwFlags or KEYEVENTF_KEYUP;
   time := 0;
   dwExtraInfo := 0;
 end;
 SendInput(1, Input, SizeOf(Input));
end;

procedure TForm1.AmGo;
begin
 SendKeyInput(VK_HOME);
 SendKeyInput(VK_HOME, true);
 SendKeyInput(VK_LSHIFT);
 SendKeyInput(VK_END);
 SendKeyInput(VK_END, true);
 SendKeyInput(VK_LSHIFT, true);
end;

procedure TForm1.btn1Click(Sender: TObject);
begin
 edt1.SetFocus;
 AmGo;
end;



Страницы: 1 вся ветка

Текущий архив: 2012.01.01;
Скачать: CL | DM;

Наверх




Память: 0.48 MB
Время: 0.017 c
15-1316076889
ProgRAMmer Dimonych
2011-09-15 12:54
2012.01.01
ASLR - проблема в Delphi или Windows?


15-1316065835
Gu
2011-09-15 09:50
2012.01.01
Свернуть процедуры


15-1315859385
Юрий
2011-09-13 00:29
2012.01.01
С днем рождения ! 13 сентября 2011 вторник


1-1278968008
Oleg
2010-07-13 00:53
2012.01.01
Закладки PageControl


2-1317030684
Gu
2011-09-26 13:51
2012.01.01
Передать commandline