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

Вниз

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

 
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;
Скачать: CL | DM;

Наверх




Память: 0.52 MB
Время: 0.027 c
1-62650
Vlad
2003-01-08 16:55
2003.01.20
процедура Insert


1-62604
Senator
2003-01-09 12:10
2003.01.20
мерцание


14-62721
anpsoft
2002-12-30 01:25
2003.01.20
Development Environment for .NET on Delphi


1-62534
John
2003-01-10 21:31
2003.01.20
TImage и OpenDialog


1-62596
Anatoly P
2003-01-08 10:29
2003.01.20
Многоязычное приложение