Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Начинающим";
Текущий архив: 2007.09.30;
Скачать: [xml.tar.bz2];

Вниз

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

 
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;
Скачать: [xml.tar.bz2];

Наверх





Память: 0.47 MB
Время: 0.052 c
15-1188920657
ArtemESC
2007-09-04 19:44
2007.09.30
Больная идея...


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


9-1161125968
rts111
2006-10-18 02:59
2007.09.30
Шейдеры где компилируются, в видеокарте или в dll?


3-1180006046
Dmitry_177
2007-05-24 15:27
2007.09.30
Как можно узнать запароленная ли таблица?


3-1179472856
Павел Калугин
2007-05-18 11:20
2007.09.30
Можно ли обойтись без курсора?





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
Английский Французский Немецкий Итальянский Португальский Русский Испанский