Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2007.09.30;
Скачать: CL | DM;

Вниз

Отправка символа другому окну   Найти похожие ветки 

 
sashap   (2007-08-31 18:38) [0]

Добрый день!
У меня не получается отправить символ другому окну.
Я пробовал:
var
 h:HWND;
...
h:=FindWindow(nil,"Program name");
PostMessage(h, WM_KEYDOWN, Ord("A"), 0);
PostMessage(h, WM_KEYUP, Ord("A"), 0);


Но это не работает. Как можно иначе передать символ?


 
Reindeer Moss Eater ©   (2007-08-31 18:39) [1]

WM_CHAR


 
sashap   (2007-08-31 20:08) [2]

Спасибо за ответ, Reindeer Moss Eater!
Если я правильно Вас понял, то код будет выглядеть так:

var
h:HWND;
...
h:=FindWindow(nil,"Program name");
PostMessage(h, WM_CHAR, Ord("A"), 0);


Но это тоже не работает... Никакого действия.


 
palva ©   (2007-08-31 20:32) [3]

> Но это тоже не работает... Никакого действия.

А у меня работает

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;


 
Bora.ru   (2007-08-31 20:50) [4]


> sashap   (31.08.07 20:08) [2]
... Никакого действия.

а какое должно быть действие?


 
sashap   (2007-08-31 21:06) [5]

palva, можно узнать, что за дополнительный код?
Bora.ru: нужно, чтобы в окне хэндла "h", на том месте, где находится блинк курсора появился отосланный символ. Т.е. если открыт Notepad, то после выполнения кода

var
h:HWND;
...
h:=FindWindow(nil,"Untitled - Notepad");
PostMessage(h, WM_CHAR, Ord("A"), 0);


в нем должен появиться символ "A".


 
palva ©   (2007-08-31 21:54) [6]

> palva, можно узнать, что за дополнительный код?
Дополнительный код это обработчик клавиши в главном окне Delphi-приложения. А почему не отвечает блокнот, я не знаю.


 
Reindeer Moss Eater ©   (2007-08-31 22:59) [7]

Ты свое сообщение посылаешь не тому окну вот ничего и не происходит.
Запусти WinSight и увидишь, что "Безымянный - Блокнот" - это окно верхнего уровня и у него два чайлда, одно из которых класса Edit.
Вот этому дочернему окну и надо засылать WM_CHAR


 
palva ©   (2007-08-31 23:00) [8]

Наверно блокноту не нравится, что не задан последний параметр. Там должен быть скан-код клавиши и число повторений. Если вместо блокнота взять другое приложение, то передача клавиши работает.

 h:=FindWindow(nil,"C:\WINDOWS\system32\cmd.exe");
 PostMessage(h, WM_CHAR, Ord("A"), 0);


 
Reindeer Moss Eater ©   (2007-08-31 23:02) [9]

Да все ему нравится.
Просто окно не то!


 
Reindeer Moss Eater ©   (2007-08-31 23:08) [10]

http://img231.imageshack.us/img231/8250/winsightgw3.jpg


 
sashap   (2007-09-01 01:48) [11]

Спасибо, 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++. Думаю, это тоже самое.


 
Anatoly Podgoretsky ©   (2007-09-01 09:45) [12]

> sashap  (01.09.2007 01:48:11)  [11]

Только кто будет проверять результат работы функции findwindowex?


 
sashap   (2007-09-01 13:43) [13]

ОК. Вот:

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!");



Страницы: 1 вся ветка

Текущий архив: 2007.09.30;
Скачать: CL | DM;

Наверх




Память: 0.49 MB
Время: 0.024 c
2-1188644231
17Landgraf
2007-09-01 14:57
2007.09.30
Вопрос по поводу свойства Charset класса TFont


8-1166775174
Cawa
2006-12-22 11:12
2007.09.30
Воспроизведение avi mpg mp3 из закриптованого файла


6-1170223586
slartus
2007-01-31 09:06
2007.09.30
Список FTP-серверов в локальной сети


6-1170156869
maxistent
2007-01-30 14:34
2007.09.30
закачка/докачка по ftp/http


3-1180336962
Junior)
2007-05-28 11:22
2007.09.30
TDBF и руские буквы