AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein Win32/Win64 API (native code) hook -> variable von form1 in dll bestimmen

hook -> variable von form1 in dll bestimmen

Ein Thema von denizli · begonnen am 27. Feb 2012 · letzter Beitrag vom 1. Mär 2012
Antwort Antwort
denizli

Registriert seit: 26. Dez 2010
2 Beiträge
 
#1

hook -> variable von form1 in dll bestimmen

  Alt 27. Feb 2012, 20:45
Hallo,

wie kann ich von der DLL auf die Variable von Form1 zugreifen ?

Hier der Code:

DLL
Delphi-Quellcode:
library jtdll;

uses
    Windows, Dialogs, Messages;

var
    HookHandle: Cardinal=0;
    WindowHandle: Cardinal=0;

function KeyboardHookProc(nCode: Integer; wParam: WPARAM; lParam: LPARAM): LRESULT; stdcall;
begin
    Result:=CallNextHookEx(HookHandle, nCode, wParam, lParam);
    case nCode<0 of
        true: exit;
        false: begin
            if (wParam=VK_F5) then xyz:=1; // Hier die Zeile, die nicht funktioniert. Variable 'xyz' ist von Form1, die ich hier an der Stelle ändern möchte
        end;
    end;
end;

function InstallHook(Hwnd: Cardinal): Boolean; stdcall;
begin
    result:=false;
    if HookHandle=0 then begin
        HookHandle:=SetWindowsHookEx(WH_KEYBOARD, @KeyboardHookProc, HInstance, 0);
        WindowHandle:=Hwnd;
        Result:=true;
    end;
end;

function UninstallHook: Boolean; stdcall;
begin
    Result:=UnhookWindowsHookEx(HookHandle);
    HookHandle:=0;
end;

exports
    InstallHook,
    UninstallHook;
end.
Form1
Delphi-Quellcode:
var xyz: integer;

function InstallHook(AppHandle: HWND): Boolean; stdcall; external 'jtdll.dll';
function UninstallHook: Boolean; stdcall; external 'jtdll.dll';

procedure TForm1.FormCreate(Sender: TObject);
begin
    InstallHook(handle);
end;

procedure TForm1.FormDestroy(Sender: TObject);
begin
    UninstallHook;
end;
LG

Geändert von denizli (27. Feb 2012 um 21:28 Uhr)
  Mit Zitat antworten Zitat
brechi

Registriert seit: 30. Jan 2004
823 Beiträge
 
#2

AW: hook -> variable von form1 in dll bestimmen

  Alt 27. Feb 2012, 21:27
Gar nicht, da die Dll im jweiligen Adressraum des anderen Prozesses geladen wird. Da hast du keinen Zugriff mehr auf deinen Speicherbereich. -> Lösung IPC
  Mit Zitat antworten Zitat
denizli

Registriert seit: 26. Dez 2010
2 Beiträge
 
#3

AW: hook -> variable von form1 in dll bestimmen

  Alt 27. Feb 2012, 21:51
Würde ClipBoard gehen/wäre es zu empfehlen ?
sprich: SetClipBoardData(), GetClipBoardData()
Ich brauche nur eine Variable, die ich in der DLL bestimmen möchte.

LG

Geändert von denizli (27. Feb 2012 um 21:53 Uhr)
  Mit Zitat antworten Zitat
Benutzerbild von Sir Rufo
Sir Rufo

Registriert seit: 5. Jan 2005
Ort: Stadthagen
9.454 Beiträge
 
Delphi 10 Seattle Enterprise
 
#4

AW: hook -> variable von form1 in dll bestimmen

  Alt 27. Feb 2012, 22:00
Gar nicht, da die Dll im jweiligen Adressraum des anderen Prozesses geladen wird. Da hast du keinen Zugriff mehr auf deinen Speicherbereich. -> Lösung IPC
Es gibt doch aber noch die Möglichkeit des CallBacks
Kaum macht man's richtig - schon funktioniert's
Zertifikat: Sir Rufo (Fingerprint: ‎ea 0a 4c 14 0d b6 3a a4 c1 c5 b9 dc 90 9d f0 e9 de 13 da 60)
  Mit Zitat antworten Zitat
