![]() |
Comandline und WM_COPYDATA
Eigentlich eine einfache Sache.
Delphi-Quellcode:
Frage mich nur warum alle Strings auch wenn ich diese über Parameter in der IDE verschicke der erste Char leer ist ' '
WM_COPYDATA:
begin CopyDataStruct := Pointer(lP); ExecuteCmdLine(CopyDataStruct.lpData); end; 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
Delphi-Quellcode:
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 |
AW: Comandline und WM_COPYDATA
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; |
AW: Comandline und WM_COPYDATA
Zitat:
Danke werde es mal versuchen. gruss |
AW: Comandline und WM_COPYDATA
Zitat:
Nicht wohin/worauf! |
AW: Comandline und WM_COPYDATA
Zitat:
Ü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 |
AW: Comandline und WM_COPYDATA
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. |
AW: Comandline und WM_COPYDATA
Zitat:
hat sich erledigt. Danke. gruss |
AW: Comandline und WM_COPYDATA
Zitat:
|
AW: Comandline und WM_COPYDATA
Zitat:
vorher!
Delphi-Quellcode:
nachher..
// 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;
Delphi-Quellcode:
Kann man bestimmt schöner (professioneller) machen aber mir reicht es so.
// 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; gruss |
AW: Comandline und WM_COPYDATA
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. |
Alle Zeitangaben in WEZ +1. Es ist jetzt 01:55 Uhr. |
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz