AGB  ·  Datenschutz  ·  Impressum  







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

FindWindow und WM_COPYDATA

Ein Thema von Gler · begonnen am 18. Jun 2019 · letzter Beitrag vom 19. Jun 2019
 
Gler

Registriert seit: 18. Jun 2019
2 Beiträge
 
#1

FindWindow und WM_COPYDATA

  Alt 18. Jun 2019, 16:06
Da ich nicht sicher war in welches UnterForum mein Problem gehört:
Ich würde gerne mit SendMessage und WW_COPYDATA einen einfachen String zwischen einem Delphi-3 Programm und einem Delphi-10-Programm senden.
In D3 zu arbeiten ist hier leider nicht optional, aber auch (hoffentlich) nicht das Problem.

Um das nicht in den Hauptprogrammen zu testen habe ich mit dazu flott zwei neue Programme erstellt, mit folgendem Code:

Delphi-Quellcode:
procedure TForm1.Button1Click(Sender: TObject);
var
  aCopyData: TCopyDataStruct;
  hTargetWnd: HWND;
  s:string;
begin
  s:='test';
  with aCopyData do
  begin
    dwData := 0;
    cbData := StrLen(PChar(s)) + 1;
    lpData := PChar(s)
  end;

 hTargetWnd:=FindWindow(nil,'test');
 htargetWnd:=strtoint(Edit1.Text); //weil findwindow nicht das richtige liefert
 if hTargetWnd <> 0 then
    SendMessage(hTargetWnd, WM_COPYDATA, Longint(Handle), Longint(@aCopyData))
  else
    ShowMessage('No Recipient found!');
end;
Zum Ersten gibt mir FindWindow ein falsches Handle.
Zwar wird hier scheinbar irgendwas vom anderen Programm gefunden, wenn denn das zweite Programm nicht gestartet ist kriege ich hier 0, aber was gefunden wird ist grundsätzlich verschieden vom Handle dass ich zum testen am zweiten Programm direkt ausgebe - und wenn ich das dann von Hand ins Edit-Feld eingebe funktioniert das senden auch.

Zum Zweiten scheint sich mir beim Auslesen irgendwo ein Fehler eingeschlichen zu haben - erst hatte ich einfach label1.Caption := Stext, allerdings hat mir das immer nur den ersten Buchstaben ausgegeben, dann habe ich versucht das Array auszulesen, aber das hat noch weniger geklappt (wobei hier sicher nur ein saublöder Struddelfehler drinne ist)

Delphi-Quellcode:
procedure TForm1.WMCopyData(var Msg: TWmCopyData);
var
  sText: array[0..99] of Char;
    i: Integer;
  s: string;
begin

  StrLCopy(sText, Msg.CopyDataStruct.lpData, Msg.CopyDataStruct.cbData);

  s := '';
  for i:=1 to length(Stext) do
    begin
      s := s + sText[i];
    end;
  label1.Caption := s;
end;

Danke im Vorraus
  Mit Zitat antworten Zitat
 


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 03:14 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