Конференция "WinAPI" » Необходимо имитировать нажатие Ctrl+A [D7]
 
  • Сергей (25.03.15 20:49) [0]
    Необходимо имитировать нажатие Ctrl+A вне окна программы. Как это сделать? приведенный код не работает! в чем ошибка?

    xx:=1093;
    yy:=974;
    SetCursorPos(xx,yy);
    Mouse_Event(MOUSEEVENTF_LEFTDOWN,0,0,0,0);
    Mouse_Event(MOUSEEVENTF_LEFTUP,0,0,0,0);
    sleep(55);

    keybd_event(vk_control,0,0,0);
    keybd_event(ord('A'),0,0,0);
    keybd_event(ord('A'),0,keyeventf_keyup,0);
    keybd_event(vk_control,0,keyeventf_keyup,0);
  • Rouse_ © (25.03.15 21:05) [1]
    Потому что нажатие, это последовательность из KEYEVENTF_EXTENDEDKEY, и только потом KEYEVENTF_KEYUP плюс KEYEVENTF_EXTENDEDKEY.
    Читай мануалы что ли: https://msdn.microsoft.com/en-us/library/windows/desktop/ms646304(v=vs.85).aspx
  • Rouse_ © (25.03.15 21:06) [2]
    Ну и конечно, SendInput еще никто не отменял.
  • Сергей (25.03.15 21:42) [3]
    теперь другая проблема, ctrl "запала"
  • Rouse_ © (25.03.15 21:51) [4]
    Код покажи, ведь явно через строчку читаешь и вот это не учел: "KEYEVENTF_KEYUP плюс KEYEVENTF_EXTENDEDKEY"
  • Сергей (25.03.15 21:52) [5]
    keybd_event(vk_control,0,KEYEVENTF_EXTENDEDKEY,0);
                                           keybd_event(ord('A'),0,KEYEVENTF_EXTENDEDKEY,0);
                                           keybd_event(ord('A'),0,keyeventf_keyup,0);
                                           keybd_event(vk_control,0,keyeventf_keyup,0);

                                           sleep(55);

                                           Clipboard.Astext:='****';

                                           keybd_event(vk_lcontrol,0,KEYEVENTF_EXTENDEDKEY,0);
                                           keybd_event(ord('V'),0,KEYEVENTF_EXTENDEDKEY,0);
                                           keybd_event(ord('V'),0,keyeventf_keyup,0);
                                           keybd_event(vk_lcontrol,0,keyeventf_keyup,0);
  • Rouse_ © (25.03.15 21:53) [6]

    >                                        keybd_event(ord('V'),
    > 0,keyeventf_keyup,0);
    >                                        keybd_event(vk_lcontrol,
    > 0,keyeventf_keyup,0);

    Как я и сказал.
  • Сергей (25.03.15 21:53) [7]
    как понять KEYEVENTF_KEYUP плюс KEYEVENTF_EXTENDEDKEY?
  • Rouse_ © (25.03.15 21:55) [8]
    Да как хочешь, ты же программист :)

    Хоть так: KEYEVENTF_KEYUP + KEYEVENTF_EXTENDEDKEY
    Хоть так: KEYEVENTF_KEYUP or KEYEVENTF_EXTENDEDKEY

    Все равнозначно в данном случае, т.к. с флагами работаем.
  • Сергей (25.03.15 21:58) [9]
    CTRL не отпускается...
    прости, но видно туповат я... не вижу ошибки (
  • Сергей (25.03.15 22:01) [10]
    поправь тут код, чтобы я его тупо скопировал в процедуру ... заранее огромное спасибо!
  • Rouse_ © (25.03.15 22:10) [11]
    оть тут:

                                          keybd_event(ord('V'),0,keyeventf_keyup,0);
                                          keybd_event(vk_lcontrol,0,keyeventf_keyup,0);
  • Сергей (25.03.15 22:26) [12]
    Да не работает!!!! Вот полный листинг процедуры:

    // переключаюсь в другое окно    
    xx:=1093;
         yy:=974;
         SetCursorPos(xx,yy);
         Mouse_Event(MOUSEEVENTF_LEFTDOWN,0,0,0,0);
         Mouse_Event(MOUSEEVENTF_LEFTUP,0,0,0,0);
         sleep(55);

    // нажатие ctrl+A
         keybd_event(vk_control,0,KEYEVENTF_EXTENDEDKEY,0);
         keybd_event(ord('A'),0,KEYEVENTF_EXTENDEDKEY,0);
    // отпускаем
         keybd_event(ord('A'),0,keyeventf_keyup,0);
         keybd_event(vk_control,0,keyeventf_keyup,0);

    // в буфер обмена текст

         Clipboard.Astext:='****';

    //   нажатие ctrl+V
         keybd_event(vk_lcontrol,0,KEYEVENTF_EXTENDEDKEY,0);
         keybd_event(ord('V'),0,KEYEVENTF_EXTENDEDKEY,0);
    // отпускаем
         keybd_event(ord('V'),0,keyeventf_keyup,0);
       keybd_event(vk_lcontrol,0,keyeventf_keyup,0);

    Результат: текст вставился (это отлично), но Ctrl удерживается... приходится перезагружаться
  • Rouse_ © (25.03.15 22:33) [13]
    Думай, у тебя вся информация с подсказками есть
  • icWasya © (27.03.15 16:46) [14]
    Читаем пост номер[8] - до просветления
  • Dimka Maslov © (08.05.15 15:39) [15]
    Чем не устраивает посылка сообщений WM_GETTEXTLENGHT, EM_SETSEL, WM_COPY и WM_PASTE?
 
Конференция "WinAPI" » Необходимо имитировать нажатие Ctrl+A [D7]
Есть новые Нет новых   [118387   +27][b:0][p:0.001]