Вверх ↑
Этот топик читают: Гость
Ответов: 8
Рейтинг: 0
#1: 2019-11-20 18:59:39 ЛС | профиль | цитата
Ну, вообщем, делаю кликер.Записываю действия мыши и клавиатуры в Яндекс браузере,но вот не задача- если нажать клавишу, а далее кликнуть в окне браузера записывается двойной символ нажатой перед этим клавиши, а если проделать клик в не окна браузера, то всё нормально, что нажал, то и получил.Два дня упираюсь.Бросить HIASM или что подскажете.
Понадобиться компонент gmousehook.

Make(delphi)
ver(4.05 build 186)
Add(MainForm,2953706,21,105)
{
Width=153
Height=116
}
Add(Stack,2228421,196,28)
{
Point(doClear)
Point(onEmpty)
Point(Peek)
link(onPop,3153782:doStrCat,[(256,41)(256,153)])
link(onEmpty,11452818:doLength,[(247,48)(247,230)])
}
Add(KeyHook,14681200,77,28)
{
link(onKeyDown,10619822:doConvert,[])
}
Add(Convertor,10619822,126,28)
{
Mode=4
Digits=4
SymbolFill="0"
link(onResult,2228421:doPush,[])
}
Add(Hub,2717380,133,126)
{
InCount=2
OutCount=1
link(onEvent1,2228421:doPop,[(171,132)(171,41)])
}
Add(Memory,6372118,434,161)
{
Default=String()
Point(Data)
}
Add(StrCat,3153782,266,147)
{
Point(doClear)
link(onStrCat,6558549:doEvent1,[])
link(Str1,2228421:Value,[(272,134)(202,134)])
link(Str2,15722523:Var3,[(279,135)(487,135)(487,212)])
}
Add(Label,5190535,385,266)
{
Left=5
Top=30
Width=115
link(Text,15722523:Var2,[(391,241)(447,241)])
}
Add(Length,11452818,266,224)
{
link(onLength,8736762:doCompare,[(310,230)(310,262)(254,262)(254,293)])
link(Str,3153782:Result,[])
}
Add(If_else,8736762,266,287)
{
Type=2
Op2=String(0)
link(onTrue,7131398:doEvent1,[])
link(Op1,11452818:Result,[])
}
Add(Hub,7131398,329,287)
{
OutCount=3
link(onEvent1,3153782:doClear,[(355,293)(355,208)(254,208)(254,160)])
link(onEvent2,5190535:doText,[(370,300)(370,272)])
link(onEvent3,6372118:doClear,[(424,307)(424,174)])
}
Add(Hub,6558549,322,147)
{
link(onEvent1,6372118:doValue,[(368,153)(368,167)])
link(onEvent2,2717380:doEvent2,[(348,160)(348,193)(121,193)(121,139)])
}
Add(GMouseHook,4094810,63,119)
{
Point(onMouseDown)
link(onMouseDown,2717380:doEvent1,[])
}
Add(GetDataEx,15722523,441,207)
{
Angle=3
link(Data,6372118:Value,[(440,212)])
}

карма: 0

0
vip
#1.1контекстная реклама от партнеров
Ответов: 1886
Рейтинг: 164
#2: 2019-11-20 23:39:45 ЛС | профиль | цитата
1. KeyHook не рекомендуется использовать, т.к. требует hook.dll, к-ый часто определяется как вирус (хотя вируса там нет). А если запустить две программы с этим компонентом, то одна из них будет дважды реагировать на одно нажатие, вторая - ни разу. Иными словами, перехват только для одной программы.

2. gmousehook - что это за компонент? Никто не будет искать по сайту (где и поиск-то не работает) неизвестный компонент, а потому помочь мало кто сможет.

Поэтому для перехвата мыши и клавы советую использовать IC вместо сторонних компонентов:

