Delphi-PRAXiS
Seite 1 von 8  1 23     Letzte »    

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Programmieren allgemein (https://www.delphipraxis.net/40-programmieren-allgemein/)
-   -   Delphi *.Lnk Verknüpfungen funktionieren nicht. (https://www.delphipraxis.net/192716-%2A-lnk-verknuepfungen-funktionieren-nicht.html)

EWeiss 13. Mai 2017 02:53


*.Lnk Verknüpfungen funktionieren nicht.
 
Um zu verstehen was ich meine ist es nötig die Bilder anzusehen.
Diese Verknüpfung über ShellExecute funktioniert nicht.

jemand einen Ahnung warum das so ist?

Delphi-Quellcode:
procedure StartApplication(nItem: integer);
var
  sShellTo, sCmdLine, sFullPath: string;
begin
  sShellTo := gS[nItem].ShellTo;
  if InStr(0, sShellTo, '{') <> 0 then
    sShellTo := '';

  sFullPath := gS[nItem].WorkDir;
  sCmdLine := gS[nItem].CmdLine;
  sCmdLine := StringReplace(sCmdLine, ';', ',', [rfReplaceAll]);

  if Length(sFullPath) = 0 then
    sFullPath := RightTrim(ExtractFilePath(sShellTo))
  else
    SetCurrentDirectory(PWideChar(sFullPath));

  ShellExecute(0, 'open', PWideChar(sShellTo), PWideChar(sCmdLine), PWideChar(sFullPath),
    gS[nItem].ShowCmd);

end;
Sogar mit Ziel und Ausführen in funktioniert es nicht.

gruss

himitsu 13. Mai 2017 05:20

AW: *.Lnk Verknüpfungen funktionieren nicht.
 
Zitat:

Zitat von EWeiss (Beitrag 1371209)
Um zu verstehen was ich meine ist es nötig die Bilder anzusehen.

Nein?

Was geht nicht?
Vorallem was steht in welche Variable drin?

Und ich kann rein garnichts erkennen, was mit einer LNK-Datei zu tun haben soll.
Wie/Wo wird da auf so eine Datei zugegriffen und wie werden die Werte dort ausglesen.
Bzw. wie sieht diese Datei aus?

Manchmal kann es auch nicht schaden, wenn man "Sonderfunktionen" erklärt, die nicht standardmäßig im Delphi enthalten sind.
Delphi-Referenz durchsuchenPoSex / Delphi-Referenz durchsuchenContainsStr
Oder den Code kommentiert, denn ich kann z.B. keinen Sinn darin erkennen, warum da TrimRight oder das SetCurrentDirectory im Code drin ist.

Und warum im Himmels Willen wertet Niemand die Rückgabewerte von ShellExecute aus?
Man mag es nicht glauben, aber die WinAPI sagt einem manchmal sogar, warum etwas nicht funktioniert. :roll:

EWeiss 13. Mai 2017 05:33

AW: *.Lnk Verknüpfungen funktionieren nicht.
 
Zitat:

Nein?
Soll ich dir darauf antworten wenn du nein sagst ?

Warum Antwortest du wenn du die Bilder nicht ansehen möchtest
ohne das du das tust und den Link der EXE Datei anschaust wirst du mir auch nicht helfen können.

gruss

Daniel 13. Mai 2017 05:36

AW: *.Lnk Verknüpfungen funktionieren nicht.
 
Deine Antwort könnte in weiteren Informationen bestehen.
Und Dein Problem ist auch nicht, dass Verknüpfungen im Allgemeinen nicht funktionieren, sondern dass das Auslesen der Pfade offenbar ein Problem bereitet.

Himitsu hat Dir einen wichtigen Tipp gegeben: Den Rückgabewert von ShellExecute() auszuwerten. Ansonsten versuche es mal mit einem kurzen Pfad ohne Leerzeichen. Eventuell fehlen nur die doppelten Anführungszeichen.

Der schöne Günther 13. Mai 2017 05:38

AW: *.Lnk Verknüpfungen funktionieren nicht.
 
Er hat doch völlig Recht. Die Bildchen helfen niemand. Der Code ebenso, denn niemand kann riechen was in den Variablen steckt.

Edit: Hoppla, der rote Kasten schläft noch.

EWeiss 13. Mai 2017 05:41

AW: *.Lnk Verknüpfungen funktionieren nicht.
 
Zitat:

Himitsu hat Dir einen wichtigen Tipp gegeben: Den Rückgabewert von ShellExecute() auszuwerten. Ansonsten versuche es mal mit einem kurzen Pfad ohne Leerzeichen. Eventuell fehlen nur die doppelten Anführungszeichen.
Die Rückgaben sagen gar nichts aus wenn keine kommen. (Diese sind NUR wichtig wenn Fehler auftreten sollten ) tun sie aber nicht.

Zitat:

Er hat doch völlig Recht. Die Bildchen helfen niemand.
Aber ohne diese wirst du den ellenlangen Pfad den ich hier nicht eintippen will nicht sehen können.
So einfach ist das.
Die habe ich nicht angehängt weil sie schön sind sondern zu Dokumentations zwecken.

Zitat:

sondern dass das Auslesen der Pfade offenbar ein Problem bereitet.
Nö sondern dass das starten des Programms über den Pfad wie er im Bild ersichtlich ist nicht funktioniert.

Zitat:

Und ich kann rein garnichts erkennen, was mit einer LNK-Datei zu tun haben soll.
Du weist nicht was eine Verknüpfung ist? NA dann.

gruss

jaenicke 13. Mai 2017 05:51

AW: *.Lnk Verknüpfungen funktionieren nicht.
 
Zitat:

Zitat von EWeiss (Beitrag 1371214)
Die Rückgaben sagen gar nichts aus wenn keine kommen. (Diese sind NUR wichtig wenn Fehler auftreten sollten ) tun sie aber nicht.

ShellExecute hat immer einen Rückgabewert. Und dein Problem ist doch, dass es nicht funktioniert, also wieso sollte der Rückgabewert nichts aussagen?

Rückgabewerte nicht zu behandeln heißt:
"Mach mal, aber wenn es nicht geht, ist es mir auch egal."
Wenn es dir nicht egal ist, ob es nicht funktioniert, solltest du die Rückgabewerte auch behandeln um ggf. eine passende Fehlermeldung auszugeben.

Wenn der Rückgabewert von ShellExecute wirklich sagt alles ok, bleibt nur noch mit Tools wie dem Process Monitor zu schauen warum das erfolgreich gestartete Programm (Rückgabewert alles ok, also wurde es gestartet) abstürzt.

Daniel 13. Mai 2017 06:00

AW: *.Lnk Verknüpfungen funktionieren nicht.
 
Was steht denn in Deinen Strings, die Du an ShellExecute übergibst?

EWeiss 13. Mai 2017 06:53

AW: *.Lnk Verknüpfungen funktionieren nicht.
 
Zitat:

Zitat von Daniel (Beitrag 1371217)
Was steht denn in Deinen Strings, die Du an ShellExecute übergibst?

Dafür muss man sich mein Dokument in Bildform ansehen da steht der Name der Exe.

Delphi-Quellcode:
ShellExecuteAndWaitW(MainHandle, 'open', PWideChar(sShellTo), PWideChar(sCmdLine),
  PWideChar(sFullPath), gS[nItem].ShowCmd, true);
Parameter:
'ShellTo, UseLabel, IconName, WorkDir, CmdLine, EnableShortcutTrueFalse'
Zu Parsender String
"explorer.exe, Win7(C:), @PATH@UserIcon\48x48\HD.png, @PATH@, C:\, 1"


sShellTo = explorer.exe
sUseLabel = Win7(C:)
sUseThumb = @PATH@UserIcon\48x48\HD.png
sFullPath(Workdir) = ''
sCmdLine = C:\
gS[nItem].ShowCmd := SW_SHOW

Als Beispiel.

gruss

Daniel 13. Mai 2017 07:03

AW: *.Lnk Verknüpfungen funktionieren nicht.
 
Emil - wir reden aneinander vorbei. Dein Screenshot zeigt den Windows-eigenen Dialog zu den Eigenschaften des Links. Schön und gut.
Relevant ist aber doch, was in Deinen Strings steht. Und das geht aus Deinen Screenshots nicht hervor. Auch wenn Du noch so sehr insistierst.
Im ersten Beitrag nutzt Du "ShellExecute", jetzt im letzten Beitrag "ShellExecuteAndWait", was eine eigene Routine ist - auch hier könnten Fehler verborgen sein.
Die Notation mit "@Path@" ist mir nicht bekannt und erscheint mir suspekt.

Rückgabewert von ShellExecute prüfen oder mit Werkzeugen wie dem ProzessExplorer von Microsoft mal schauen, wo Dein Programm hin will. Mehr fällt mir auch nicht ein.
ich bin jetzt aber auch raus.


Alle Zeitangaben in WEZ +1. Es ist jetzt 02:49 Uhr.
Seite 1 von 8  1 23     Letzte »    

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