Я пытаюсь решить эту проблему уже несколько недель. Я пытаюсь создать приложение в Delphi, которое работает в фоновом режиме, ловит любую горячую клавишу и выполняет Ctrl + c. Поэтому я ловил горячую клавишу, например, ALT + стрелка вправо, затем имитировал Ctrl + c и бросал команду в текущее окно.
Я заметил, что при попытке отправить команды Firefox как показано ниже:
SendMessage(FireFoxHandle, WM_COPY, 0, 0);
sleep(250);
CopiedText := ClipBoard.AsText;
Копирование прошло успешно, и я получил ожидаемый текст. Но как только я использовал ту же строку кодов для других windows, таких как chrome (chrome_widget_1) или блокнота, я ничего не могу получить. Итак, я попытался получить дочернее окно chrome и блокнота и попытаться отправить команду дочернему окну.
Получил "Chrome Legacy Window" в качестве дочернего элемента Окно "chrome_widget_1", но когда я пытаюсь выделить текст на вкладке, имитируйте Ctrl + c, все еще не работающий.
Найден пример здесь в stackoverflow для отправки wm_copy в Дочернее окно блокнота, которое является редактированием, как показано ниже:
ParentWindw := FindWindow('Notepad',nil);
if ParentWindow <> 0 then
begin
ChildWindow := FindWindowEx(ParentWindow, 0, 'Edit', nil);
SendMessage(ChildWindow, WM_COPY, 0, 0);
sleep(250);
CopiedText := ClipBoard.AsText;
end;
Код работает, но есть ли какой-нибудь динамический c способ определить дочернее окно, которое мне нужно использовать для команда wm_copy? Я спрашиваю не только о окне блокнота, но и о всех возможных окнах, которые можно использовать.
Или, в любом случае, я могу скопировать выделенный текст в любое окно программно в Delphi, в частности в xe2?
Я уже исследовал уже как sendinput, keyevents и попробовал их, но не повезло. У меня нет выбора, как заставить это работать.
Спасибо за любую помощь заранее.