AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein Win32/Win64 API (native code) Delphi Fensterbotschaften(Window Messages) auslesen
Thema durchsuchen
Ansicht
Themen-Optionen

Fensterbotschaften(Window Messages) auslesen

Ein Thema von Metal_Snake2 · begonnen am 29. Jul 2006 · letzter Beitrag vom 31. Jul 2006
Antwort Antwort
Metal_Snake2

Registriert seit: 19. Nov 2004
134 Beiträge
 
Delphi 7 Personal
 
#1

Fensterbotschaften(Window Messages) auslesen

  Alt 29. Jul 2006, 15:51
moin,

Wie kann ich mit einem Hook es hinkriegen alle Messages von Benutzer Prozesses auszulesen und einfach zu Protokolieren.
Mein ziel ist es wie das Proggie Wininspector Spy diw Window Messages zu Sniffen.

Reicht dazu SetWindowsHookEx ? Oder sollte ich es mit dll-injection mit hilfe der komponente von Madishi versuchen?
Hat einer eine idee wie ich das könnte?
  Mit Zitat antworten Zitat
peanut
(Gast)

n/a Beiträge
 
#2

Re: Fensterbotschaften(Window Messages) auslesen

  Alt 30. Jul 2006, 17:20
Hallo,

ich würde in einer DLL mittels

  HookHandle := SetWindowsHookEx(WH_GETMESSAGE, @HookProc, hInstance, 0); nen hook setzen und dann die Nachrichten in der HookProc loggen:

Delphi-Quellcode:
function HookProc(nCode: Integer; wParam: WPARAM; lParam: LPARAM): LRESULT; stdcall;
var
  AMessage: PMSG;
begin
  AMessage := PMSG(lParam);
  // in AMessage^.message steht dann die Nachricht
end;
Gruß peanut.
  Mit Zitat antworten Zitat
Metal_Snake2

Registriert seit: 19. Nov 2004
134 Beiträge
 
Delphi 7 Personal
 
#3

Re: Fensterbotschaften(Window Messages) auslesen

  Alt 31. Jul 2006, 00:14
hi peanut danke für deine antwort,

also ich habe jetzt folgednes schonmal gemacht:

Dll:

Delphi-Quellcode:
library
  WndMsgSniffer;

  uses
  Windows,
  Messages;

Type
  tag = record
    LPARAM :lParam;
    WPARAM :wParam;
    message:Cardinal;
    HWND :hwnd;
end;
PMsg = ^Tag;

var
  HookHandle :Cardinal;
  TargetWindowHandle:Cardinal;
  OwnWindowHandle :Cardinal;

function GetMsgProc(code: integer; wParam: WPARAM; lParam: LPARAM): LResult; stdcall;
var
  var aCopy:TCopyDataStruct;
begin
  if (code < 0) Then
    exit
  else
    begin
     {IPC zeugs}
     with aCopy do
       begin
         dwData := PMsg(lparam).Message
         cbData := 0;
         lpData := nil;
      end;
      SendMessage(ApplicationHandle, WM_COPYDATA, Longint(HookHandle),LongInt(@aCopy));
  end;
  Result := CallNextHookEx(HookHandle, Code, wparam, lparam);
end;

function InstallHooks(Hwnd: Cardinal;OwnHwnd:Cardinal): Boolean; stdcall;
begin
  TargetWindowHandle:=Hwnd; //Handle des zu schützenden Fensters
  OwnWindowHandle:=OwnHwnd; //Handle des Hauptprogramm-Fensters

  HookHandle := SetWindowsHookEx(WH_GETMESSAGE, GetMsgProc, hinstance, GetWindowThreadProcessId(TargetWindowHandle));
  Result:=Hookhandle<>0;
end;

function UninstallHooks: Boolean; stdcall;
begin
  result:=UnHookWindowsHookEx(HookHandle);
end;

exports
  InstallHooks,
  UninstallHooks;

begin

end.


Hauptfenster:

