AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein Win32/Win64 API (native code) Text (Pfadangabe) per Windows Message verschicken
Thema durchsuchen
Ansicht
Themen-Optionen

Text (Pfadangabe) per Windows Message verschicken

Ein Thema von lbccaleb · begonnen am 7. Mai 2009 · letzter Beitrag vom 17. Mai 2009
Antwort Antwort
Seite 1 von 3  1 23      
Benutzerbild von lbccaleb
lbccaleb

Registriert seit: 25. Mai 2006
Ort: Rostock / Bremen
2.037 Beiträge
 
Delphi 7 Enterprise
 
#1

Text (Pfadangabe) per Windows Message verschicken

  Alt 7. Mai 2009, 20:35
Hallo,

ist es möglich Text per eigene Message zu verschicken und dabei nicht WM_COPYDATA zu nutzen??

Habe schon das hier gefunden:

Send Message


aber das ist nicht das wahre, da er ab und zu nur Kaudawelsch bekommt! Oder liegts an mir??
Martin
MFG Caleb
TheSmallOne (MediaPlayer)
Die Dinge werden berechenbar, wenn man die Natur einer Sache durchschaut hat (Blade)
  Mit Zitat antworten Zitat
oki

Registriert seit: 30. Dez 2002
Ort: Brandshagen
1.819 Beiträge
 
Delphi 2007 Professional
 
#2

Re: Text (Pfadangabe) per Windows Message verschicken

  Alt 7. Mai 2009, 21:02
Reservier den notwendigen Speicher und übergib den Zeiger in LParam oder WParam. Dein Beispiel ist aber auch nichts anderes. Das gilt natürlich auch für Zeiger auf Records oder Instancen von Klassen (also Objekte).

Gruß oki
42
  Mit Zitat antworten Zitat
Benutzerbild von lbccaleb
lbccaleb

Registriert seit: 25. Mai 2006
Ort: Rostock / Bremen
2.037 Beiträge
 
Delphi 7 Enterprise
 
#3

Re: Text (Pfadangabe) per Windows Message verschicken

  Alt 7. Mai 2009, 21:17
Wie soll ich den speicher reservieren? In der anderen Anwendung weiß ich ja nicht wie groß der Text ist, der dort ankommt? Oder hab ich gerade nur ne Denkblockade?
Martin
MFG Caleb
TheSmallOne (MediaPlayer)
Die Dinge werden berechenbar, wenn man die Natur einer Sache durchschaut hat (Blade)
  Mit Zitat antworten Zitat
Benutzerbild von himitsu
himitsu

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

Re: Text (Pfadangabe) per Windows Message verschicken

  Alt 7. Mai 2009, 21:25
nja, direkt Speicher reservieren mußt du nicht ... du mußt nur einen Zeiger auf die geünschten Daten verschicken und beim Empfänger ab dieser Adresse die Daten auslesen (wenn es ein anderer Prozeß ist, dann z.B. per MSDN-Library durchsuchenReadProcessMemory)
$2B or not $2B
  Mit Zitat antworten Zitat
oki

Registriert seit: 30. Dez 2002
Ort: Brandshagen
1.819 Beiträge
 
Delphi 2007 Professional
 
#5

Re: Text (Pfadangabe) per Windows Message verschicken

  Alt 7. Mai 2009, 21:30
Joop, so wie himitsu es beschreibt. Eigentlich ist jede Variable auch ein Zeiger auf eine Speicherstelle. Der Witz ist nur, ob dieser Zeigen auch noch gültig ist wenn die Message ankommt. Bei einer lokalen Variable sehe ich das sehr kritisch.
Die Verwendung von SendMessage kommt nicht von Ohne. SendMessage wartet eigentlich auf die Ausführung und kehrt nach der Ausführung wieder zurück. Damit sollte eigentlich nichts schief gehen. Vertrauen würd ich darauf jetzt aber nicht.

Gruß oki
42
  Mit Zitat antworten Zitat
Benutzerbild von lbccaleb
lbccaleb

Registriert seit: 25. Mai 2006
Ort: Rostock / Bremen
2.037 Beiträge
 
Delphi 7 Enterprise
 
#6

Re: Text (Pfadangabe) per Windows Message verschicken

  Alt 7. Mai 2009, 21:45
Ich hab jetzt noch eine Möglichkeit gefunden das mit der GlobalAtom Function von Windows zu machen! Ist das eine gute lösung oder sollte ich davon lieber die Finger lassen? Hab nicht wirklich nen Schimmer wozu genau diese GlobalAtom Function ist oO
Martin
MFG Caleb
TheSmallOne (MediaPlayer)
Die Dinge werden berechenbar, wenn man die Natur einer Sache durchschaut hat (Blade)
  Mit Zitat antworten Zitat
oki

Registriert seit: 30. Dez 2002
Ort: Brandshagen
1.819 Beiträge
 
Delphi 2007 Professional
 
#7

Re: Text (Pfadangabe) per Windows Message verschicken

  Alt 7. Mai 2009, 21:55
Damit kannst du sozusagen einen systemweiten Wert registrieren (oder so). Das ist aber eher nicht dein Weg. Mehr mit Kanonen auf Spatzen geschossen.

Mußt du denn unbedingt SendMessage verwenden? Trotzdem sollte das mit dem PChar im Param klappen. Wenn dabei Mist raus kommt, dann ist dein Zeiger ungültig geworden oder an einer anderen Stelle schmiert was über den Speicher.

Gruß oki
42
  Mit Zitat antworten Zitat
Benutzerbild von lbccaleb
lbccaleb

Registriert seit: 25. Mai 2006
Ort: Rostock / Bremen
2.037 Beiträge
 
Delphi 7 Enterprise
 
#8

Re: Text (Pfadangabe) per Windows Message verschicken

  Alt 7. Mai 2009, 22:09
Zitat von oki:
Mußt du denn unbedingt SendMessage verwenden? Trotzdem sollte das mit dem PChar im Param klappen. Wenn dabei Mist raus kommt, dann ist dein Zeiger ungültig geworden oder an einer anderen Stelle schmiert was über den Speicher.

Gruß oki
Wieso? Was sollte ich sonnst verwenden? Ich schicke eine Pfadangabe als PChar in eine andere instanz der selben Anwendung (in dem Fall die Hauptinstanz) in welcher bei ankunft der Message was der Pfad (in dem Fall ne Medien Datei) abgespielt werden soll!

Messages währen eigentlich genau das richtige denke ich
Martin
MFG Caleb
TheSmallOne (MediaPlayer)
Die Dinge werden berechenbar, wenn man die Natur einer Sache durchschaut hat (Blade)
  Mit Zitat antworten Zitat
Muetze1
(Gast)

n/a Beiträge
 
#9

Re: Text (Pfadangabe) per Windows Message verschicken

  Alt 7. Mai 2009, 23:11
Nutze dazu u.a. die GlobalLock() Funktion. Du versendest das Handle und jede Anwendung holt sich den Zeiger für den Zugriff mit GlobalLock.
  Mit Zitat antworten Zitat
Benutzerbild von lbccaleb
lbccaleb

Registriert seit: 25. Mai 2006
Ort: Rostock / Bremen
2.037 Beiträge
 
Delphi 7 Enterprise
 
#10

Re: Text (Pfadangabe) per Windows Message verschicken

  Alt 8. Mai 2009, 06:21
Habs jetzt so gelöst, aber irgendwie bekomme ich immer nur die ersten 3 Zeichen von der Pfandangabe! Was ist da noch falsch?


Delphi-Quellcode:
procedure GlobalAllocFileName(aWnd: HWND; aText: String);
var
  Data: THandle;
  DataPtr: Pointer;
  Size: Integer;
  oldWND: HWND;
begin
  Size := Length(aText) + 1;

    Data := GlobalAlloc(GMEM_MOVEABLE or GMEM_DDESHARE, Size);
    try
      DataPtr := GlobalLock(Data);
      try
        Move(PChar(aText)^, DataPtr^, Size);
            PostMessage(aWnd, WM_TSOPLAYFILE, INTEGER(dataptr^), 0)

      finally
        GlobalUnlock(Data);
      end;
    except
      GlobalFree(Data);
      raise;
    end;
end;
Den Code hab ich mehr oder weniger hier aus dem Forum!
Martin
MFG Caleb
TheSmallOne (MediaPlayer)
Die Dinge werden berechenbar, wenn man die Natur einer Sache durchschaut hat (Blade)
  Mit Zitat antworten Zitat
Antwort Antwort
Seite 1 von 3  1 23      


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 12:16 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