AGB  ·  Datenschutz  ·  Impressum  







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

Comandline und WM_COPYDATA

Ein Thema von EWeiss · begonnen am 3. Nov 2017 · letzter Beitrag vom 4. Nov 2017
Antwort Antwort
Seite 1 von 2  1 2      
EWeiss
(Gast)

n/a Beiträge
 
#1

Comandline und WM_COPYDATA

  Alt 3. Nov 2017, 17:40
Eigentlich eine einfache Sache.

Delphi-Quellcode:
    WM_COPYDATA:
      begin
        CopyDataStruct := Pointer(lP);
        ExecuteCmdLine(CopyDataStruct.lpData);
      end;
Frage mich nur warum alle Strings auch wenn ich diese über Parameter in der IDE verschicke der erste Char leer ist ' '

bsp: "C:\Test\Meine Daten.txt" kommen dann so an. " C:\Test\Meine Daten.txt"
Das hat zur folge das ich beim prüfen mit
if FileExists(Title) then

die Datei nicht gefunden wird.
Ich kann das jetzt mit TrimLeft zurecht rücken aber das ist eigentlich nicht der sinn der Sache.


gruss

Geändert von EWeiss ( 3. Nov 2017 um 17:45 Uhr)
  Mit Zitat antworten Zitat
TiGü

Registriert seit: 6. Apr 2011
Ort: Berlin
3.070 Beiträge
 
Delphi 10.4 Sydney
 
#2

AW: Comandline und WM_COPYDATA

  Alt 3. Nov 2017, 18:05
Wie befüllst du die Strings in LP oder bzw. lpData?


Bringt es was wenn du das so schreibst?
Delphi-Quellcode:
   WM_COPYDATA:
      begin
        CopyDataStruct := PCopyDataStruct(lP);
        ExecuteCmdLine(CopyDataStruct.lpData);
      end;
  Mit Zitat antworten Zitat
EWeiss
(Gast)

n/a Beiträge
 
#3

AW: Comandline und WM_COPYDATA

  Alt 3. Nov 2017, 18:09
Wie befüllst du die Strings in LP oder bzw. lpData?


Bringt es was wenn du das so schreibst?
Delphi-Quellcode:
   WM_COPYDATA:
      begin
        CopyDataStruct := PCopyDataStruct(lP);
        ExecuteCmdLine(CopyDataStruct.lpData);
      end;
In LP.

Danke werde es mal versuchen.

gruss
  Mit Zitat antworten Zitat
TiGü

Registriert seit: 6. Apr 2011
Ort: Berlin
3.070 Beiträge
 
Delphi 10.4 Sydney
 
#4

AW: Comandline und WM_COPYDATA

  Alt 3. Nov 2017, 18:10
Wie befüllst du die Strings in LP oder bzw. lpData?
In LP.
Wie! Die Frage war: Wie?
Nicht wohin/worauf!
  Mit Zitat antworten Zitat
EWeiss
(Gast)

n/a Beiträge
 
#5

AW: Comandline und WM_COPYDATA

  Alt 3. Nov 2017, 18:21
Wie befüllst du die Strings in LP oder bzw. lpData?
In LP.
Wie! Die Frage war: Wie?
Nicht wohin/worauf!
Hatte ich oben ja schon geschrieben.

Über die Parameter in der Delphi IDE wenn du das meinst.
Nein da ist keine Änderung der erste Char ist ' '.

Wenn die Anwendung offen ist und ich verwende DragDrop dann geht's.
Verwende ich DragDrop auf mein Anwendungs Icon dann geht es nicht auch über die Parameter der IDE nicht.

gruss

Geändert von EWeiss (11. Jul 2019 um 16:48 Uhr)
  Mit Zitat antworten Zitat
Benutzerbild von Bernhard Geyer
Bernhard Geyer

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

AW: Comandline und WM_COPYDATA

  Alt 3. Nov 2017, 19:40
