![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
Как послать сообщение 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 надо посылать