Я хотел сделать обработчик на боковые клавиши мыши, поставил хук, а теперь появилась идея добавить глобальный перехват в компонент MouseEvent (на все клавиши мыши). Протестируйте пока такой вариант:
code_36932.txtРаботает ли на Win7/8 и т.д. Может, есть идеи оптимизации кода. И вообще - нужны ли кому такие функции. Если всё нормально - буду доделывать компонент.
ps. Кстати, несмотря на то что в оригинале код вставлялся в dll, у меня заработало и в IC.
------------ Дoбавленo в 12.11:
Netspirit писал(а):
Можно подправить код, чтобы в список добавлять не THiasmClass, а собственно THiEvent из свойства ev. Затем вынести приведенный код в отдельный модуль, который и подключать в IC.
Что-то не получается:
Add(InlineCode,12360657,280,133)
{
WorkPoints=#7:sethook|10:removehook|
EventPoints=#2:ev|
Code=#15:unit HiAsmUnit;|0:|9:interface|0:|38:uses kol,Share,Debug,windows,messages;|0:|4:type|27: tagMSLLHOOKSTRUCT = record|12: pt:TPoint;|18: mouseData:dword;|14: flags:dword;|13: time:dword;|23: dwExtraInfo:^Cardinal|5: end;|0:|4:type|28: THiAsmClass = class(TDebug)|10: private|0:|9: public|17: ev:THI_Event;|0:|23: constructor Create;|48: procedure sethook(var dt:TData; index:word);|51: procedure removehook(var dt:TData; index:word);|0:|5: end;|0:|20:var H,wh,cw:THandle;|20: hacev:THI_Event;|0:|14:implementation|0:|31:constructor THiAsmClass.Create;|5:begin|18: inherited Create;|18: hacev := self.ev;|4:end;|0:|49:function hook(code,w,l:integer):Lresult; stdcall;|15:var str:string;|25: ll:tagMSLLHOOKSTRUCT;|5:begin|38: ll := tagMSLLHOOKSTRUCT(pointer(l)^);|64: str := Int2Str(LoWord(w))+' '+Int2Str(HiWord(ll.mouseData));|53: //str:=Int2Str(LoWord(w))+' '+Int2Str(HiWord(w));|43: {if w <> 512 then} _hi_OnEvent(hacev,str);|38: result := CallNextHookEx(H,code,w,l);|4:End;|0:|30:procedure THiAsmClass.sethook;|5:begin|48: H := SetWindowsHookEx(14, @hook, hInstance, 0);|70: if H = 0 then messagebox(0,'AAAAAA!!! ERROR!!!','ERROR',mb_iconhand);|4:end;|0:|33:procedure THiAsmClass.removehook;|5:begin|24: UnhookWindowsHookEx(H);|4:end;|0:|4:end.|
link(ev,7136822:doAdd,[])
}
Add(Button,6327570,210,154)
{
Left=15
Top=35
Width=85
Caption="removehook"
link(onClick,12360657:removehook,[(261,160)(261,146)])
}
Add(Button,14432370,210,105)
{
Left=15
Top=10
Width=85
Caption="sethook"
link(onClick,12360657:sethook,[(261,111)(261,139)])
}
Add(Memo,7136822,343,133)
{
Left=110
Top=5
Width=125
Height=260
AddType=1
ScrollBars=2
}