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

Вниз

как отправить в чужую форму сообщение о нажатой клавише мыши?   Найти похожие ветки 

 
IronWit   (2002-11-04 16:30) [0]

сабж.


 
Arcus   (2002-11-04 17:17) [1]

На Delphi - см. MouseDown
На API - WM_LBUTTONDOWN, например


 
ironwit   (2002-11-04 17:27) [2]

пример можно? :-)


 
Arcus   (2002-11-04 18:39) [3]

SendMessage(WndHandle, WM_LBUTTONDOWN, MK_LBUTTON, MAKELONG(X, Y));C MouseDown я промахнулся :( - это для собственных форм только


 
Shrek   (2002-11-04 23:31) [4]

надо модуль sendkey


 
ironwit   (2002-11-05 08:35) [5]

а какие указывать координаты?(х,y)


 
Ich Hasse   (2002-11-05 10:33) [6]

в оконных(в координатах того окна которомы ты посылаешь)


 
IronWit   (2002-11-05 11:18) [7]

Ок. Уточним проблему.
Предположим, что у нас запущено окно ICQ. Внизу(возле часиков) есть иконка. Вот этой иконке и нужно проэмулировать нажатие правой клавиши мышки. Как это сделать?


 
pasha676   (2002-11-05 11:24) [8]

Помоему вполне подойдет sendmessage. Только надо уточнить хэндл программы, координаты кнопки и как это передаеться в параметрах.
Во всяком случае я посылал как-то месагу на закрытие программы, почему бы не послать месагу на нажатие мыши?


 
Arcus   (2002-11-05 11:33) [9]

>...Внизу(возле часиков) есть иконка...

Т.е. в трее? Поищи по сайту - было много вопросов/ответов и статей на эту тему


 
ironwit   (2002-11-05 11:45) [10]

как получить хендл иконки ICQ, ибо сообщение то программе нужно посылать от имени иконки? :-)
как получить координаты иконки из трея? В общем куча вопросов, полезу в инет искать все это. :-((


 
pasha676   (2002-11-05 13:10) [11]

Есть где-то функция по нахождению хэндла не то по имени программы, не то по свойству формы наподобие form.caption в дельфи (как бы не FindWindow). Кстати боюсь, что кликать в определенном месте (на кнопке) программы - это одно, а кликать на иконку в трейе - это немного другое, но хэндл вроде дается не на иконку, а на процесс, имхо. Т.е. хэндл в трейе должен быть наверное таким же как хэндл проги, а координаты при этом пофиг - на трейе что в левый угол иконки, что в правый - один фиг.
Я бы для начала попробывал бы так в твоем частном случае
1. Делаю тренировочную прогу с трейем и на обработчик на правую клавишу мышу ставим например - вылезает надпись с хэдлом этой проги.
2. Разобраться с функцией нахождения хэндла. Для этого пишем основную прогу и смотрим результаты по тренеровочной.
3. Ну а теперь пробуем кидай мессаги. На тренировочной при этом можно смотреть приходит ли что-нибудь.
Когда это уяснишь - все это автоматом получиться. И, плиз, напиши результаты - вдруг пригодиться.


 
ironwit   (2002-11-05 14:16) [12]

как получить хендл своей программы? Дикий вопрос - но что то не допонял.

Это к решению предложенному pasha676


 
IronWit   (2002-11-05 15:15) [13]

хендл уже нашел :-)


 
ironwit   (2002-11-05 15:19) [14]

ок. получилось поиметь список всех хендлов. как теперь известному хендлу ICQ отправить сообщение о нажатой клавише на мышке?


 
Song   (2002-11-05 15:23) [15]

SendMessage()+WM_LBUTTONDOWN/UP или BM_CLICK


 
ironwit   (2002-11-05 15:32) [16]

делаю так

postmessage(handle,WM_RBUTTONDOWN,0,0)

все равно фигня выходит. :-((


 
ironwit   (2002-11-05 15:35) [17]

точнее, сообщение уходит, но никакой реакции на него не происходит. :-((



 
ironwit   (2002-11-05 15:40) [18]

все разобрался. все работает.
Осталась одна проблема - получить координаты требуемой иконки. Как это сделать, у кого есть предложения?


 
Song   (2002-11-05 15:41) [19]

GetWindowRect()


 
pasha676   (2002-11-05 15:56) [20]

2IronWit
Нельзя ли "озвучит" куски кода. Интересно, а самому некогда. Заставили заниматься сегодня документацией :(.


 
ironwit   (2002-11-05 16:13) [21]

можно :-)

Tray := FindWindow(nil, NIL);
While tray <> 0 do
Begin
Tray := getWindow(tray, GW_HWNDNEXT);
inc(i);
getwindowtext(tray,modname,count);
if length(trim(modname))>0 then
with listview1.items.add, subitems do
begin
caption:=modname;
add(inttostr(tray));
add("$"+inttohex(tray,8));
end;

End;

получили список всех окон.

procedure TForm1.ListView1Click(Sender: TObject);
var
rect:trect;
begin
GetWindowRect(strtoint(listview1.selected.subitems[1]),Rect);
postmessage(strtoint(listview1.selected.subitems[1]),WM_RBUTTONDOWN,rect.left+2,rect.top+2);
postmessage(strtoint(listview1.selected.subitems[1]),WM_RBUTTONUP,rect.left+2,rect.top+2);
end;

по клику получили координаты окна и отправили сообщение на окно
Все. :-)


 
Song   (2002-11-05 16:31) [22]

2ironwit © (05.11.02 16:13)
Тоже самое можно быстрее и компактней сделать через EnumChildWindows()


 
ironwit   (2002-11-05 16:34) [23]

как?


 
Song   (2002-11-05 17:28) [24]

Хэлп Вам в руки.



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

Форум: "Система";
Текущий архив: 2003.01.20;
Скачать: [xml.tar.bz2];

Наверх




Память: 0.49 MB
Время: 0.01 c
7-62876
PavelOKES
2002-11-10 07:33
2003.01.20
Com в файл


1-62461
Netizen
2003-01-09 22:37
2003.01.20
Кто нибудь знает как зделать бегущую строку


14-62817
Anatoly Podgoretsky
2003-01-02 07:57
2003.01.20
Именинники 2 января


14-62836
Rouse_
2002-12-27 21:42
2003.01.20
Разница AGP


3-62411
Anatoliy
2002-12-25 16:00
2003.01.20
Уважаемые мастера. Вопрос о DBGrid.





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