Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Delphi программирование > Общие вопросы Delphi
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 13.09.2023, 00:15   #1
Kronos913
Форумчанин
 
Регистрация: 10.02.2021
Сообщений: 643
По умолчанию Имитировать нажатие горячей клавиши

Как сделать так, чтобы программа имитировала нажатие горячей клавиши?

То есть, моя Delphi программа запущена, но свёрнута, активна другая программа
Я нажимаю горячую клавишу Ctrl+1, моя программа его перехватывает, активируется процедура реакции на горячую клавишу, программа делает какие-то действия

И дальше нужно сделать так, чтобы моя программа сымитировала нажатие Ctrl+V в активной программе
Kronos913 вне форума Ответить с цитированием
Старый 13.09.2023, 00:40   #2
Kronos913
Форумчанин
 
Регистрация: 10.02.2021
Сообщений: 643
По умолчанию

Что вообще я хочу сделать:

Если я в какой-то программе (например, в браузере) начал набирать не той раскладкой - чтобы просто выделить неправильно введенный кусок теста, нажать горячую клавишу

А дальше моя программа (которая включена но свёрнута) имитирует нажатие ctrl+C (копирует выделенное в браузере), загружает буфер обмена себе, проводит изменение текста, возвращает его в буфер обмена, после чего имитирует нажатие ctrl+V и вставляет его в нужное место в браузере

И проблема только с имитацией ctrl+C и ctrl+V

Сейчас приходится действовать в три нажатия:ctrl+C, горячая клавиша, ctrl+V
А хочу сократить только до нажатия горячей клавиши
Kronos913 вне форума Ответить с цитированием
Старый 13.09.2023, 10:32   #3
NetSpace
Участник клуба
 
Аватар для NetSpace
 
Регистрация: 03.06.2009
Сообщений: 1,826
По умолчанию

читай. там есть два очень хороших примера. один в начале, другой в конце.
https://www.programmersforum.ru/show...E0%E2%E8%F8%F3
Программирование - это единственный способ заставить компьютер делать то, что тебе хочется, а не то, что приходится.
NetSpace вне форума Ответить с цитированием
Старый 18.09.2023, 12:31   #4
Vapaamies
Ваш К. О.
Участник клуба
 
Аватар для Vapaamies
 
Регистрация: 26.12.2012
Сообщений: 1,799
По умолчанию

Процедура keybd_event давно устарела, Microsoft рекомендует использовать SendInput. Вот перегруженная процедура из моей программы, вставляющей символы или строки в любое поле ввода:
Код:
procedure SimulateKeystroke(Key: WideChar); overload;
var
  Input: array[0..1] of TInput;
begin
  FillChar(Input, SizeOf(Input), 0);
  with Input[0] do
  begin
    Itype := INPUT_KEYBOARD;
    with ki do
    begin
      wScan := Word(Key);
      dwFlags := KEYEVENTF_UNICODE
    end;
  end;
  with Input[1] do
  begin
    Itype := INPUT_KEYBOARD;
    with ki do
    begin
      wScan := Word(Key);
      dwFlags := KEYEVENTF_UNICODE or KEYEVENTF_KEYUP;
    end;
  end;
  SendInput(Length(Input), Input[0], SizeOf(TInput));
end;

procedure SimulateKeystroke(Key: Word); overload;
var
  Input: array[0..1] of TInput;
begin
  FillChar(Input, SizeOf(Input), 0);
  with Input[0] do
  begin
    Itype := INPUT_KEYBOARD;
    ki.wVk := Key;
  end;
  with Input[1] do
  begin
    Itype := INPUT_KEYBOARD;
    with ki do
    begin
      wVk := Key;
      dwFlags := KEYEVENTF_KEYUP;
    end;
  end;
  SendInput(Length(Input), Input[0], SizeOf(TInput));
end;
Вам, по-видимому, нужна вторая процедура. Посмотрите по SDK, какие коды или маски VK_xxxx соответствуют Ctrl+C/Ctrl+V.
Vapaamies вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Cout для НАЖАТИЯ горячей КЛАВИШИ beegl Общие вопросы Delphi 2 03.05.2018 07:27
Активировать приложение после нажатие горячей клавиши Kovalchuk.Dmytro Общие вопросы Delphi 6 13.02.2016 20:57
как имитировать нажатие клавиши TAB Ale}{ander JavaScript, Ajax 1 27.01.2014 06:41
Как выйти из цикла по нажатию горячей клавиши? suslik_ Помощь студентам 2 06.07.2011 16:20
Создание системной горячей клавиши Seqular Общие вопросы Delphi 8 17.02.2007 21:12