AGB  ·  Datenschutz  ·  Impressum  







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

Problem bei KeyHook

Ein Thema von MCQ · begonnen am 17. Jan 2006 · letzter Beitrag vom 21. Jan 2006
Antwort Antwort
MCQ

Registriert seit: 14. Jan 2004
Ort: Dessau
80 Beiträge
 
#1

Problem bei KeyHook

  Alt 17. Jan 2006, 19:03
Ich wollte ein Programm schreiben welches mit erlaubt tastenergebnisse umzuwandeln. Soll heißen das Prigramm registriert beispielsweise das [ENTER] gedrück wurde und wandelt es in [LEERTASTE] um bevor ess beim programm ankommt. Sinn der Sache ist es die Tasten die die PC-Fernbedienung emuliert umzuwandeln in die Tasten welche Winamp, PowerDVD usw. als ShortCuts erwarten

Also habe ich angefangen eine Tastatur-Hook zu programmieren, was auch sehr gut funktioniert. Allerdings ist der Hook nur Lokal und nicht Global. Die Hook-Prozeduren stecken in einer DLL welche von einer EXE geladen werden. den DLL-Source poste ich hier:

Delphi-Quellcode:
library hook;

{ Wichtiger Hinweis zur DLL-Speicherverwaltung: ShareMem muss sich in der
  ersten Unit der unit-Klausel der Bibliothek und des Projekts befinden (Projekt-
  Quelltext anzeigen), falls die DLL Prozeduren oder Funktionen exportiert, die
  Strings als Parameter oder Funktionsergebnisse übergeben. Das gilt für alle
  Strings, die von oder an die DLL übergeben werden -- sogar für diejenigen, die
  sich in Records und Klassen befinden. Sharemem ist die Schnittstellen-Unit zur
  Verwaltungs-DLL für gemeinsame Speicherzugriffe, BORLNDMM.DLL.
  Um die Verwendung von BORLNDMM.DLL zu vermeiden, können Sie String-
  Informationen als PChar- oder ShortString-Parameter übergeben. }



uses
  windows,
  StdCtrls,
  comCtrls,
  Forms,
  SysUtils,
  Messages,
  dialogs;

var OrgVar : TEdit;
    ChgVar : TEdit;
    Form : TForm;
    ValList : TListView;
    hLocalHook : Cardinal;
    hGlobalHook : Cardinal;
{$R *.res}


function LocalHook(nCode: Integer; wParam: WPARAM; lParam: LPARAM): LRESULT; stdcall;
begin
  Result := CallNextHookEx(hLocalHook, nCode, wParam, lParam);
  if wParam=9 then exit;
  if GetForegroundWindow()<>Form.Handle then exit;
  if OrgVar.Focused then OrgVar.Text:=IntToStr(wParam);
  if ChgVar.Focused then ChgVar.Text:=IntToStr(wParam);
end;

function GlobalHook(nCode: Integer; wParam: WPARAM; lParam: LPARAM): LRESULT; stdcall;
var i : integer;
begin
  wParam:=65;
  Result := CallNextHookEx(hGlobalHook, nCode, wParam, lParam);
end;


procedure setLocalHook;stdcall
begin
 if hLocalHook = 0 then
 hLocalHook:=SetWindowsHookEx(WH_KEYBOARD, @LocalHook, hInstance, 0);
end;

procedure unsetLocalHook;stdcall;
begin
 If hLocalHook<>0 then
 UnhookWindowsHookEx(hLocalHook);
end;

procedure setGlobalHook;stdcall
begin
 if hGlobalHook = 0 then
 hGlobalHook:=SetWindowsHookEx(WH_KEYBOARD, @GlobalHook, hInstance, 0);
end;

procedure unsetGlobalHook;stdcall;
begin
 If hGlobalHook<>0 then
 UnhookWindowsHookEx(hGlobalHook);
end;


procedure setVars(OrgVarEdit,ChVarEdit:TEdit;MainForm:TForm;ValListView:TListView);
begin
 OrgVar:=OrgVarEdit;
 ChgVar:=ChVarEdit;
 Form:=MainForm;
 ValList:=ValListView;
end;

exports
    setLocalHook,
    unsetLocalHook,
    setGlobalHook,
    unsetGlobalHook,
    setVars;
begin
end.
//Edit:
Was dazu vielleicht noch gesagt werden sollt, der lokale Hook wird genutzt um die Einstellunen der Tastatur-Changes zu tätigen, dieser wird abgeschaltet kurz bevor der gobale Hook gestartet wird. Welcher welcher ist, geht aus den Prozedur-namen eindeutig hervor.
  Mit Zitat antworten Zitat
MCQ

Registriert seit: 14. Jan 2004
Ort: Dessau
80 Beiträge
 
#2

Re: Problem bei KeyHook

  Alt 18. Jan 2006, 02:05
OK, hab es nun hingekriegt das es mit dem globalem Hook funktioniert. Ich nutze dazu statt WH_KEYBOARD einfach WH_KEYBOARD_LL, aber wie kann ich nun die Eingaben ändern bevor die das Programm erreichen?

[PUSHBEITRAG]
Kann mir wirklich keiner helfen?
Kann man eigendlich aum glauben
[/PUSHBEITRAG]

[edit=Christian Seehase]Pushen von Threads frühestens nach 24 Stunden Pushbeitrag gelöscht. Mfg, Christian Seehase[/edit]
  Mit Zitat antworten Zitat
MCQ

Registriert seit: 14. Jan 2004
Ort: Dessau
80 Beiträge
 
#3

Re: Problem bei KeyHook

  Alt 21. Jan 2006, 23:03
*push*Das Problem besteht noch immer, ich hoffe mir kann bald jemannd helfen
  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 09:47 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