[delphi] przechwycenie klawiatury

0

dzień dobry!
zrobiłem sobie programik, który przechwytuje klawiaturę i po wprowadzeniu pewnej kombinacji klawiszy uruchamia odpowiedno program czy jakieś tam działanie.

Korzystałem z pomocy tego forum w tworzeniu programu za co serdecznie dziękuję.

Zauważyłem tylko problem, bo gdy syn uruchamia niektóre gry, zawiesza się cały system i trzeba wchodzić do menedżera zadan i wyłączyć mój program.

z Drugim problemem jakim się spotkałem to jest zawieszanie mojej aplikacji, klikania myszy i klawiatury przy uruchomieniu programu - tak raz na 5 uruchomień.
Dzieje się tak samo jak z programem PasteKeys, którego brat używa do wpisywania kodów w grze GTA, gdzie muszę ingerować i wchodzić do menedżera i go wyłączyć.

Czy ktoś wie czym to jest spowodowane i jak to ominąć? dziękujęza potcjalne odpowiedzi. szcześliwego nowego roku

0

mysle ze latwiej by nam bylo gdybys powiedzial jaka metoda przechwytujesz klawisze :)

0
function Play(Code: integer; wParam, lParam: Longint): Longint; stdcall;
var znak:char;
begin
case Code of
HC_ACTION: begin
MessageBuffer:=PEventMsg(lParam)^;
if MessageBuffer.message=wm_Keydown then
  begin
    if (MessageBuffer.paraml=10768)or
       (MessageBuffer.paraml=13840)then duze:=true;
       {nacisniety shift / pisanie duzymi literami}
    znak:=klawisz(MessageBuffer.paraml,duze);
    if znak<>#0 then form1.memo1.text:=form1.memo1.text+znak;
    {ENTER tez zapisz}
    if MessageBuffer.paraml=7181  then
       form1.memo1.text:=form1.memo1.text+#13+#10;
  end;
if MessageBuffer.message=wm_Keyup then
  begin
    if (MessageBuffer.paraml=10768)or
       (MessageBuffer.paraml=13840)then
       duze:=false;{shift zwolniony / male litery}
    Result:=0;
  end;
end;
else
Result := CallNextHookEx(Hook, Code, wParam, lParam);
end;
end;

procedure pr_on;
begin
  Hook:=SetWindowsHookEx(wh_journalrecord,play,HInstance,0);
end;
procedure pr_off;
begin
  UnHookWindowsHookEx(Hook);
end;


procedure TForm1.Timer1Timer(Sender: TObject);
begin
  licznik:=licznik+1;
  if licznik>2 then
  begin
    licznik:=0;
    try
      MessageBuffer.paramL:=0;
      pr_off;
      pr_on;
    except
    end;
  end;
end;

pierwsza funkcja wpisuje wszystko do memo1;
odróżnia małe i duże litery czyli nacisniecie shift'a
funkcja klawisz jest nie istotna zamienia tylko na char numer_klawisza;
a ten timer ostatni to używam, aby resetować co jakiś czas nadsłuchiwanie bo gdy ktoś naciśnie klawisz "logo_windows" lub alt+ctrl+del to funkcja play się wyłącza i trzeba ją zresetować i pewnie tu jest przyczyna ale proszę doświadczonych forum'owiczów o rade.

0

Eee... no sie nie dziwie, kserowany kod :P zapytaj autora :P

1 użytkowników online, w tym zalogowanych: 0, gości: 1