Wie erstellst du die WM_COPYDATA-Nachricht, nicht wie verarbeitest du diese.
Und unsere Erfahrung ist das WM_COPYDATA nur funktioniert wenn man sie zwischen verschiedenen Anwendungen versendet.
In einer Anwendung (z.B. zwischen einer DLL und Exe) hatten wir immer wieder probleme bis wir diese Lösung ausgebaut hatten.
Windows Vista - Eine neue Erfahrung in Fehlern.
  Mit Zitat antworten Zitat
EWeiss
(Gast)

n/a Beiträge
 
#7

AW: Comandline und WM_COPYDATA

  Alt 3. Nov 2017, 19:49
Zitat:
Wie erstellst du die WM_COPYDATA-Nachricht, nicht wie verarbeitest du diese.
Ach so jetzt weis ich was ihr meint.

hat sich erledigt.

Danke.

gruss

Geändert von EWeiss ( 3. Nov 2017 um 21:50 Uhr)
  Mit Zitat antworten Zitat
Benutzerbild von Bernhard Geyer
Bernhard Geyer

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

AW: Comandline und WM_COPYDATA

  Alt 3. Nov 2017, 21:51
Zitat:
Wie erstellst du die WM_COPYDATA-Nachricht, nicht wie verarbeitest du diese.
Ach so jetzt weis ich was ihr meint.

hat sich erledigt.

Danke.

gruss
Uund was war es jetzt?
Windows Vista - Eine neue Erfahrung in Fehlern.
  Mit Zitat antworten Zitat
EWeiss
(Gast)

n/a Beiträge
 
#9

AW: Comandline und WM_COPYDATA

  Alt 3. Nov 2017, 21:54
Zitat:
Wie erstellst du die WM_COPYDATA-Nachricht, nicht wie verarbeitest du diese.
Ach so jetzt weis ich was ihr meint.

hat sich erledigt.

Danke.

gruss
Uund was war es jetzt?
Habe den freien Char selbst angehängt.. Manchmal ist man einfach nur blöd.

vorher!
Delphi-Quellcode:
      // Commandline Parameter auswerten
      if ParamCount > 0 then
      begin
        StartParams := '';
        for Params := 1 to ParamCount do
          StartParams := StartParams + ' ' + ParamStr(Params);

        pName := PWideChar(StartParams);
        CopyDataStruct.dwData := 0;
        CopyDataStruct.cbData := (StrLen(pName) + 1) * sizeof(Char);
        CopyDataStruct.lpData := pName;

        SendMessage(Prop.MainHandle, WM_COPYDATA, 0, integer(@CopyDataStruct));
      end;
nachher..
Delphi-Quellcode:
      // Commandline Parameter auswerten
      if ParamCount > 0 then
      begin
        StartParams := '';
        for Params := 1 to ParamCount do
        if Params = 1 then
          StartParams := StartParams + ParamStr(Params)
        else
        StartParams := StartParams + ' ' + ParamStr(Params);

        pName := PWideChar(StartParams);
        CopyDataStruct.dwData := 0;
        CopyDataStruct.cbData := (StrLen(pName) + 1) * sizeof(Char);
        CopyDataStruct.lpData := pName;

        SendMessage(Prop.MainHandle, WM_COPYDATA, 0, integer(@CopyDataStruct));
      end;
Kann man bestimmt schöner (professioneller) machen aber mir reicht es so.

gruss

Geändert von EWeiss ( 3. Nov 2017 um 21:58 Uhr)
  Mit Zitat antworten Zitat
mensch72

Registriert seit: 6. Feb 2008
838 Beiträge
 
#10

AW: Comandline und WM_COPYDATA

  Alt 4. Nov 2017, 13:19
kleiner Tip am Rande:
da im Prinzip jeder ein WM_COPYDATA verschicken kann, ist ohne z.B. Check(summe) nicht kaum zu garantieren, das man eine gültige Message von seiner eigenen Gegenstelle empfängt.

=> man kann im einfachsten Fall dwData beim Senden mit einer z.B. CRC32 über einen speziellen Startwert, der Länge und den Nutzdaten belegen... der Empfangscode kann nun vor "Verarbeitung" zumindest mit sehr hoher Sicherheit prüfen, ob es eine eigenen und gültige WM_COPYDATA Nachricht 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 09:22 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