Форум: "Начинающим";
Текущий архив: 2018.11.04;
Скачать: [xml.tar.bz2];
Внизпередача нажатия клавиши стороннему приложению Найти похожие ветки
← →
lewka © (2016-09-15 13:46) [0]Здравствуйте, мастера программирования.
Передаю нажатие клавиш браузеру вот такh := findwindow( nil,"Google - Google Chrome",);
SetForegroundWindow(h);
keybd_event(VK_CONTROL, 0, 0, 0);
keybd_event(72, 0, 0, 0);
keybd_event(72, 0, KEYEVENTF_KEYUP, 0);
keybd_event(VK_CONTROL, 0, KEYEVENTF_KEYUP, 0);
Но это работает только если это окно активно.
Подскажите как передать не активному окну?
← →
Leonid Troyanovsky © (2016-09-15 16:54) [1]
> lewka © (15.09.16 13:46)
> работает только если это окно активно.Подскажите как передать
> не активному окну?
В самом общем случае, без к.л. кооперации приложений, сделать это
не очень просто, а возможно, что полностью корректно и не удастся.
Бо, все "нажатия" клавиш будут направляться foreground окну.
Пока вижу 2 варианта реализации клавиатурных макросов:
1. Посылатель не забирает фокус у целевого приложения.
Это возможно, если посылатель генерирует последовательность
нажатий _не получая_ фокус. Это можно сделать, например,
по нажатию на горячую клавишу, зарегистрированную в системе,
по таймеру и т.д.
2. Посылатель определяет foreground поток, просит его активировать
нужное окно, генерирует нажатия, дожидается окончания обработки,
просит foreground поток вернуть фокус на начальное окно.
В принципе, такое возможно, но граблей тут видится изрядно.
--
Regards, LVT.
← →
Leonid Troyanovsky © (2016-09-15 17:29) [2]
> Leonid Troyanovsky © (15.09.16 16:54) [1]
Самый простой вариант руками сделать хром foreground,
затем запустить или вывести свое приложение foreground
и там сделать что-то вроде:
procedure TForm1.Button1Click(Sender: TObject);
begin
Visible := False;
h := findwindow( nil,"Google - Google Chrome",);
if h = GetForegroundWindow then
begin
keybd_event(VK_CONTROL, 0, 0, 0);
keybd_event(72, 0, 0, 0);
keybd_event(72, 0, KEYEVENTF_KEYUP, 0);
keybd_event(VK_CONTROL, 0, KEYEVENTF_KEYUP, 0);
end;
Visible := True;
end;
--
Regards, LVT.
← →
Dimka Maslov © (2016-09-15 21:30) [3]Напрямую слать WM_KEYDOWN и WM_KEYUP?
← →
Leonid Troyanovsky © (2016-09-16 09:14) [4]
> Dimka Maslov © (15.09.16 21:30) [3]
> Напрямую слать WM_KEYDOWN и WM_KEYUP?
Посылка комбинаций клавиш путем различных сочетаний
PostMessage & SendMessage, даже с подключением AttachThreadInput,
не всегда сработают даже в Блокноте.
--
Regards, LVT.
← →
Dimka Maslov © (2016-09-17 12:08) [5]
> не всегда сработают даже в Блокноте.
Ровно как и предложенный автором способ
Страницы: 1 вся ветка
Форум: "Начинающим";
Текущий архив: 2018.11.04;
Скачать: [xml.tar.bz2];
Память: 0.46 MB
Время: 0.001 c