Benutzerbild von himitsu
himitsu

Registriert seit: 11. Okt 2003
Ort: Elbflorenz
43.247 Beiträge
 
Delphi 12 Athens
 
#5

AW: hook -> variable von form1 in dll bestimmen

  Alt 27. Feb 2012, 22:18
Abgesehn davon:

DLL und EXE haben ihre eigene RTTI und deswegen tut man überhaupt nicht grenzübergreifend (EXE<>DLL / DLL<>DLL) auf Objekte des anderen Seite zugreifen.

(selbst wenn hier, wie bereits genannt, auch noch Prozessgrenze dazukommt)
Garbage Collector ... Delphianer erzeugen keinen Müll, also brauchen sie auch keinen Müllsucher.
my Delphi wish list : BugReports/FeatureRequests
  Mit Zitat antworten Zitat
UliBru

Registriert seit: 10. Mai 2010
155 Beiträge
 
Delphi 11 Alexandria
 
#6

AW: hook -> variable von form1 in dll bestimmen

  Alt 28. Feb 2012, 07:42
Wenn ich mir den JVCL Plugin-Manager anschaue, z.B. das Beispielprojekt JvPlugin - ChangingProperties, dann zeigt das doch wie so was geht.
Oder liege ich da falsch?
  Mit Zitat antworten Zitat
Blup

Registriert seit: 7. Aug 2008
Ort: Brandenburg
1.440 Beiträge
 
Delphi 10.4 Sydney
 
#7

AW: hook -> variable von form1 in dll bestimmen

  Alt 1. Mär 2012, 10:01
Deiner DLL wird bereits ein WindowHandle übergeben, ist dieses das Handle der Form1 kannst du per SendMessage oder PostMessage komunizieren und die Variable so indirekt setzen. Eine andere Möglichkeit wäre ein Interface zu verwenden.
Delphi-Quellcode:
unit KeyboardF5;

type
  IKeyboardF5 = interface(IInterface)
    function GetF5Variable: Integer;
    procedure SetF5Variable(AValue: Integer);
  end

//---------

library jtdll;

uses
  Windows, Dialogs, Messages, KeyboardF5;

var
  HookHandle: Cardinal;
  KeyboardF5: IKeyboardF5;

function KeyboardHookProc(nCode: Integer; wParam: WPARAM; lParam: LPARAM): LRESULT; stdcall;
begin
  Result:=CallNextHookEx(HookHandle, nCode, wParam, lParam);
  case nCode<0 of
    True:
      Exit;
    False:
      begin
        if (wParam=VK_F5) and Assigned(KeyboardF5) then
          KeyboardF5.SetF5Variable(1);
      end;
  end;
end;

function InstallHook(AKeyboardF5: IKeyboardF5): Boolean; stdcall;
begin
  Result := (HookHandle = 0);
  if Result then
  begin
    HookHandle := SetWindowsHookEx(WH_KEYBOARD, @KeyboardHookProc, HInstance, 0);
    KeyboardF5 := AKeyboardF5;
  end;
end;

function UninstallHook: Boolean; stdcall;
begin
  Result := UnhookWindowsHookEx(HookHandle);
  HookHandle := 0;
  KeyboardF5 := nil;
end;

exports
  InstallHook,
  UninstallHook;

end.

//---------

unit Form1;

uses
  {...}
  KeyboardF5;

type
  TForm1 = class(TForm, IKeyboardF5)
    {...}
  private
    xyz: Integer;
    function GetF5Variable: Integer;
    procedure SetF5Variable(AValue: Integer);
  end;

implementation

function TForm1.GetF5Variable: Integer;
begin
  Result := xyz;
end;

procedure TForm1.SetF5Variable(AValue: Integer);
begin
  xyz := AValue;
end;

procedure TForm1.Show(Sender: TObject);
begin
  InstallHook(Self);
end;

procedure TForm1.Close(Sender: TObject);
begin
  UnInstallHook;
end;
  Mit Zitat antworten Zitat
Themen-Optionen Thema durchsuchen
Thema durchsuchen:

Erweiterte Suche
Ansicht

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 02:01 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