Add(MainForm,2953706,63,105)
{
Width=380
Position=1
Point(Handle)
Point(onClose)
link(onCreate,14028631:doEvent1,[])
link(onClose,3179091:In,[(107,132)(107,146)])
}
Add(InlineCode,12360657,252,343)
{
@Hint=#24:Глобальный перехват мыши|
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;|33: destructor Destroy; override;|0:|5: end;|0:|14:var H:THandle;|20: hac:THiAsmClass;|0:|14:implementation|0:|49:function hook(code,w,l:integer):Lresult; stdcall;|15:var str:string;|25: ll:tagMSLLHOOKSTRUCT;|15: d:LongWord;|5:begin|38: ll := tagMSLLHOOKSTRUCT(pointer(l)^);|0:|26: d := ll.mouseData shr 16;|46: if d and $8000 <> 0 then d := d or $FFFF0000;|0:|30: str := Int2Str(w)+Int2Str(d);|25: _hi_OnEvent(hac.ev,str);|38: result := CallNextHookEx(H,code,w,l);|4:end;|0:|31:constructor THiAsmClass.Create;|5:begin|18: inherited Create;|13: hac := self;|48: H := SetWindowsHookEx(14, @hook, hInstance, 0);|82: if H = 0 then messagebox(ReadHandle,'Ошибка перехвата мыши','ERROR',mb_iconhand);|4:end;|0:|31:destructor THiAsmClass.Destroy;|5:begin|24: UnhookWindowsHookEx(H);|19: inherited Destroy;|4:end;|0:|4:end.|
link(ev,14423304:doAdd,[])
}
Add(Memo,14423304,441,343)
{
Left=10
Top=5
Width=160
Height=260
AddType=1
ScrollBars=2
}
Add(InfoTip,13344029,238,112)
{
Info=#20:5120 - движение мыши|55:522ХХХ - прокрутка колеса, где ХХХ - значение прокрутки|18:5130 - нажатие ЛКМ|21:5140 - отпускание ЛКМ|18:5160 - нажатие ПКМ|21:5170 - отпускание ПКМ|21:5190 - нажатие колеса|24:5200 - отпускание колеса|33:5231 - нажатие 1-й боковой кнопки|36:5241 - отпускание 1-й боковой кнопки|33:5232 - нажатие 2-й боковой кнопки|35:5242 - отпускание 2-й боковй кнопки|0:|62:В нижнем IC та же суть, только каждое событие имеет свою точку|
Frame=2
Transparent=1
HAlign=0
Width=358
Height=193
Margin=5
}
Add(WinTools,15561254,189,112)
{
link(Handle,10391384:Var,[])
}
Add(InlineCode,10339731,252,399)
{
@Hint=#24:Глобальный перехват мыши|
EventPoints=#11:onMouseMove|13:onLButtonDown|11:onLButtonUp|13:onRButtonDown|11:onRButtonUp|11:onWheelDown|9:onWheelUp|8:onScroll|14:onX1ButtonDown|11:onX1BttonUp|14:onX2ButtonDown|11:onX2BttonUp|
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|26: onMouseMove:THI_Event;|28: onLButtonDown:THI_Event;|26: onLButtonUp:THI_Event;|28: onRButtonDown:THI_Event;|26: onRButtonUp:THI_Event;|26: onWheelDown:THI_Event;|24: onWheelUp:THI_Event;|23: onScroll:THI_Event;|29: onX1ButtonDown:THI_Event;|27: onX1ButtonUp:THI_Event;|29: onX2ButtonDown:THI_Event;|27: onX2ButtonUp:THI_Event;|0:|23: constructor Create;|33: destructor Destroy; override;|0:|5: end;|0:|14:var H:THandle;|20: hac:THiAsmClass;|0:|14:implementation|0:|49:function hook(code,w,l:integer):Lresult; stdcall;|15:var str:string;|25: ll:tagMSLLHOOKSTRUCT;|15: d:LongWord;|5:begin|38: ll := tagMSLLHOOKSTRUCT(pointer(l)^);|0:|26: d := ll.mouseData shr 16;|46: if d and $8000 <> 0 then d := d or $FFFF0000;|0:|10: case w of|36: 512: _hi_OnEvent(hac.onMouseMove);|38: 513: _hi_OnEvent(hac.onLButtonDown);|36: 514: _hi_OnEvent(hac.onLButtonUp);|38: 516: _hi_OnEvent(hac.onRButtonDown);|36: 517: _hi_OnEvent(hac.onRButtonUp);|36: 519: _hi_OnEvent(hac.onWheelDown);|34: 520: _hi_OnEvent(hac.onWheelUp);|45: 522: _hi_OnEvent(hac.onScroll, int2str(d));|12: 523: begin|17: case d of|44: 1: _hi_OnEvent(hac.onX1ButtonDown);|44: 2: _hi_OnEvent(hac.onX2ButtonDown);|12: end;|11: end;|12: 524: begin|17: case d of|42: 1: _hi_OnEvent(hac.onX1ButtonUp);|42: 2: _hi_OnEvent(hac.onX2ButtonUp);|12: end;|11: end;|5: end;|38: result := CallNextHookEx(H,code,w,l);|4:end;|0:|31:constructor THiAsmClass.Create;|5:begin|18: inherited Create;|13: hac := self;|48: H := SetWindowsHookEx(14, @hook, hInstance, 0);|82: if H = 0 then messagebox(ReadHandle,'Ошибка перехвата мыши','ERROR',mb_iconhand);|4:end;|0:|31:destructor THiAsmClass.Destroy;|5:begin|24: UnhookWindowsHookEx(H);|19: inherited Destroy;|4:end;|0:|4:end.|
}
Add(InlineCode,2317400,252,595)
{
@Hint=#49:Глобальный перехват клавиатуры (Вариант от Ivann)|
WorkPoints=#7:SetHook|6:UnHook|
EventPoints=#7:onKeyUp|9:onKeyDown|10:onSysKeyUp|12:onSysKeyDown|
Code=#15:unit HiAsmUnit;|0:|9:interface|0:|38:uses kol,Share,Debug,Windows,Messages;|0:|4:type|28: THiAsmClass = class(TDebug)|10: private|40: procedure onKey(param,code:integer);|9: public|56: onKeyUp,onKeyDown,onSysKeyUp,onSysKeyDown:THI_Event;|4: |46: procedure SetHook(var dt:TData; Idx:WORD);|45: procedure UnHook(var dt:TData; Idx:WORD);|5: end;|0:|14:implementation|0:|5:const|21: WH_KEYBOARD_LL = $D;|0:|4:var |12: Hook:HHOOK;|45: ret:procedure(param,code:integer) of object;|0:|82:function HookProc(Code: integer; wParam:integer;lParam: LongInt): HRESULT;stdcall;|5:begin|35: ret(wParam,PInteger(lParam)^); |55: result := CallNextHookEx(Hook, Code, wParam , lParam);|4:end;|0:|30:procedure THiAsmClass.SetHook;|5:begin|12: ret:=onKey;|64: Hook := SetWindowsHookEx(WH_KEYBOARD_LL,@HookProc,HInstance,0);|4:end;|0:|28:procedure THiAsmClass.onKey;|5:begin|16: Case Param of|45: WM_KEYDOWN :_hi_OnEvent(onKeyDown,code);|43: WM_KEYUP :_hi_OnEvent(onKeyUp,code);|48: WM_SYSKEYDOWN:_hi_OnEvent(onSysKeyDown,code);|46: WM_SYSKEYUP :_hi_OnEvent(onSysKeyUp,code);|9: end; |4:end;|68:{Сообщение WM_SYSKEYDOWN посылается окну с фокусом клавиатуры тогда,|83:когда пользователь удерживает нажатой клавишу ALT, а затем нажимает другую клавишу.|92:Это происходит также тогда, когда никакое окно в настоящее время не имеет фокуса клавиатуры;|65:в этом случае сообщение WM_SYSKEYDOWN посылается активному окну.}|0:|29:procedure THiAsmClass.UnHook;|5:begin|27: UnhookWindowsHookEx(Hook);|4:end;|0:|4:end.|
link(onKeyUp,3658577:doWork1,[])
link(onKeyDown,3658577:doWork2,[])
link(onSysKeyUp,3658577:doWork3,[])
link(onSysKeyDown,3658577:doWork4,[])
}
Add(ListBox,11565061,476,560)
{
Left=180
Top=5
Width=180
Height=260
}
Add(StrList,4095676,378,553)
{
Strings=#8:WM_KEYUP|10:WM_KEYDOWN|11:WM_SYSKEYUP|13:WM_SYSKEYDOWN|
Point(doGetString)
Point(onGetString)
link(onGetString,9575750:doString,[])
}
Add(ChanelToIndex,3658577,301,595)
{
Count=4
Point(Data)
link(onIndex,4095676:doGetString,[])
}
Add(FormatStr,9575750,420,560)
{
link(onFString,11565061:doAdd,[])
link(Str2,3658577:Data,[(433,548)(370,548)(370,639)(307,639)])
}
Add(Hub,14028631,119,119)
{
link(onEvent1,15561254:doPopup,[])
link(onEvent2,2362015:In,[])
}
Add(LineBreak,4352888,210,595)
{
link(Out,2317400:SetHook,[])
Primary=[2362015,-63,-469]
}
Add(LineBreak,11715000,63,147)
{
Type=1
link(Data,2953706:Handle,[])
Primary=[10391384,126,-63]
}
Add(LineBreak,6859518,210,602)
{
link(Out,2317400:UnHook,[])
Primary=[3179091,-91,-462]
}

ps. Ну, не буду и против вознаграждения, если сочтёте нужным.
карма: 7
0
2
Сообщение
...
Прикрепленные файлы
(файлы не залиты)