Delphi-PRAXiS
Seite 1 von 2  1 2      

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Win32/Win64 API (native code) (https://www.delphipraxis.net/17-win32-win64-api-native-code/)
-   -   Delphi Warum funktionieren meine Messages nicht? (https://www.delphipraxis.net/117155-warum-funktionieren-meine-messages-nicht.html)

Masteric 12. Jul 2008 23:50


Warum funktionieren meine Messages nicht?
 
Hi,

also ich habe das mit dem Hooken hinbekommen, so jetzt möchte ich die Daten die der Hook abfaängt an meine Anwendung über Messages senden, es kommt nur, wie wahrscheinlich erwartet, nichts an.

Ich habe dann um es überhaupt zu testen noch eine 2. Anwendung programmiert.

Die Erste, die die Daten erstmal nur Empfangen und in einem Edit anzeigen soll, sieht so aus:

Delphi-Quellcode:
unit Unit1;

interface

uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, StdCtrls;

const WM_mymessage=WM_User+2;

type
  TForm1 = class(TForm)
    Edit1: TEdit;
  private
    procedure WndProc(var msg : TMessage); override;
      { Private-Deklarationen }
  public
       { Public-Deklarationen }
  end;

var
  Form1: TForm1;

implementation

{$R *.dfm}

procedure TForm1.WndProc(var msg : TMessage);
begin
  if msg.Msg = WM_mymessage then
  begin
    Edit1.Text:=inttostr(msg.WParam);
  end else begin
    inherited WndProc(msg);
  end;
end;

end.
Die Zweite, die ich zum testen benutze sieht so aus:

Delphi-Quellcode:
unit Unit1;

interface

uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs;
const WM_mymessage=WM_User+2;
type
  TForm1 = class(TForm)
    procedure FormCreate(Sender: TObject);
  private
    { Private-Deklarationen }
  public
    { Public-Deklarationen }
  end;

var
  Form1: TForm1;

implementation

{$R *.dfm}

procedure TForm1.FormCreate(Sender: TObject);
begin
postmessage(HWND_BROADCAST,WM_mymessage,5,5);
end;

end.
Da ich das Fensterhandle der Anwendung nicht immer rausfinden will, broadcaste ich sie einfach an alle. Eigentlich sollte doch jetzt im Edit 1 eine Message ankommen, wenn das Empfangsprogramm läuft und das 2. gestartet wird, oder?

Gruß Materic

Flips 13. Jul 2008 00:18

Re: Warum funktionieren meine Messages nicht?
 
Hi,

also ich bin nich so der Fachmann für Messages, aber ich glaube nicht, dass sie für den Datenverkehr bzw. den Austausch größerer Datenmengen konzipiert wurden ;-)
Da eignen sich eher Hier im Forum suchenMemory Mapped Files (Hier im Forum suchenMMF).
Oder du suchst mal nach Hier im Forum suchenWM_SETTEXT.

1234588 13. Jul 2008 02:14

Re: Warum funktionieren meine Messages nicht?
 
mit HWND_BROADCAST sendest du die message eben nicht an alle fenster. folgendes hab ich hier dazu gefunden:
http://www.delphipraxis.net/internal...ct.php?t=87443

Zitat:

also ich bin nich so der Fachmann für Messages, aber ich glaube nicht, dass sie für den Datenverkehr bzw. den Austausch größerer Datenmengen konzipiert wurden
das ist richtig. aber einen 4 byte großen integer sehe ich nicht als riesen datenmenge an :P

Luckie 13. Jul 2008 10:36

Re: Warum funktionieren meine Messages nicht?
 
Zitat:

Zitat von 1234588
mit HWND_BROADCAST sendest du die message eben nicht an alle fenster.

Natürlich wird eine Nachtricht mit dem Adressaten HWND_BROADCAST an alle Toplevel Fenster geschickt. Nur leider macht ihm hier die VCL einen Strich durch die Rechnung mit dem unsichtbaren Anwendungsfenster, welches bei einer VCL-Anwendung das Hauptfenster ist.

Masteric 13. Jul 2008 10:44

Re: Warum funktionieren meine Messages nicht?
 
ist den der Empfang der Messages richtig? Weil selbst wenn ich genau an das Handle des Fensters sende, kommt nichts an....

Luckie 13. Jul 2008 10:46

Re: Warum funktionieren meine Messages nicht?
 
Das Empfangen dürfte passen, aber stimmt auch das Handle?

Masteric 13. Jul 2008 10:48

Re: Warum funktionieren meine Messages nicht?
 
ich habe via Winspy das handle des Form1 rausgesucht, ist das falsch? Weil ya das Hauptfenster unsichtbar ist?

EDIT: Okay muss mich korrigieren, jetzt geht es mit dem richtigen Handle, nur wie mache ich das, wenn ich das nicht weis.....

_frank_ 13. Jul 2008 10:56

Re: Warum funktionieren meine Messages nicht?
 
wie "unsichtbar" ist es? per hide oder minimiert?

evtl. ist ja TApplication.OnMessage was für dich, hat mir schon öfters bei solchen Sachen geholfen...

das handle kann du z.B. mittels Hier im Forum suchenFindWindow oder Hier im Forum suchenEnumWindows herausfinden.

//edit irgendwie war nur der halbe Text sichtbar...hier beim editieren steht alles :gruebel:

HTH Frank

Luckie 13. Jul 2008 10:57

Re: Warum funktionieren meine Messages nicht?
 
Such dein Fenster mit MSDN-Library durchsuchenFindWindow.

extrem 13. Jul 2008 11:09

Re: Warum funktionieren meine Messages nicht?
 
Zitat:

Zitat von Masteric
EDIT: Okay muss mich korrigieren, jetzt geht es mit dem richtigen Handle, nur wie mache ich das, wenn ich das nicht weis.....

In Beitrag #3 wurde dir ein Link genannt, wo es mit HWND_BROADCAST funktioniert. Mit FindWindow bei sowas zu machen wäre mir viel zu primitiv.
Wenn du mit HWND_BROADCAST arbeiten möchtest dann benutze RegisterWindowMessage(), außerdem wäre es notwendig, wenn du die Nachricht mit der Komponente TApplicationEvents im Ereignis onMessage abfängst.


Alle Zeitangaben in WEZ +1. Es ist jetzt 07:09 Uhr.
Seite 1 von 2  1 2      

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