SendMessage для Firefox, на позиции курсора - PullRequest
0 голосов
/ 13 октября 2011

Код ниже иногда работает: он вставляет текст из tEdit, но только в «Блокнот», «Слово», «ICQ». Такие программы, как Firefox или Google Chrome, не работают с ним. Что мне делать?

 var
  Pos: TPoint;
  Target: HWND;
...
if not GetCursorPos(Pos) then
  RaiseLastOSError;
Target := WindowFromPoint(Pos);
if Target<>0 then
  SendMessage(Target, EM_REPLACESEL, ord(True), LPARAM(PChar(Edit1.Text)));

Вот и все! Я нашел нужный мне код

procedure SendText(ds:string);
var
TI: TInput;
KI: TKeybdInput;
i: integer;
begin
TI.Itype := INPUT_KEYBOARD;
for i := 1 to Length(ds) do
begin
KI.wVk := Ord(UpCase(ds[i]));
KI.dwFlags := 0;
TI.ki := KI;
SendInput(1, TI, SizeOf(TI));
KI.dwFlags := KEYEVENTF_KEYUP;
TI.ki := KI;
SendInput(1, TI, SizeOf(TI));
end;
end;

Но проблема в том, что я не могу скопировать русские (кириллические) символы с помощью SendInpit (Edit1.Text); Какие-либо предложения?

Ответы [ 3 ]

3 голосов
/ 15 октября 2011

Это не работает в Firefox и Chrome, потому что поля редактирования, которые вы видите в них, отображаются движками HTML в браузере, а не операционной системой. Они называются « безоконные элементы управления » и поэтому не имеют дескриптора окна, связанного с ними.

Что касается операционной системы, веб-страница - это одна большая HWND с веб-страницей, нарисованной внутри нее, и некоторые из окрашенных элементов просто выглядят и действуют как элементы управления благодаря движку HTML.

Вы не можете выбрать такие элементы управления с помощью SendMessage(). В зависимости от того, что именно вы планируете делать, может существовать другой, более прямой способ автоматизации браузера. Но использование SendMessage() определенно не лучший способ.

1 голос
/ 15 октября 2011

Вы можете сделать это с MSAA. Вот пример: http://www.transl -gunsmoker.ru / 2009/08 / blog-post.html А в WinSDK есть аналог WinSpy для MSAA, который называется AccExplorer32.

1 голос
/ 15 октября 2011

AFAIR, окна редактирования Firefox на самом деле не являются окнами редактирования Windows, а представляют собой нечто иное. Я могу ошибаться, но вы не можете рассматривать их как обычные поля ввода. Вы должны получить их окно обработать (ну, , если у них есть дескриптор окна) и отправить сообщение на него.

И я говорю о самих окнах редактирования Firefox (адресная строка и панель поиска), а не о отрисовано из HTML.

На платформе Windows Platform SDK есть утилиты, которые могут помочь вам определить правильная цель для ваших вызовов SendMessage.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...