AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein Win32/Win64 API (native code) Delphi Rechte Maustaste unc CTRL Systemweit abfangen
Thema durchsuchen
Ansicht
Themen-Optionen

Rechte Maustaste unc CTRL Systemweit abfangen

Ein Thema von yvesdaeschle · begonnen am 6. Jan 2005 · letzter Beitrag vom 6. Jan 2005
Antwort Antwort
yvesdaeschle

Registriert seit: 22. Nov 2004
Ort: Efringen
26 Beiträge
 
Delphi 6 Personal
 
#1

Rechte Maustaste unc CTRL Systemweit abfangen

  Alt 6. Jan 2005, 12:46
Hallo Zusammen,

ich hab mal wieder ein kleines Problem. Ich habe mir gerade die Geschichte mit den Hooks ein wenig angeschaut, aber ich kommt auf keinen grünen Zweig. Ich kann zwar den Hook installieren und erstellen, aber jetzt kommt meine Frage. Wenn irgendwo (Systemweit) Die Ctrl Taste in Verbindung mit der rechten Mausstaste geklickt wird, dann brauch ich die aktuelle Mausposition.

Wie fang ich Tastatur + Maushook ab und wie bekomme ich dann das Ergebnis in mein Programm (von der DLL).

Bei Assabard war ich schon, versteh das ganze aber nicht ganz.

Danke, Yves
  Mit Zitat antworten Zitat
yvesdaeschle

Registriert seit: 22. Nov 2004
Ort: Efringen
26 Beiträge
 
Delphi 6 Personal
 
#2

Re: Rechte Maustaste unc CTRL Systemweit abfangen

  Alt 6. Jan 2005, 13:46
Hallo,

also das mit den Hooks hab ich doch halbwegs verstanden. Und ich denke auf dem Weg bin ich jetzt schon mal richitg.

Ich habe jetzt versucht, als erstes Mal den Mausdruck zu empfangen. Dazu folgender Code:

Ist in der Hook Dll abgelegt:
Delphi-Quellcode:
function MouseHookProc(nCode: Integer; wParam: WPARAM; lParam: LPARAM):
 LRESULT; stdcall;
begin
//es ist ebenfalls möglich die Bearbeitung an eine Bedingung zu knüpfen
//it's possible to call CallNextHookEx conditional only.
  Result := CallNextHookEx(HookHandle, nCode, wParam, lParam);
  case nCode < 0 of
    TRUE: exit; //wenn code kleiner 0 wird nix gemacht
                //if code smaller 0 nothing has to be done
    FALSE:
      begin
//Hier kann jetzt alles bearbeitet werden
//Here one can work with the parameters
        PostMessage(WindowHandle, WM_MOUSEHOOKMSG, wParam, lParam);
      end;
  end;
end;
In meinem Programm starte ich jetzt den Hook. Und fange die Mausereignisse so ab:
Delphi-Quellcode:
procedure TForm1.DllMessage(var Msg: TMessage);
begin
// if (Msg.wParam <> WM_LBUTTONDOWN) or (Msg.wParam <> WM_LBUTTONUP) then exit;
  if Msg.wParam = WM_LBUTTONDOWN then
    Label1.Caption := ('Down')
  else if Msg.wParam = WM_LBUTTONUP then
    Label1.Caption := ('Up');
end;
Leider bekomme ich nur die Mausereignisse in meinem eigenen Programm und nicht Systemweit, ich hab doch eine DLL erstellt, ich habe das Gefühl das reicht nicht um es Systemweit zu machen!?

Yves
  Mit Zitat antworten Zitat
yvesdaeschle

Registriert seit: 22. Nov 2004
Ort: Efringen
26 Beiträge
 
Delphi 6 Personal
 
#3

Re: Rechte Maustaste unc CTRL Systemweit abfangen

  Alt 6. Jan 2005, 13:56
Hallo,

hab jetz das Problem gelöst... Bei dem Tutorial von Assabard hab ich das nirgends geshen.

Und zwar mach ich es mit FileMapping, dann funktioniert es Systemweit!

Delphi-Quellcode:
if nCode = HC_ACTION then
  begin
    FileMapObj := OpenFileMapping(FILE_MAP_READ, False,'CSHookMapFile');
    if FileMapObj <> 0 then
    begin
      FileMapView := MapViewOfFile(FileMapObj, FILE_MAP_READ, 0, 0, 0);
      PostMessage(FileMapView^, WM_MOUSEHOOKMSG, wParam, lParam);
      UnmapViewOfFile(FileMapView);
      CloseHandle(FileMapObj);
    end;
    Result := CallNextHookEx(HookHandle, nCode, wParam, lParam);
  end;
Warum geht das nur so?

Yves
  Mit Zitat antworten Zitat
Antwort Antwort


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 20:02 Uhr.
Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz