AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Thema durchsuchen
Ansicht
Themen-Optionen

Tastaturhook auf Bildschirmschoner

Ein Thema von hesch21 · begonnen am 29. Mai 2012 · letzter Beitrag vom 25. Jan 2013
 
hesch21

Registriert seit: 31. Aug 2004
Ort: Basel
114 Beiträge
 
Delphi XE2 Enterprise
 
#14

AW: Tastaturhook auf Bildschirmschoner

  Alt 25. Jan 2013, 10:47
Ich bin immer noch an diesem Problem, aber der Sache einiges näher gekommen! An sich funktioniert ein Hook auf dem Bildschirmschoner-Desktop! Das Problem ist aber das, dass man bei der CallBack-Routine über CallNextHookEx die empfangenen Tastenwerte weitergeben sollte. Und wenn man das macht, reagiert natürlich der Bildschirmschoner, indem er sich beendet. Und damit ist es aus den für weiteren Hook-Empfang in meinem Programm. Es kommt also nur gerade das erste KeyDown-Event der ersten Taste. Da ich aber eine Doppeltasten-Kombination benötige, müssten zuerst zwei KeyDown- und danach zwei KeyUp-Events der richtigen Tastenkombination kommen.
Nun habe ich folgende Routine geschrieben:
Code:
function CallBackDelHook(Code: Integer; wParam: WPARAM; lParam:LPARAM): LRESULT; stdcall;
var SendStr : string;
var Res    : boolean;
var HiC    : DWORD;
begin
 Res := True;
 if code = HC_ACTION then
    begin
    if Erster = 0 then               {noch nichts}
       begin
       if (wParam = WM_KEYDOWN) then {nur wenn Key Down}
          begin
          HiC := PKBDLLHookInfo(lParam).vkCode;
          if (HiC = TCode1) or (HiC = TCode2) then
             begin
             Erster := HiC;
             Res   := False;
             end;
          end;
       end
    else                            {bereits einer da}
       begin
       if (wParam = WM_KEYDOWN) then {nur wenn Key Down}
          begin
          HiC := PKBDLLHookInfo(lParam).vkCode;
          if (HiC = TCode1) or (HiC = TCode2) then
             begin
             Zweiter := HiC;
             if Erster <> Zweiter then
                begin
                SendStr := 'Hook ' + format('%3d', [Erster]) +  ' ¦ ' + format('%3d', [Zweiter]);
                AssignFile(filno, Pfad + 'AMTest.log');
                Append(filno);
                Writeln(filno, TimeToStr(Now) + ' ' + SendStr);
                CloseFile(filno);
                Res   := False;
                end;
             end;
          end
       else                       {Key up und ausgelöst}
          begin
          if (Zweiter <> 0) and (Erster <> Zweiter) then
             Res   := False;
          end;
       end;
    end;
{ if Res = True then
    Result := CallNextHookEx(0, Code, wParam, lParam)
 else
    Result := 0;    }
end;
Die Idee: Die Tasten nicht weiter geben, wenn sie zur gewünschten Kombination gehören. Das wird über das Flag 'Res' gesteuert. Aber funktionieren tut es nicht. Wenn ich die unten auskommentierten Zeilen aktiviere, habe ich wieder den Effekt, dass mir der Bildschirmschoner nach einem Hookevent aktiviert wird. Wenn ich es aber so laufen lasse wie oben, dann funktioniert das Ganze mit dem Schönheitsfehler, dass sich danach der Bildschirmschoner nur noch mit der Maus beenden lässt.

Irgendwo mach ich einen Überlegungsfehler, seh ihn aber nicht.
Heinz Schneider
  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 07:05 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