AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Sprachen und Entwicklungsumgebungen Object-Pascal / Delphi-Language Delphi Simulierten Hotkey per WMHotKey abfangen?
Thema durchsuchen
Ansicht
Themen-Optionen

Simulierten Hotkey per WMHotKey abfangen?

Ein Thema von schwa226 · begonnen am 16. Apr 2008 · letzter Beitrag vom 23. Apr 2008
 
schwa226

Registriert seit: 4. Apr 2008
400 Beiträge
 
#8

Re: Simulierten Hotkey per WMHotKey abfangen?

  Alt 21. Apr 2008, 16:34
Hab jetzt alles dynamisch gelöst:

Code:
    //ein Tasten Shorcut
     if (TPMsg(lParam)^.wParam = HandleHook[i].car3) and (HandleHook[i].car4 = 0) and (HandleHook[i].car5 = 0) then // 1. Cardinal
        begin
            if TPMsg(lParam)^.message = WM_KEYDOWN then// Taste unten
            begin
              SetForeGroundWIndow(WindowHandle);

              keybd_event(HandleHook[i].car1, 0, 0, 0);

                if not (HandleHook[i].car2 = 0) then begin
                  keybd_event(HandleHook[i].car2, 0, 0, 0);
                  keybd_event(HandleHook[i].car1, 0, KEYEVENTF_KEYUP,0);
                  keybd_event(HandleHook[i].car2, 0, KEYEVENTF_KEYUP,0);
                end
                else keybd_event(HandleHook[i].car1, 0, KEYEVENTF_KEYUP,0);

              Messagebox(0, PChar(HandleHook[i].str1), 'H O O K', 0);
              Kill := True;
            end;

     end

     //zwei Tasten Shorcut
     else if (GetKeyState(HandleHook[i].car3)< 0) and (HandleHook[i].car4 <> 0) and (HandleHook[i].car5 = 0) then // 1. Cardinal
      begin
        if TPMsg(lParam)^.wParam = HandleHook[i].car4 then // 2. Cardinal
        begin
            if TPMsg(lParam)^.message = WM_KEYDOWN then// Taste unten
            begin
              SetForeGroundWIndow(WindowHandle);

              keybd_event(HandleHook[i].car1, 0, 0, 0);

                if not (HandleHook[i].car2 = 0) then begin
                  keybd_event(HandleHook[i].car2, 0, 0, 0);
                  keybd_event(HandleHook[i].car1, 0, KEYEVENTF_KEYUP,0);
                  keybd_event(HandleHook[i].car2, 0, KEYEVENTF_KEYUP,0);
                end
                else keybd_event(HandleHook[i].car1, 0, KEYEVENTF_KEYUP,0);
              Messagebox(0, PChar(HandleHook[i].str1), 'H O O K', 0);
              Kill := True;
            end;
        end;
    end
     //drei Tasten Shorcut
    else if (GetKeyState(HandleHook[i].car3)< 0) and (GetKeyState(HandleHook[i].car4)< 0) then // 1. + 2. Cardinal
      begin
        if TPMsg(lParam)^.wParam = HandleHook[i].car5 then // 3. Cardinal
        begin
            if TPMsg(lParam)^.message = WM_KEYDOWN then// Taste unten
            begin
              SetForeGroundWIndow(WindowHandle);

              keybd_event(HandleHook[i].car1, 0, 0, 0);

                if not (HandleHook[i].car2 = 0) then begin
                  keybd_event(HandleHook[i].car2, 0, 0, 0);
                  keybd_event(HandleHook[i].car1, 0, KEYEVENTF_KEYUP,0);
                  keybd_event(HandleHook[i].car2, 0, KEYEVENTF_KEYUP,0);
                end
                else keybd_event(HandleHook[i].car1, 0, KEYEVENTF_KEYUP,0);          
              Messagebox(0, PChar(HandleHook[i].str1), 'H O O K', 0);
              Kill := True;
            end;
        end;
     end;
Hirmit kann ich 1, 2 & 3 Tasten-Codes abfangen.

Nun Fange ich z.B. die Tast "ESC" ab. Geht auch super!

Mein Problem ist nun wenn ich aus:

Abfangen -> Weiterschicken
ESC -> Enter
Enter -> Enter

mache, verfängt sich die Schleife natürlich in eine Endlosschleife wenn ich nun "Esc" drücke!

Sinn der Sache ist:

Ich habe 3 Programme, Prog1 sendet an Prog2 einen Shortcut. Dieser soll jedoch abgefangen werden und an Prog3 geschickt werden.

Muss ich da jetzt jedesmal bevor ich ein keybd_event auslöse den Hook wieder auflösen damit es sich nicht endlos in der Schleife verfängt?

EDIT:

zusätzlich habe ich herausgefunden, dass die Variable "HandleHook[i]", die Global definiert ist meinen Hook auf nurmehr Lokal verändert!

Wie kann ich das noch übergehen, denn die Array HandleHook wird in einer anderen Funktion bei SetHook erst aufgefüllt.
  Mit Zitat antworten Zitat
 


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 03:22 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