AGB  ·  Datenschutz  ·  Impressum  







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

sendmessage problem

Ein Thema von Timi-loader · begonnen am 7. Nov 2006 · letzter Beitrag vom 7. Nov 2006
Antwort Antwort
Seite 1 von 2  1 2      
Timi-loader

Registriert seit: 10. Okt 2005
Ort: Berlin
97 Beiträge
 
Delphi 7 Personal
 
#1

sendmessage problem

  Alt 7. Nov 2006, 13:10
hallo

habe nun schon eine menge beispiele gesehen wie man messages von einem zum andere programm sendet, aber irgendwie sind die ja alle ähnlich aufgebaut und funktionieren bei mir nicht. also eine message kommt auch an aber derren inhalt nicht mehr klar.. nur irgendwelches zeichengewirr.

ich habe jetzt soetwas benutzt: http://www.swissdelphicenter.ch/de/showcode.php?id=163

weiß einer wieso mein text nicht klar ankommt?

mfg
timi-loader
  Mit Zitat antworten Zitat
Benutzerbild von Luckie
Luckie

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

Re: sendmessage problem

  Alt 7. Nov 2006, 13:17
Zitat von Timi-loader:
weiß einer wieso mein text nicht klar ankommt?
Lass mich raten.....
Nein warte, ich lege mal eben schnell die Karten......
Nein, Moment, ich hole mal eben meine Glaskugel aus dem Schrank......
Nein, ich könnte noch im Kaffeesatz lesen....

Aber einfacher wäre es bestimmt, wenn du uns verrätst, wie dein Quellcode dazu aussieht.
Michael
Ein Teil meines Codes würde euch verunsichern.
  Mit Zitat antworten Zitat
Timi-loader

Registriert seit: 10. Okt 2005
Ort: Berlin
97 Beiträge
 
Delphi 7 Personal
 
#3

Re: sendmessage problem

  Alt 7. Nov 2006, 13:34


also im prinzip hab ich den ja nur vom link oben abgeschreiben.. dachte vllt ist da ja ein genereller bug drinn.. nja hier mal meins:

Delphi-Quellcode:
//Vom Project1:

begin
  hPrevWin := FindWindow(nil, 'BTswitcherHilfe');

  If hPrevWin <> 0 Then
  begin
  txt:='testtext';
  SetForegroundWindow(hPrevWin);
  SendMessage(hPrevWin, WM_USER+77, 0, DWORD(PChar(txt)));
  application.Terminate;
  end
  else
  begin
  Application.Initialize;
  Application.CreateForm(TForm1, Form1);
  Application.Run;
  end;
end.
Delphi-Quellcode:
//oben bei private:
  private
    procedure OnMyMessage(var Msg: TMessage); message WM_USER+77;
Delphi-Quellcode:
//und dann unten:
procedure tform1.OnMyMessage(var Msg: TMessage);
var txt: PChar;
begin
  txt := PChar(msg.lParam);
  msg.Result := 1;
  ShowMessage(txt);
end;
..so das ganze ist eine billige variante zum verhindern des mehrfachstarts und dabei soll dann zur ersten instanz eine message gegeben werden. (später soll die message den paramstr enthalten.. das kommt ja dann noch)

mfg
  Mit Zitat antworten Zitat
Benutzerbild von Luckie
Luckie

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

Re: sendmessage problem

  Alt 7. Nov 2006, 13:42
Lesen:
Zitat:
Delphi-Quellcode:
{
  This is useful if you want to send a message from your DLL back
  to the calling application.
}
Das ist ein Unterschied, da sich die DLL im gleichen Prozess / Adressraum befindet. Was du willst geht nur mit WM_COPYDATA, da dann Windows dafür sorgt, dass die Zeiger in einen Speicherbereich gemappt werden, in dem der Zeiger für beide Prozesse gültig ist.

Ein Beispiel gibt es hier: http://delphisonstiges.michael-puff.de -> WM_COPYDATA.html
Michael
Ein Teil meines Codes würde euch verunsichern.
  Mit Zitat antworten Zitat
Timi-loader

Registriert seit: 10. Okt 2005
Ort: Berlin
97 Beiträge
 
Delphi 7 Personal
 
#5

Re: sendmessage problem

  Alt 7. Nov 2006, 13:53
hey cool
thx so gehts!



(p.s.: habs auch ohne record gemacht also einfach die messageart ersetzt - ein string geht jetzt irgendwie nur bis 7 zeichen aber egal das reicht^^)
  Mit Zitat antworten Zitat
Benutzerbild von Luckie
Luckie

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

Re: sendmessage problem

  Alt 7. Nov 2006, 13:57
Zitat von Timi-loader:
ein string geht jetzt irgendwie nur bis 7 zeichen
Hä? Ein Delphi Ansistring kann theoretisch bis zu 2 GB lang werden. Dass du da nur 7 Zeichen übertragen kannst, bedeutet entweder du machst was falsch und es funktioniert nur zufällig oder du hast ein String-Endezeichen an der achten Stelle in deinem String.
Michael
Ein Teil meines Codes würde euch verunsichern.
  Mit Zitat antworten Zitat
Timi-loader

Registriert seit: 10. Okt 2005
Ort: Berlin
97 Beiträge
 
Delphi 7 Personal
 
#7

Re: sendmessage problem

  Alt 7. Nov 2006, 14:52
hm ja habs wohl nur nen bug ausgenutzt oder so..^^ also es klappt nicht wirklich so wie ichs hab.. mss man wohl mit integer() machen.. also ich hab noch mit diesem pchar gearbeitet gehabt..

kann man den code auch kürzer fassen ohne ein record?.. (ja, aber wie?) also ich komm grad mit dieser datentypumwandlung nicht ganz zurecht
  Mit Zitat antworten Zitat
Benutzerbild von Luckie
Luckie

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

Re: sendmessage problem

  Alt 7. Nov 2006, 14:55
Zeig doch mal Code. Meine Glaskugel hat gerade der Kollege.
Michael
Ein Teil meines Codes würde euch verunsichern.
  Mit Zitat antworten Zitat
Timi-loader

Registriert seit: 10. Okt 2005
Ort: Berlin
97 Beiträge
 
Delphi 7 Personal
 
#9

Re: sendmessage problem

  Alt 7. Nov 2006, 15:03
nja mein code bin ich grade wieder neu am verhunzen... -.-
also jetzt wollt ichs eigendlich nur so machen(halt ein string nur):

Delphi-Quellcode:
//sender
  txt:='meinstring';
  cds.dwData := 0;
  cds.cbData := sizeof(txt);
  cds.lpData := @txt;
  SetForegroundWindow(hPrevWin);
  SendMessage(hPrevWin, WM_COPYDATA, 0, Integer(@cds));

//empfänger
procedure tform1.OnMyMessage(var Msg: TWMCopyData);
var txt: string;
begin
  txt := msg.CopyDataStruct.lpData;
  msg.Result := 1;
  ShowMessage('ankommend: '+txt);
end;
aber so geht das ja nicht..
also da hab ich jetzt den durchblick grad nicht.. irgendwas mit pointer ist ja kein string..

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

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

Re: sendmessage problem

  Alt 7. Nov 2006, 15:29
Moin Timi,

probier's mal so:

Delphi-Quellcode:
  //...
  cds.cbData := Length(txt); // wenn txt vom Typ String ist, ist SizeOf(txt) = 4
  cds.lpData := @txt[1]; // [1], da ansonsten der Speicher ab der Adresse von txt übertragen wird
  //...
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
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 22:57 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