AGB  ·  Datenschutz  ·  Impressum  







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

MMF und FindWindow

Ein Thema von Arnulf · begonnen am 3. Mai 2005 · letzter Beitrag vom 4. Mai 2005
Antwort Antwort
Seite 1 von 2  1 2      
Arnulf

Registriert seit: 28. Okt 2004
Ort: Wien
271 Beiträge
 
#1

MMF und FindWindow

  Alt 3. Mai 2005, 19:58
Hi
Ich verwende mmf um von einer .dll in einem fremden prozess daten zu übertragen.
Der server wird in meiner Application erstellt und ich such mit der .dll in einem anderen Prozess dann den windowhandle mit FindWindow.

Jetzt hab ich aber das Problem, daß meine Application die Caption jeh nach version ändert.
Ich hab versucht den Formnamen zu ändern, aber FindWindow dürfte nach der Caption suchen.

Gibt es hier eine andere Möglichkeit wo ich die Caption des Fensters mit Versionsnummer anzeigen lassen kann aber trotzdem per mmf daten übertragen kann ohne jedesmal die .dll neu zu kompilieren?

Danke
Arnulf

Edit:
Eigentlich würde ich gerne das handle meines Fensters bekommen ohne der Caption - also auch nicht Teile davon.
Mit enumwindow oder ähnlichen methoden könnte ich ja selbst nach dem Namen Prüfen.
Wenn das Unmöglich ist, dann mach ich es hald mit enumwindows.
  Mit Zitat antworten Zitat
NicoDE
(Gast)

n/a Beiträge
 
#2

Re: MMF und FindWindow

  Alt 3. Mai 2005, 20:42
Sieh' Dir mal RegisterWindowMessage an.
(ansonsten würde ich nach 'fensterlosen' Alternativen (zB Events) Ausschau halten)
  Mit Zitat antworten Zitat
Arnulf

Registriert seit: 28. Okt 2004
Ort: Wien
271 Beiträge
 
#3

Re: MMF und FindWindow

  Alt 3. Mai 2005, 20:59
Ach du meinst ich verwende HWND_BROADCAST und in dem zusammenhang dann einen GUID string mit registerwindowsmessage.
Das ist natürlich eine idee, weil dann eh nur mein Programm reagiert

Gute Idee damit spar ich mir den handle vom window.

Gibts für pipes auch so möglichkeiten? <--- obwohl ich noch weit davon entfernt bin pipes zu verwenden

Danke jedenfalls
Arnulf

Edit: Ups jetzt hätte ich fast vergessen - wo finde ich in Delphi die möglichkeit einen GUID zu erstellen?
Ich such die funktion aber nix gefunde bisher ... das soll ja gehen?
  Mit Zitat antworten Zitat
Benutzerbild von dizzy
dizzy

Registriert seit: 26. Nov 2003
Ort: Lünen
1.932 Beiträge
 
Delphi 7 Enterprise
 
#4

Re: MMF und FindWindow

  Alt 3. Mai 2005, 21:29
Zitat von Arnulf:
wo finde ich in Delphi die möglichkeit einen GUID zu erstellen?
Ich such die funktion aber nix gefunde bisher ... das soll ja gehen?
Im Editor: [Strg]+[Shift]+[g]
Fabian K.
INSERT INTO HandVonFreundin SELECT * FROM Himmel
  Mit Zitat antworten Zitat
Arnulf

Registriert seit: 28. Okt 2004
Ort: Wien
271 Beiträge
 
#5

Re: MMF und FindWindow

  Alt 3. Mai 2005, 21:56
Man das geht heut schnell lol - danke das brauch ich sicher noch öfter.

aber mir ist bei der Theorie etwas anderes aufgefallen.
ich schicke ja jetzt mit broadcast eine message an alle fenster.
SendMessage (HWND_BROADCAST, msgid, 0, 0); msgid ist praktisch mein guid mit RegisterWindowMessage

beim server warte ich auf eine message und kopier mir dann die daten aus dem mmf (event).

Aber wie deklarier ich dann die message auf die ich warte?
procedure Empfang(var AMsg: TMessage); message RegisterWindowMessage('guidstring'); das funktioniert ja wohl nicht ganz
oder bin ich doch nicht so schlau und hab das prinzip doch falsch verstanden?

Arnulf
  Mit Zitat antworten Zitat
Christian Seehase
(Co-Admin)

Registriert seit: 29. Mai 2002
Ort: Hamburg
11.117 Beiträge
 
Delphi 11 Alexandria
 
#6

Re: MMF und FindWindow

  Alt 3. Mai 2005, 22:49
Moin Arnulf,

überschreib' doch ganz allgemein die WndProc.
Dort kannst Du dann auch eine Message in einer Variablen prüfen.
Tschüss Chris
Die drei Feinde des Programmierers: Sonne, Frischluft und dieses unerträgliche Gebrüll der Vögel.
Der Klügere gibt solange nach bis er der Dumme ist
  Mit Zitat antworten Zitat
Benutzerbild von Sprint
Sprint

Registriert seit: 18. Aug 2004
Ort: Edewecht
712 Beiträge
 
