Главная страница
    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.045 c
2-1188729507
MAXHo
2007-09-02 14:38
2007.09.30
Сохранение страниц в TWebBrowser


15-1188542569
Ricks
2007-08-31 10:42
2007.09.30
Какой Delphi лучше установить


3-1179972979
Dilmo
2007-05-24 06:16
2007.09.30
Тормозит соединение с базой данных


2-1188935109
max_
2007-09-04 23:45
2007.09.30
мышь


15-1188885671
Админ
2007-09-04 10:01
2007.09.30
Ищу софт для FireBird





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