Top.Mail.Ru
Мастера DELPHI, Delphi programming community Титульная страница Поиск, карта сайта Написать письмо 
| Новости | Поиск | FAQ | Статьи | Книги | Новости VCL |
| Форумы ЧАТ | Орешник | KOL и MCK |
Форумы -» Основная («Начинающим»)/ Базы / WinAPI / Компоненты / Сети / Media / Игры / Corba и COM / KOL / FreePascal / .Net / Прочее / RSDN.ORG

« предыдущая ветвь | форум | следующая ветвь »

Как послать сообщение Desktоp у о нажатии левой клавиши мышки? [D3, D5, D6, Win2k]


bublik ©   (2002-10-01 00:38:00) 

Как послать сообщение Desktоp"у о нажатии левой клавиши мышки?
В результате хочется видеть контекстное меню.
Мой код не работает:

procedure TForm1.Button1Click(Sender: TObject);
var DesktopWnd : HWND;
begin
DesktopWnd := GetDesktopWindow;
Sleep(1000);
SendMessage (DesktopWnd, WM_RBUTTONDOWN, MK_RBUTTON, 300 + 50 shl 16 ) ;
end;


DSa   (2002-10-03 00:14:00) [1]

To SPeller

Посылая WM_RBUTTONDOWN и WM_RBUTTONUP по SendMessage в других приложениях появляетя контекстное меню, а вот на Desktop"е не вылазит. Так что придется оставить эту загадку на лучшие времена. ;]

To Nomad.kz

Ано и выдно, шо ты в армИи азы прогромировання получил: мы здесь про Desktop и SendMessage, а ты про сено и солому... ;)


Nomad.kz   (2002-10-02 11:28:00) [2]

2SPeller

Сено-солома :-Е
Хто в армИи ни служив, стрункуйсь! ;-)


SPeller   (2002-10-01 11:30:00) [3]


> И почему не работает SendMessage?

Должен работать. Я делал такую штуку что когда нажимаешь левую кнопку то воспринимается это как правая. Делается просто - подменяется WM_LBUTTONDOWN на WM_RBUTTONDOWN и соответственно WM_LBUTTONUP на WM_RBUTTONUP. Вот и всё. Проще говоря после строки
SendMessage (DesktopWnd, WM_RBUTTONDOWN, MK_RBUTTON, 300 + 50 shl 16 ) ;
тебе надо сделать ещё
SendMessage (DesktopWnd, WM_RBUTTONUP, MK_RBUTTON, 300 + 50 shl 16 ) ;

Если и так не сработает, то дело в параметрах от MK_RBUTTON и далее.


> Не претендуя на (01.10.02 03:42)
> А какое отношение имеют "WM_RBUTTONDOWN", "MK_RBUTTON",
> "RBUTTONDOWN", "RBUTTONUP" к вопросу о том "Как послать
> сообщение Desktоp"у о нажатии левой клавиши мышки?" :)))

Ты сам хоть понял чё ляпнул?


DSa   (2002-10-01 09:01:00) [4]

To: Steven

WM_CONTEXTMENU тоже не работает. ;]

Может у кого есть работающий пример?
А то я уже зациклился на одном ;]


Steven   (2002-10-01 07:07:00) [5]

WM_CONTEXTMENU попробуй. А вообще обычно контекстное меню обычно по правой кнопке вызывается.


DSa   (2002-10-01 04:59:00) [6]

Я тот самыи bublik:))
Мне нельзя ночью работь ;)


DSa   (2002-10-01 04:56:00) [7]

To: Не претендуя на
Когда я работаю ночью, то не такие вещи могу спутать... ;]

To: Speller
C SendMessage не получилось?

Получилось вот так:

....
vat Pt : TPoint;
....
Pt.x := x;
Pt.y := y;
Pt.x := Round(Pt.x * (65535 / Screen.Width));
Pt.y := Round(Pt.y * (65535 / Screen.Height));
Application.ProcessMessages;
// SetCursorPos(x, y); или
mouse_event(MOUSEEVENTF_ABSOLUTE or MOUSEEVENTF_MOVE, Pt.x, Pt.y, 0, 0);
mouse_event(MOUSEEVENTF_ABSOLUTE or MOUSEEVENTF_RIGHTDOWN, Pt.x, Pt.y, 0, 0);
mouse_event(MOUSEEVENTF_ABSOLUTE or MOUSEEVENTF_RIGHTUP, Pt.x, Pt.y, 0, 0);
....

Но работает только переместив курсор. Иначе не работает. А нужно не изменять позицию курсора.
Может есть какие идеи?

И почему не работает SendMessage?


Не претендуя на   (2002-10-01 03:42:00) [8]

А какое отношение имеют "WM_RBUTTONDOWN", "MK_RBUTTON", "RBUTTONDOWN", "RBUTTONUP" к вопросу о том "Как послать сообщение Desktоp"у о нажатии левой клавиши мышки?" :)))


SPeller   (2002-10-01 03:16:00) [9]

RBUTTONDOWN, а затем RBUTTONUP надо посылать


Наверх

Титульная страница Поиск, карта сайта Написать письмо