Delphi 5 Professional
 
#7

Re: MMF und FindWindow

  Alt 3. Mai 2005, 22:55
Delphi-Quellcode:
type
  TForm1 = class(TForm)
  ...
  private
    { Private-Deklarationen }
    WndMsg: UINT;
    procedure AppMsg(var Msg: TMsg; var Handled: Boolean);
  ...
  end;
Delphi-Quellcode:
{--------------------------------------------------------------------------------------------------}

procedure TForm1.FormCreate(Sender: TObject);
begin

  Application.OnMessage := AppMsg;
  WndMsg := RegisterWindowMessage('{950D0522-8C50-4FB7-BB30-734E5F6AE7D4}');

end;

{--------------------------------------------------------------------------------------------------}

procedure TForm1.AppMsg(var Msg: TMsg; var Handled: Boolean);
begin

  if Msg.message = WndMsg then
  begin
    ShowMessage('test');
    Handled := True;
  end else
    Handled := False;

end;

{--------------------------------------------------------------------------------------------------}

procedure TForm1.Button1Click(Sender: TObject);
begin

  PostMessage(HWND_BROADCAST, WndMsg, 0, 0);

end;

{--------------------------------------------------------------------------------------------------}
Ciao, Sprint.

"I don't know what I am doing, but I am sure I am having fun!"
  Mit Zitat antworten Zitat
Arnulf

Registriert seit: 28. Okt 2004
Ort: Wien
271 Beiträge
 
#8

Re: MMF und FindWindow

  Alt 4. Mai 2005, 00:04
olala - das versteh sogar ich

So ergibt das natürlich mehr Sinn
und das oben hätte natürlich
procedure Empfang(var AMsg: TMessage); message wm_user + RegisterWindowMessage('guidstring'); auch wenn es völliger unsinn war.
Danke, bin schon am ausprobieren...

Oh bevor ich den Thread abschließe. Sollte jemand darauf stoßen und sich fragen was das mit mmf zu tun hat.
Kurz gesagt:
MMF ist ein im speicher liegendes file (eigentlich ein pointer zu ner 4k page wie es microsoft sagt).
Man kann das auch für IPC nutzen wenn man dem MMF $ffffffff (0xffffffff) als handle gibt.

MMFileHandle := CreateFileMapping($ffffffff, nil, PAGE_READWRITE, 0, 7, 'Name des files'); CreatefileMapping muß man einmal in einem prozess aufrufen um den Handle zu bekommen.
Danach kann man OpenFileMapping verwenden.

Aufpassen sollte man nur, wenn man das in einer .dll verwendet, weil eine .dll leicht von mehreren prozessen geladen wird, und jeder prozess der die library ladet dann praktisch CreateFileMapping aufrufen würde .

Jetzt ist das hald so zu behandeln wie ein File.
Also kann man entweder immer wieder nachschauen was da drin steht, oder man läßt dem prozess eine windows message zukommen die ihn dann informieren soll, daß etwas drin liegt (wenn man es für IPC verwendet).
Und hier kommt sendmessage ins Spiel - das soll praktisch den Read event auslösen am anderen ende des computers.
Wenn man das nicht event gesteuert macht, muß man wohl die daten immer wieder löschen ( überschreiben ) um nicht ständig das gleiche auszulesen.
Das funktioniert Natürlich in beide Richtungen - macht dann aber keinen sinn und ist nur kompliziert, dann muß man sich wohl mit Pipes auseinandersetzen.

So hab ichs verstanden - hoffe das stimmt und hilft anderen überhaupt zu begreifen worum es geht.
source code findet man genug hier im forum aber theorie hat mir dazu gefehlt.

Danke an alle helfenden Hände.

Arnulf
  Mit Zitat antworten Zitat
NicoDE
(Gast)

n/a Beiträge
 
#9

Re: MMF und FindWindow

  Alt 4. Mai 2005, 10:42
RegisterWindowMessage gibt zur Laufzeit immer eine andere ID zurück.
Du müßtest also den DefaultHandler (siehe Hilfe) überschreiben um die Nachricht zu behandeln.
  Mit Zitat antworten Zitat
Arnulf

Registriert seit: 28. Okt 2004
Ort: Wien
271 Beiträge
 
#10

Re: MMF und FindWindow

  Alt 4. Mai 2005, 11:05
ok - das war mir wieder zu kryptisch.

Zitat:
MSDN: The RegisterWindowMessage function is typically used to register messages for communicating between two cooperating applications.
If two different applications register the same message string, the applications return the same message value. The message remains registered until the Windows session ends.
Oder meinst du mit default handle den handle für messages also so wie es oben gepostet wurde?
 Application.OnMessage := AppMsg; Damit man eben die msg registrieren kann?
Ansonsten gibt RegisterWindowMessage schon immer die gleiche zahl zurück in der gleichen windows session zumindestens laut hilfe.
Bin hald nicht ganz sicher was du meinst

Arnulf
  Mit Zitat antworten Zitat
Antwort Antwort
Seite 1 von 2  1 2      


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 13:19 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