Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "WinAPI";
Текущий архив: 2003.09.22;
Скачать: [xml.tar.bz2];

Вниз

HOOK мыши - KeyState?   Найти похожие ветки 

 
Pi314   (2003-07-20 20:54) [0]

Hi All,
Пожалуйста подскажите, кто сталкивался... как в callback-функции (WH_MOUSE) перепослать (дублировать) конкретное сообщение с минимальными накл. раcxодами?

Mоя проблема в следующем: стандартное сообщение мыши содержит информацию о состоянии клавиш - как самой мыши, так и клавиатуры:
TWMMouse = packed record
Msg: Cardinal;
Keys: Longint;
case Integer of
0: (
XPos: Smallint;
YPos: Smallint);
(
Pos: TSmallPoint;
Result: Longint
)
Hi All,
Пожалуйста подскажите, кто сталкивался... как в callback-функции (WH_MOUSE) перепослать (дублировать) конкретное сообщение с минимальными накл. раcxодами?

Mоя проблема в следующем: стандартное сообщение мыши содержит информацию о состоянии клавиш - как самой мыши, так и клавиатуры:
TWMMouse = packed record
Msg: Cardinal;
Keys: Longint;
case Integer of
0: (
XPos: Smallint;
YPos: Smallint);
1: (
Pos: TSmallPoint;
Result: Longint);
end;


которая отсутствует в структуре
typedef struct tagMOUSEHOOKSTRUCT {
POINT pt;
HWND hwnd;
UINT wHitTestCode;
DWORD dwExtraInfo;
} MOUSEHOOKSTRUCT;


поинтер на которую я получаю в lParam. dwExtraInfo, как оказалось, содержит информацию о колесике мыши, а вовсе не о состоянии клавиш, что, на мой взгляд, было бы логичнее. Так что, видимо, нужно добираться до находящегося в очереди оригинального сообщения. Только не совсем понятно, как это сделать, т.е. как распознать именно "мое" конкретное сообщение. Или может есть лучшие идеи?


 
Pi314   (2003-07-20 23:05) [1]

Прошу прощения - забыл код...

type
THookCallStruct = packed record
Code : integer;
WParam : WPARAM;
LParam : LPARAM;
Result : LResult
end;
...
procedure THookPanel.MyHookProc(var HookCallStruct: THookCallStruct);
var
wPar2: WPARAM;
lPar2: LPARAM;
begin
with HookCallStruct do
begin
if (Code = HC_ACTION) or (Code = HC_NOREMOVE) then //"our" hook
if (wParam = WM_LBUTTONDOWN) or (wParam = WM_LBUTTONUP) then //"our" event
if IsChild(Handle, PMouseHookStruct(lParam)^.hwnd) then //event for our child
begin
//Compose Keystate for wParam
wPar2 := ???
//Pack coords into lParam
lPar2 := PMouseHookStruct(lPar)^.pt.x or
(PMouseHookStruct(lPar)^.pt.y shl 16);
//RePost message to self
PostMessage(Handle,wParam, wPar2, lPar2);
end;

//just call next hook in chain...
( ThisHook, Code, wParam, lParam)
Прошу прощения - забыл код...

type
THookCallStruct = packed record
Code : integer;
WParam : WPARAM;
LParam : LPARAM;
Result : LResult
end;
...
procedure THookPanel.MyHookProc(var HookCallStruct: THookCallStruct);
var
wPar2: WPARAM;
lPar2: LPARAM;
begin
with HookCallStruct do
begin
if (Code = HC_ACTION) or (Code = HC_NOREMOVE) then //"our" hook
if (wParam = WM_LBUTTONDOWN) or (wParam = WM_LBUTTONUP) then //"our" event
if IsChild(Handle, PMouseHookStruct(lParam)^.hwnd) then //event for our child
begin
//Compose Keystate for wParam
wPar2 := ???
//Pack coords into lParam
lPar2 := PMouseHookStruct(lPar)^.pt.x or
(PMouseHookStruct(lPar)^.pt.y shl 16);
//RePost message to self
PostMessage(Handle,wParam, wPar2, lPar2);
end;

//just call next hook in chain...
Result := CallNextHookEx (ThisHook, Code, wParam, lParam);
end;
end;


Вот с этим самым wParam у меня и загвоздка. Можно, конечно, по отдельности опросить все GetKeyState(МК_xxx) и загнать соотв. разряды в integer. Но как-то это не шибко элегантно получится... Тем более обидно, что нужное значение-то уже лежит, готовенькое, в очереди... Только как до него добраться?



Страницы: 1 вся ветка

Форум: "WinAPI";
Текущий архив: 2003.09.22;
Скачать: [xml.tar.bz2];

Наверх




Память: 0.45 MB
Время: 0.01 c
14-71924
ZeroDivide
2003-09-01 15:22
2003.09.22
Выборы в России. За кого голосовать?


1-71738
Erik
2003-09-09 14:34
2003.09.22
Увеличение размера масива неизвестного типа?


1-71708
AndyGee
2003-09-10 19:52
2003.09.22
Запуск внешнего приложения от имени другого пользователя


14-71873
bl_wizard
2003-09-02 18:54
2003.09.22
Примерная стоимость разработки БД


14-71953
k-man
2003-09-02 07:33
2003.09.22
Мышиная возня





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский