AGB  ·  Datenschutz  ·  Impressum  







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

Parameterübergabe mit SendMessage

Ein Thema von gsh · begonnen am 7. Jan 2009 · letzter Beitrag vom 7. Jan 2009
Antwort Antwort
Benutzerbild von gsh
gsh

Registriert seit: 24. Okt 2004
1.542 Beiträge
 
Delphi XE Architect
 
#1

Parameterübergabe mit SendMessage

  Alt 7. Jan 2009, 14:59
Hi

ich habe eine Anwendung die nur einmal gestartet werden darf. Wenn jetzt aber eine 2. Instanz mit Parameter gestartet wird, dann sollten die Parameter zuerst an die 1. Instanz geschickt werden und danach erst die Anwendung beendet werden.

Also hab ich gesucht und auch folgenden Code gefunden:
Delphi-Quellcode:
procedure TForm1.BitBtn1Click(Sender: TObject);
var
  MutexFensterHandle : THandle;
  S : String;
begin
  MutexFensterHandle := FindWindow('TForm1', 'TestAnwendung');
  if MutexFensterHandle <> 0 then
  begin
    S := 'Test';
    SendMessage(MutexFensterHandle, WM_ParamterSend, 0, DWORD(PChar(S)));
    SetForegroundWindow(MutexFensterHandle);
  end
  else Showmessage('Es ist ein Fehler beim finden des Fensterhandels aufgetreten');
end;
Delphi-Quellcode:
const
  WM_ParamterSend = WM_USER + 5;
[..]
procedure ParamterReceive(var msg: TMessage); message WM_ParamterSend;
[..]
procedure TForm1.ParamterReceive(var msg: TMessage);
begin
  msg.Result := 1;
  ShowMessage(PChar(msg.lParam));
end;
In meiner Testanwendung funktioniert der Code perfekt (Sendet die Nachricht an sich selber)
In meinem eigentlichen Programm bekomme ich aber nur eine paar kryptische Zeichen ausgegeben (2. Instanz sendet an 1. Instanz)

Meine Vermutung ist das nur der Pointer geschickt wird und dieser bei der 1. Instanz dann auf einen zufälligen Wert zeigt. Stimmt das? Wie kann ich das am besten Lösen?

Nur so zur Info das ist meine erste Verwendung von SendMessage also nicht böse sein wenn dies ganz einfach zu lösen ist
Alex
"Sage nicht alles, was du weißt, aber wisse alles, was du sagst!" Matthias Claudius
"Wer sich über Kritik ärgert, gibt zu, daß er sie verdient hat." Tacitus
  Mit Zitat antworten Zitat
Benutzerbild von SirThornberry
SirThornberry
(Moderator)

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

Re: Parameterübergabe mit SendMessage

  Alt 7. Jan 2009, 15:00
Du versendest nur einen Pointer. Innerhalb der Anwendung funktioniert das weil der Pointer eben auf das richtige zeigt. Sendest du es jedoch an eine andere Anwendung steht dort natürlich an entsprechender Stelle im Speicher etwas anderes.
Jens
Mit Source ist es wie mit Kunst - Hauptsache der Künstler versteht's
  Mit Zitat antworten Zitat
Benutzerbild von Bernhard Geyer
Bernhard Geyer

Registriert seit: 13. Aug 2002
17.196 Beiträge
 
Delphi 10.4 Sydney
 
#3

Re: Parameterübergabe mit SendMessage

  Alt 7. Jan 2009, 15:10
Such mal im Forum nach WM_COPYDATA. Über diese Windows-Message können mehr Infos ausgetauscht werden.
Windows Vista - Eine neue Erfahrung in Fehlern.
  Mit Zitat antworten Zitat
Benutzerbild von gsh
gsh

Registriert seit: 24. Okt 2004
1.542 Beiträge
 
Delphi XE Architect
 
#4

Re: Parameterübergabe mit SendMessage

  Alt 7. Jan 2009, 15:27
Zitat von SirThornberry:
Du versendest nur einen Pointer. Innerhalb der Anwendung funktioniert das weil der Pointer eben auf das richtige zeigt. Sendest du es jedoch an eine andere Anwendung steht dort natürlich an entsprechender Stelle im Speicher etwas anderes.
ok dann war meine Vermutung korrekt


Zitat von Bernhard Geyer:
Such mal im Forum nach WM_COPYDATA. Über diese Windows-Message können mehr Infos ausgetauscht werden.
diese habe ich bereits im Forum gefunden aber nicht ganz verstanden. Werd mich aber gleich noch mal dran sitzen und es nochmal versuchen.
Alex
"Sage nicht alles, was du weißt, aber wisse alles, was du sagst!" Matthias Claudius
"Wer sich über Kritik ärgert, gibt zu, daß er sie verdient hat." Tacitus
  Mit Zitat antworten Zitat
Benutzerbild von gsh
gsh

Registriert seit: 24. Okt 2004
1.542 Beiträge
 
Delphi XE Architect
 
#5

Re: Parameterübergabe mit SendMessage

  Alt 7. Jan 2009, 15:56
Danke ich hab jetzt folgendes gefunden: http://www.delphipraxis.net/internal...ect.php?t=2832
Mit dem konnte ich es bei mir zum laufen bekommen
Alex
"Sage nicht alles, was du weißt, aber wisse alles, was du sagst!" Matthias Claudius
"Wer sich über Kritik ärgert, gibt zu, daß er sie verdient hat." Tacitus
  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: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