![]() |
Mausrad abfangen - drehung außerhalb der anwendung erkennen
hi, kann mir jemand sagen wie ich außerhalb meiner anwendung erkennen kann ob das mausrad gedreht wurde, es ist egal welche richtung oder so, ich muss nur erkennen das es gedreht wurde, möchte nämlich in einem spielen das rad drehen und dann soll mein programm ein tasten befehl senden
ich hahe absolut keine ahnung wie das geht |
Re: Mausrad abfangen - drehung außerhalb der anwendung erken
Lies dir mein Hooktutorial durch und les dich in Luckies Win32-Tuts schlau.
|
Re: Mausrad abfangen - drehung außerhalb der anwendung erken
Hallo,
ich habe hier mal ein Code für dich:
Delphi-Quellcode:
In einigen Prozeduren wird eine dll ausgelagert, hiermit nicht.
private
i: Integer; MouseHook: HHOOK; . . {--[MouseHookProc]-------------------------------------------------------------} function MouseHookProc(nCode: Integer; wParam: WPARAM; lParam: LPARAM): LRESULT; stdcall; begin If nCode = HC_ACTION then begin If lParam <> 0 then with PEventMsg(lParam)^ do begin If Message = WM_MOUSEWHEEL then begin Inc(Form1.i); Form1.Label1.Caption := IntToStr(Form1.i); end; end; end; Result := CallNextHookEx(Form1.MouseHook, nCode, wParam, lParam); end; procedure TForm1.FormCreate(Sender: TObject); begin i := 0; Form1.MouseHook := SetWindowsHookEx(WH_JOURNALRECORD, @MouseHookProc, HInstance, 0); end; procedure TForm1.FormDestroy(Sender: TObject); begin If Form1.MouseHook <> 0 then begin UnhookWindowsHookEx(Form1.MouseHook); Form1.MouseHook := 0; end; end; Gruß Mazel |
Re: Mausrad abfangen - drehung außerhalb der anwendung erken
Da der Hook nicht in einer DLL steckt, wird es nicht systemweit funktionieren, sondern nur im eigenen Prozess. Es sol aber systemweit funktionieren. Ergo ist es zwingend erforderlich, dass der Hook in eine DLL ausgelagert wird, die dann in jeden Prozess injiziert wird.
|
Re: Mausrad abfangen - drehung außerhalb der anwendung erken
:gruebel: Aber das ist doch ein hardware-Hook. Warum soll der in alle Anwendungen rein?
|
Re: Mausrad abfangen - drehung außerhalb der anwendung erken
Verhält sich das bei Hardware Hooks nicht so? Also einen Keyboard Hook musst du auch in alle Prozesse injizieren, wenn du von allen Prozessen die Tatstauranschläge bekommen willst.
|
Re: Mausrad abfangen - drehung außerhalb der anwendung erken
Hallo,
@Lucky, was meinst du mit eigenem Prozess? Wenn du den Code testest, siehst du dass er auch außerhalb der eigenen Anwendung funktioniert. Ich weis nicht ob das der beste Weg ist aber den Code hab ich einem meiner Programm drinn, welches über einen Klick auf ein Fenstertitel dieses Fenster durchsichtig macht. Dazu war auch ein Hook notwenig. Und noch was: Warum ist das ein HardwareHook? was bedeutet das? Gruß Mazel |
Re: Mausrad abfangen - drehung außerhalb der anwendung erken
Hardware-Hook ist technisches Blabla. Sowas gibt es nicht! Als ob man vom Usermode direkt auf Hardware zugreifen könnte. :lol:
Der Journal-Hook ist etwas spezifisches (wird zB für Anwendungen für Behinderte benutzt). In der Doku steht auch eindeutig: Zitat:
|
Re: Mausrad abfangen - drehung außerhalb der anwendung erken
Liste der Anhänge anzeigen (Anzahl: 1)
Mir ist nicht bekannt, das die DLL in jeden Prozess injiziert werden muss. Es ist aber so, das (nach meinem Halbwissen) Windows es nicht zulässt, das eine EXE einen globalen Hook einrichtet, denn wenn die EXE wegballert, ohne den Hook wegzunehmen, schießt sich dadurch Windows ab.
Also hat MS sich gedacht: Globale Hooks nur in DLL. Du schreibst also eine kleine Hook-DLL, lädst die permanent und initialisierst aus dem DLL-Code heraus den Hook. Nun sieht Windows, das der Hook aus eine DLL zeigt und die Welt ist in Ordnung, denn Windows kontrolliert, wann die DLL wieder aus dem Speicher verschwindet. Über ein Callback realisierst Du die Benachrichtigung, das etwas passiert ist. Ich denke mal, das meint Luckie et al. mit 'injizieren', oder? Leider finde ich meine DLL nicht mehr, die das so gemacht hat. Ich weiss nur noch, das man den DLL-Initialisierungscode (DllMain) selbst schreiben muss, damit das klappt. Das hier hab ich bei torry gefunden. Ich habe es nicht getestet, aber vielleicht hilft es Dir (und ist eine Alternative zu Luckies Methode). |
Re: Mausrad abfangen - drehung außerhalb der anwendung erken
Zitat:
Das mit dem Abschiessen des Systems war bis Windows ME ein Problem. Heute nicht mehr ;) Zitat:
Zitat:
|
Alle Zeitangaben in WEZ +1. Es ist jetzt 16:32 Uhr. |
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz