Наши проекты:
Журнал · Discuz!ML · Wiki · DRKB · Помощь проекту |
||
ПРАВИЛА | FAQ | Помощь | Поиск | Участники | Календарь | Избранное | RSS |
[3.17.79.60] |
|
Сообщ.
#1
,
|
|
|
Скажите, можно ли захватывать мышь из окна другого процесса? Дело не в хуке, просто при зажатии кнопки и движении сообщение отжатия не проходит. Так вот, нужен ентот SetCapture, чтобы перехватывать. Как это сделать и можно ли вообще?
|
Сообщ.
#2
,
|
|
|
ты про это?
Цитата Windows.pas {$EXTERNALSYM SetCapture} function SetCapture(hWnd: HWND): HWND; stdcall; {$EXTERNALSYM ReleaseCapture} function ReleaseCapture: BOOL; stdcall; пример их использования можна найти в Controls.pas (TControl, TMouse) |
Сообщ.
#3
,
|
|
|
Спасибо, конечно, но я уже опять сам разобрался. Путем усиленного мозгового штурма Расскажу для тех, кто столкнулся с той же проблемой - как определить ОТЖАТИЕ мыши, если зажать кнопку на окне и тянуть курсор на окно другой программы, и там отжать кнопку. Сообщение через хук не проходит. Во-первых, как получить то окно, на котором произошло нажатие. В доках сказано, что процедура хука получает в lParam указатель на структуру MOUSEHOOKSTRUCT. Данные оттуда извлекаются так:
var D: ^MOUSEHOOKSTRUCT; ......... D:=Pointer(lParam); D^.hwnd даст нам это окно (на котором был клик). Так же работают и с остальными процедурами, выдающими указатель в виде числа (LongInt) на структуру. Далее, чтобы заставить винду выдать нам WM_MBUTTONUP или WM_NCRBUTTONUP и т.д., ставим в момент прихода сообщения WM_MBUTTONDOWN (или другого о нажатии кнопки) захват на это окно: SetCapture(D^.hwnd); Теперь при перетаскивании и отпускании мы получим WM_(NC)xBUTTONUP. Идея была найдена в системной DLL Sensiva Symbol Commander простым просмотром в текстовом редакторе А далее уже в доках накопал. |