Бознигариҳои

Мушро часпонед, то ки рӯйдодҳоро берун аз барнома бандед

Мушро часпонед, то ки рӯйдодҳоро берун аз барнома бандед


We are searching data for your request:

Forums and discussions:
Manuals and reference books:
Data from registers:
Wait the end of the search in all databases.
Upon completion, a link will appear to access the found materials.

Бифаҳмед, ки чӣ тавр пайгирии фаъолияти мушро ҳатто агар барномаи Delphi ғайрифаъол бошад, дар панели нишаста бошад ё ягон UI надошта бошад.

Бо насб кардани як қалмоқе дар саросари система (ё глобалӣ) шумо метавонед корбарро бо муш назорат карда, мувофиқи он амал кунед.

Хук чист ва он чӣ гуна кор мекунад?

Ба таври кӯтоҳ, қалмоқе як функсияи (бозхарид) шумо метавонед ҳамчун як қисми DLL (китобхонаи пайванди динамикӣ) ё барномаи худ барои назорат кардани "рафтан" дар дохили системаи амалиётии Windows эҷод карда шавад.
2 намуди мошинҳо вуҷуд доранд - глобалӣ ва маҳаллӣ. Қалби маҳаллӣ рӯйдодҳоро танҳо барои барномаи муайян (ё ришта) назорат мекунад. Қалмоқе ҷаҳонӣ тамоми системаро назорат мекунад (ҳама риштаҳо).

Барои сохтани қалмоқеи глобалӣ ба шумо 2 лоиҳа лозим аст, 1 барои сохтани файли иҷрошаванда ва 1 барои DLL дорои тартиботи қалмоқ.

Мақолаи мо оид ба кор бо қалмоқҳои клавиатура аз Delphi мефаҳмонад, ки чӣ тавр ба ворид кардани клавиатура барои идоракунӣ, ки наметавонад диққати вурудро қабул кунад (ба мисли TImage).

Hooking муш

Бо тарроҳӣ, ҳаракати муш бо андозаи экрани мизи кории шумо маҳдуд карда мешавад (аз ҷумла Windows Task Bar). Вақте, ки шумо мушро ба канори чап / рост / боло / поёни ҳаракат медиҳед, он тавре ки интизор меравад, муш “истад” - тавре ки пешбинӣ шудааст (агар шумо як монитор надошта бошед).

Ин аст идеяи қалмоқе дар саросари система: Масалан, агар шумо мехоҳед, ки мушро ба тарафи рости экран ҳаракат кунед, вақте ки он ба канори чап ҳаракат мекунад (ва "ба он мерасад"), шумо метавонед қалмоқии глобалии мушро нависед барои ҷойгузин кардани нишоннамои муш.

Шумо аз сохтани лоиҳаи китобхонаи пайванди динамикӣ оғоз мекунед. DLL бояд ду усулро содир кунад: "HookMouse" ва "UnHookMouse".

Тартиби HookMouse даъват мекунад SetWindowsHookEx API барои параметри аввал аз "WH_MOUSE" мегузарад - Ҳамин тавр насб кардани тартиби қалмоқе, ки паёмҳои мушро назорат мекунад. Яке аз параметрҳои SetWindowsHookEx ин функсияи бозгардонидани Windows ҳангоми зангзании паёми муш аст, занг мезанад:

SetWindowsHookEx (WH_MOUSE, @HookProc, HInstance, 0);

Параметри охирин (value = 0) дар SetWindowsHookEx муайян мекунад, ки мо қалмоқаи глобалиро сабт мекунем.

HookProc паёмҳои марбут ба мушро таҳлил мекунад ва ба лоиҳаи санҷишии мо паёми махсус ("MouseHookMessage") мефиристад:

функсия HookProc (nCode: Integer; MsgID: WParam; Маълумот: LParam): LResult; stdcall;

var

мушPoint: TPoint;

notifyTestForm: мантиқӣ;

MouseDirection: TMouseDirection;

Оғоз

mousePoint: = PMouseHookStruct (маълумот) ^. pt;

notifyTestForm: = бардурӯғ;

   агар (mousePoint.X = 0) баъд

   Оғоз

Windows.SetCursorPos (-2 + Screen.Width, mousePoint.y);

notifyTestForm: = ҳақиқӣ;

Дастгирии MouseDirection: = mdRight;

   Поён;

  

агар notifyTestForm баъд

   Оғоз

PostMessage (FindWindow ('TMainHookTestForm', nil), MouseHookMessage, MsgID, Integer (MouseDirection));

   Поён;
Натиҷа: = CallNextHookEx (Hook, nCode, MsgID, Data);

Поён;

Маслиҳат: Файлҳои Win32 SDK-ро хонед, то дар бораи сабти PMouseHookStruct ва имзои функсияи HookProc маълумот пайдо кунед.

Шарҳ: Функсияи қалмоқе ба ҳеҷ ҷое фиристодани чизе лозим нест - занги PostMessage танҳо барои нишон додани он, ки DLL бо ҷаҳони "берунӣ" муошират мекунад, истифода мешавад.

Ҳукси муш "гӯшкунанда"

Паёми "MouseHookMessage" ба лоиҳаи санҷишии шумо - форма бо номи "TMainHookTestForm" фиристода мешавад. Шумо усули WndProc-ро аз даст медиҳед, то ки паём гиред ва дар ҳолати зарурӣ амал кунед:

тартиби TMainHookTestForm.WndProc (var Хабар: TMessage);

Оғоз

   мерос гирифтааст WndProc (паём);
  

агар Message.Msg = HookCommon.MouseHookMessage баъд

   Оғоз

     // татбиқ, ки дар коди ҳамроҳ пайдо шудааст

Сигнал (TMouseDirection (Message.LParam));

   Поён;

Поён;

Албатта, вақте ки шакл сохта мешавад (OnCreate) шумо HookMouse-ро аз DLL даъват мекунед, вақте ки он баста мешавад (OnDestroy) шумо фармони UnHookMouse-ро мехонед.

Эзоҳ: Дастгоҳҳо одатан системаро суст мекунанд, зеро онҳо миқдори коркардро барои ҳар як паём зиёд мекунанд. Шумо бояд қалмоқро танҳо ҳангоми зарурат насб кунед ва ҳарчи зудтар онро хориҷ кунед.



Шарҳҳо:

  1. Zusida

    боян

  2. Goshakar

    Лаҳзаи ҷолиб

  3. Taukasa

    the admirable message

  4. Tujin

    Ташаккури зиёд барои тавзеҳот, акнун ман ба ин гуна хатогӣ роҳ намедиҳам.

  5. Simpson

    Well done, the brilliant idea and is timely

  6. Adham

    Мебахшед, ки ман дахолат мекунам, аммо ман тавсия медиҳам, ки дигараш равам.



Паём нависед