![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
Отправка символа другому окну
sashap © (2007-08-31 18:38:00)Добрый день!
У меня не получается отправить символ другому окну.
Я пробовал:
var
h:HWND;
...
h:=FindWindow(nil,'Program name');
PostMessage(h, WM_KEYDOWN, Ord('A'), 0);
PostMessage(h, WM_KEYUP, Ord('A'), 0);
Но это не работает. Как можно иначе передать символ?
sashap (2007-09-01 13:43:00) [1]ОК. Вот:
var
h:HWND;
begin
...
h:= findwindowex( findwindow(nil,'Untitled - Notepad'), 0, 'Edit', nil);
if h<>0 then PostMessage(h, WM_CHAR, Ord('A'), 0)
else showmessage('Handle not found!');
Anatoly Podgoretsky (2007-09-01 09:45:00) [2]> sashap (01.09.2007 01:48:11) [11]
Только кто будет проверять результат работы функции findwindowex?
sashap (2007-09-01 01:48:00) [3]Спасибо, palva, Reindeer Moss Eater!
Всё работает:
var
h:HWND;
begin
...
h:= findwindowex( findwindow(nil,'Untitled - Notepad'), 0, 'Edit', nil);
PostMessage(h, WM_CHAR, Ord('A'), 0);
З.Ы.: WinSight я у себя не нашел, зато нашел Microsoft Spy++. Думаю, это тоже самое.
Reindeer Moss Eater (2007-08-31 23:08:00) [4]http://img231.imageshack.us/img231/8250/winsightgw3.jpg
Reindeer Moss Eater (2007-08-31 23:02:00) [5]Да все ему нравится.
Просто окно не то!
palva (2007-08-31 23:00:00) [6]Наверно блокноту не нравится, что не задан последний параметр. Там должен быть скан-код клавиши и число повторений. Если вместо блокнота взять другое приложение, то передача клавиши работает.
h:=FindWindow(nil,'C:\WINDOWS\system32\cmd.exe');
PostMessage(h, WM_CHAR, Ord('A'), 0);
Reindeer Moss Eater (2007-08-31 22:59:00) [7]Ты свое сообщение посылаешь не тому окну вот ничего и не происходит.
Запусти WinSight и увидишь, что "Безымянный - Блокнот" - это окно верхнего уровня и у него два чайлда, одно из которых класса Edit.
Вот этому дочернему окну и надо засылать WM_CHAR
palva (2007-08-31 21:54:00) [8]> palva, можно узнать, что за дополнительный код?
Дополнительный код это обработчик клавиши в главном окне Delphi-приложения. А почему не отвечает блокнот, я не знаю.
sashap (2007-08-31 21:06:00) [9]palva, можно узнать, что за дополнительный код?
Bora.ru: нужно, чтобы в окне хэндла "h", на том месте, где находится блинк курсора появился отосланный символ. Т.е. если открыт Notepad, то после выполнения кода
var
h:HWND;
...
h:=FindWindow(nil,'Untitled - Notepad');
PostMessage(h, WM_CHAR, Ord('A'), 0);
в нем должен появиться символ 'A'.
Bora.ru (2007-08-31 20:50:00) [10]
> sashap (31.08.07 20:08) [2]
... Никакого действия.
а какое должно быть действие?
palva (2007-08-31 20:32:00) [11]> Но это тоже не работает... Никакого действия.
А у меня работает
procedure TForm3.Button1Click(Sender: TObject);
begin
PostMessage(Edit1.Handle, WM_CHAR, Ord('A'), 0);
end;
Так что проблема в том, что не находится окно (нужно проверять h<>0) либо окно не способно ответить на клавиатурный ввод. Например, передача сообщения главному окну без дополнительного кода работать не будет.
procedure TForm3.Button1Click(Sender: TObject);
begin
PostMessage(Handle, WM_CHAR, Ord('A'), 0);
end;
sashap (2007-08-31 20:08:00) [12]Спасибо за ответ, Reindeer Moss Eater!
Если я правильно Вас понял, то код будет выглядеть так:
var
h:HWND;
...
h:=FindWindow(nil,'Program name');
PostMessage(h, WM_CHAR, Ord('A'), 0);
Но это тоже не работает... Никакого действия.
Reindeer Moss Eater (2007-08-31 18:39:00) [13]WM_CHAR