Delphi-Quellcode:

[...]
  private
    procedure HandleMessage(var Message: TWMCopyData);
[...]

var
  Form1: TForm1;



implementation

  function InstallHooks(Hwnd: THandle;OwnHwnd:Cardinal): Boolean; stdcall; external 'WndMsgSniffer.dll';
  function UninstallHooks: Boolean; stdcall;external 'WndMsgSniffer.dll';

{$R *.dfm}

//ipc nachrichten empfangen
procedure TForm1.HandleMessage(var Message: TWMCopyData);
begin
  listbox1.items.add(IntToStr(Message.CopyDataStruct.dwData));
end;


procedure TForm1.FormCreate(Sender: TObject);
var
  Targethandle: Thandle;
begin
  //nur zum testen
  Targethandle:= FindWindow(PChar('Notepad'),PChar('Unbenannt - editor'));
  SetForegroundWindow(targethandle);

  if InstallHooks(Targethandle,application.handle) then //Hooks installieren.
    ShowMessage('Installed Successfully.');

end;
Nur leider funzt es nicht,
in der listbox wird leider reingarnix eingetragen, nein ich bekomme selbst nicht mal die "Installed Successfully" nachricht.
bin jetzt verzeifelt.........was habe ich falsch gemacht??

danke für weitere antworten.
  Mit Zitat antworten Zitat
Benutzerbild von SirThornberry
SirThornberry
(Moderator)

Registriert seit: 23. Sep 2003
Ort: Bockwen
12.235 Beiträge
 
Delphi 2006 Professional
 
#4

Re: Fensterbotschaften(Window Messages) auslesen

  Alt 31. Jul 2006, 00:20
schau dir mal die hilfe zu "SetWindowsHookEx" an und vor allem den letzten parameter. Zudem sollte dir klar sein das bei einem Hook die DLL in jedem Prozess erneut geladen wird wird. Somit geht es nicht das du innerhalb der DLL einfach an das Window nachrichten schickst was in einer anderen DLL instanz gesetzt wurde. Denn dieses Handle wurde eben in einer anderen DLL instanz gesetzt und nicht in jeder.
Jens
Mit Source ist es wie mit Kunst - Hauptsache der Künstler versteht's
  Mit Zitat antworten Zitat
Metal_Snake2

Registriert seit: 19. Nov 2004
134 Beiträge
 
Delphi 7 Personal
 
#5

Re: Fensterbotschaften(Window Messages) auslesen

  Alt 31. Jul 2006, 00:50
sry ich werd nicht ganz draus schlau...ich werd mir mal das tut von olli reinziehen.
aber irgendwie komme ich nicht weiter.
  Mit Zitat antworten Zitat
peanut
(Gast)

n/a Beiträge
 
#6

Re: Fensterbotschaften(Window Messages) auslesen

  Alt 31. Jul 2006, 22:41
Hallo Metal_Snake2,

Du musst im hook irgendwo an das Handle Deines Programms kommen, damit SendMessage überhaupt eine Wirkung hat (oder steckt das schon in ApplicationHandle ?). Um Dir IPC zu ersparen, kannst Du das Handle des Spys ja irgendwo in der Registry ablegen. Ist vielleicht nicht all zu schön, aber der Zweck heiligt ja bekanntermaßen die Mittel . Außerdem musst Du aufpassen, dass der Hook in Deinem Spy keine Nachrichten versendet, sonst wirst Du endlos mit Nachrichten bombardiert...

Was Du mit HandleMessage machst, verstehe ich nicht? Ich hätte das wie folgt gelöst:


Delphi-Quellcode:
[...]
  private
    procedure WndProc(var Message:TMessage); override;
[...]

procedure TForm1.WndProc(var Message:TMessage);
begin
  if Message.Msg = WM_COPYDATA then
  begin
    Memo1.Lines.Add('WM_COPYDATA');
    [...]
  end;

  inherited;
end;
Grüße peanut.
  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 06:54 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