Форум: "Система";
Текущий архив: 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