Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Начинающим";
Текущий архив: 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.002 c
2-1473404951
валя
2016-09-09 10:09
2018.11.04
Указатели


2-1473395811
Abcdef123
2016-09-09 07:36
2018.11.04
Использование CreateProcess. Как показать нужную форму после


15-1475184602
Юрий
2016-09-30 00:30
2018.11.04
С днем рождения ! 30 сентября 2016 пятница


2-1474009068
user
2016-09-16 09:57
2018.11.04
Заполнение форму html


2-1473936376
lewka
2016-09-15 13:46
2018.11.04
передача нажатия клавиши стороннему приложению





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский