AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein Win32/Win64 API (native code) Delphi Zeichenkette mit SendMessage verschicken und empfangen
Thema durchsuchen
Ansicht
Themen-Optionen

Zeichenkette mit SendMessage verschicken und empfangen

Ein Thema von Luckie · begonnen am 26. Sep 2003 · letzter Beitrag vom 20. Feb 2006
Antwort Antwort
Seite 1 von 2  1 2      
Benutzerbild von Luckie
Luckie

Registriert seit: 29. Mai 2002
37.621 Beiträge
 
Delphi 2006 Professional
 
#1

Zeichenkette mit SendMessage verschicken und empfangen

  Alt 26. Sep 2003, 08:42
Also ich verschicke so:
SendMessage(hWnd, CEM_COPIEDFILE, MAKEWPARAM(Word(bSuccess), i), Integer(@SourceFilename[1])); den Zeiger auf eine Speicheradresse an der eine Zeichenkette steht. Das ganze geschieht aus einer Prozedur meines Prozesses. Wer mit denkt, weiß bestimmt, was jetzt kommt. Wie empfange ich das jetzt wieder?
Delphi-Quellcode:
procedure TForm1.Wndproc(var msg: TMessage);
var
  Filename: String;
begin
  case msg.Msg of
    CEM_COPIEDFILE:
      begin
        Filename := ???;
Die Adresse der Zeichenkette steht ja im lParam. Aber wie komme ich jetzt an den tatsächlichen Inhalt ran?

Immer diese Zeiger. Ich glaube, ich werde Metzger, dann kann ich wemfalls noch blöde TV Shows machen.
Michael
Ein Teil meines Codes würde euch verunsichern.
  Mit Zitat antworten Zitat
Benutzerbild von sakura
sakura

Registriert seit: 10. Jun 2002
Ort: München
11.412 Beiträge
 
Delphi 11 Alexandria
 
#2

Re: Zeichenkette mit SendMessage verschicken und empfangen

  Alt 26. Sep 2003, 08:49
Wie wäre der Versuch: FileName := String(PChar(Pointer(msg.lParam)));

......
Daniel W.
Ich bin nicht zurück, ich tue nur so
  Mit Zitat antworten Zitat
Basilikum

Registriert seit: 9. Aug 2003
389 Beiträge
 
Delphi 7 Professional
 
#3

Re: Zeichenkette mit SendMessage verschicken und empfangen

  Alt 26. Sep 2003, 09:28
SendMessage(...,Integer(@SourceFilename)); und

Filename:=PString(Pointer(Msg.lParam))^; (bei @SourceFilename[1] wird die Länge nicht mitgegeben)
  Mit Zitat antworten Zitat
Benutzerbild von Luckie
Luckie

Registriert seit: 29. Mai 2002
37.621 Beiträge
 
Delphi 2006 Professional
 
#4

Re: Zeichenkette mit SendMessage verschicken und empfangen

  Alt 26. Sep 2003, 09:30
So verschicken:
SendMessage(hWnd, CEM_COPIEDFILE, MAKEWPARAM(Word(bSuccess), i), Integer(PChar(SourceFilename))); .
Und wie sakura gezeigt hat, empfangen.
Michael
Ein Teil meines Codes würde euch verunsichern.
  Mit Zitat antworten Zitat
Benutzerbild von Motzi
Motzi

Registriert seit: 6. Aug 2002
Ort: Wien
598 Beiträge
 
Delphi XE2 Professional
 
#5

Re: Zeichenkette mit SendMessage verschicken und empfangen

  Alt 26. Sep 2003, 10:31
Zitat von Basilikum:
SendMessage(...,Integer(@SourceFilename)); und

Filename:=PString(Pointer(Msg.lParam))^; (bei @SourceFilename[1] wird die Länge nicht mitgegeben)
Aber so verschickst du nur den "Pointer auf den Pointer", denn ein String ist (genauso wie ein PChar) nur ein Zeiger auf die Zeichenkette -> SizeOf(String) = 4! (zumindest unter normalen Einstellungen)

@Luckie: wieso? Pointer sind doch was herrliches!!
Manuel Pöter
  Mit Zitat antworten Zitat
Christian Seehase
(Co-Admin)

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

Re: Zeichenkette mit SendMessage verschicken und empfangen

  Alt 26. Sep 2003, 11:33
Moin Basilikum,

Zitat von Basilikum:
(bei @SourceFilename[1] wird die Länge nicht mitgegeben)
als Ergänzung zu Motzis Beitrag:
Wenn Du z.B. @SourceFilename[3] nehmen würdest, würde die Adresse des 3. Zeichens der Zeichenkette übergeben werden.
Die Angabe [1] wirst Du öfter brauchen, z.B. wenn Du einen String als Buffer für TFileStream verwendest.
Die Länge braucht man übrigens nicht mitzugeben, da Delphi HugeStrings intern immer nullterminiert, so dass "normale" Funktionen ein definiertes Stringende finden, wenn sie auf einen PChar treffen.
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
OG Karotte
(Gast)

n/a Beiträge
 
#7

Re: Zeichenkette mit SendMessage verschicken und empfangen

  Alt 19. Feb 2006, 13:14
Endlich, nach stundenlangem suchen bin ich hier gelandet:

Die Lösung meiner Probleme !!!

Doch, oh Schreck, das einzige was ich bekomme ist ein AccessViolation Error!!!!

Also, ich habe ebenfalls nach einer Möglichkeit gesucht den mittels LParam übergebenen Zeiger auf eine Stringvariable in einer anderen Anwendung auszulesen.

Ich dachte hier wäre die Lösung meines Problems, aber welche der Lösungen ich auch verwende:
Entweder kommt es zum o.g. Fehler oder es steht nur "Müll" in der Variablen.

Sind die hier dargestellten Lösungen vielleicht doch nicht ganz richtig?
Oder mache ich irgendwo einen Fehler?

Hier der verwendete Code zum Senden:
Delphi-Quellcode:

SendMessage(HWND_BROADCAST, WM_CMSMSG, 0, Integer(PChar(smsg)));
Und hier die Empfangsroutine: (zum Teil aus der JCL)

Delphi-Quellcode:
// JclAppInst Demo
procedure TfrmMain.WndProc(var Msg: TMessage);
begin
  // Interprocess communication handler.
  // First check whether we can safely read TForm.Handle property ...
  if HandleAllocated and not (csDestroying in ComponentState) then
    if msg.msg = WM_CMSMSG then
      begin
        memProtokoll.Lines.add(String(PChar(Pointer(msg.lParam)));
      end
     else
       inherited
  else
    inherited;
end;
Wo ist der Fehler???

Ich bin am verzweifeln...
  Mit Zitat antworten Zitat
Christian Seehase
(Co-Admin)

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

Re: Zeichenkette mit SendMessage verschicken und empfangen

  Alt 19. Feb 2006, 13:27
Moin Karotte,

erst einmal herzlich Willkommen hier in der Delphi-PRAXiS.

Der Fehler liegt darin, dass die Adresse nicht prozessübergreifend gültig ist.
Schau Dir doch, z.B., mal Hier im Forum suchenWM_COPYDATA an.
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
OG Karotte
(Gast)

n/a Beiträge
 
#9

Re: Zeichenkette mit SendMessage verschicken und empfangen

  Alt 19. Feb 2006, 15:38
Hallo Chris,
danke für die schnelle Antwort.
Ich werde es gleich mal ausprobieren...

Gruß
OG Karotte
  Mit Zitat antworten Zitat
Benutzerbild von Luckie
Luckie

Registriert seit: 29. Mai 2002
37.621 Beiträge
 
Delphi 2006 Professional
 
#10

Re: Zeichenkette mit SendMessage verschicken und empfangen

  Alt 19. Feb 2006, 20:45
Der Unterschied ist: Ich habe die Nchricht nur uinnerhalb meines Prozesses verschickt und somit war die Adresse auch gültig. Du versuchst aber prozessbergreifend die Nachrciht zu verschicken. Und wie XChristian schon agt, geht das nur mit MSDN-Library durchsuchenWM_COPYDATA, da sich dann Windows drumkümmert, dass der Zeiger gültig ist, in dem die Adresse in einen gemeinsamen Speicherbereich gemappt wird.

Ein Beispiel zu WM_COPYDATA gibt es hier: http://www.michael-puff.de/Developer..._COPYDATA.html Alternativ kann man eine Interprozesskommunikation auch mittels Memmory mapped files lösen: http://www.michael-puff.de/Developer...tiges/MMF.html oder über Pipes.
Michael
Ein Teil meines Codes würde euch verunsichern.
  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 06:28 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