Pfad zur Verknüpfung - worüber wurde das Script gestartet

  • Guten Abend,

    ich habe für diverse au3 Dateien eine Verknüpfung nach folgendem Muster erstellt:

    "c:\Autoit\AutoIt3_x64.exe" "d:\test\test.au3"

    Ich starte das Script über die Verknüpfung.

    Im Script steht

    MsgBox ( 262144 , "Pfad" , "Pfad zur Verknüpfung" )

    Wie kann ich mit AutoIt den "Pfad zur Verknüpfung" (Pfad und Name der Verknüpfung) ermitteln, von der Verknüpfung, von der das aktuell ausgeführte Script gestartet wurde?

    Beispiel

    F:\test mal an\weihnachten.lnk

    und

    weihnachten

    Die Verknüpfung liegt nicht dort, wo sich das Script befindet.

    Vielen Dank :)

  • Verstehe den Sinn dahinter absolut nicht.

    Warum spielt es eine Rolle wo die Verknüpfung nun liegt?

    Was machst du wenn der Anwender garkeine Verknüpfung verwendet um die au3 auszuführen?

    Für Windows macht es jedenfalls absolut keinen Unterschied ob du "Start->Ausführen", "cmd.exe", eine Verknüpfung auf dem Desktop oder eine Verknüpfung die sonst wo liegt verwendest um die autoit.exe mit Parameter zu starten.

    Wenn du das unbedingt haben musst, dann pass die zu überwachenden Verknüpfungen halt an und pack als zweiten Parameter noch den Pfad zur Verknüpfung selbst mit rein. Der zweite angegebene Parameter kann im Script dann z.B. mit der globalen Autoit Standard Variable $cmdlineraw oder dem Array $cmdline[...] abgefragt werden. (Siehe auch Autoithilfe bzgl. "Command Line Parameters")

  • Hmmmm...

    auf geradem Weg mit Bordmitteln? Ich glaube das ist ehr nicht vorgesehen :). Du könntest aber die Regestry nach dem Link durchsuchen. Der Programmname sollte ja bekannt sein - der Rest steht in der Reg, Allerdings stehen da alle vorhandenen Verknüpfungen auf Dein Prog


    Gruß Peter

    Hinweise auf Suchmaschinen finde ich überflüssig - wer fragt hat es nicht gefunden oder nicht verstanden. Die Antwort gibt sich oftmals schneller als der Hinweis auf Dr. Goggle & Co.

    Ab 19-10-22 ergänzt um:

    Die Welt wird nicht bedroht von den Menschen, die böse sind, sondern von denen, die das Böse zulassen. (Albert Einstein)

  • Hallo misterspeed,

    "Warum spielt es eine Rolle wo die Verknüpfung nun liegt?"

    Wenn sie im Scriptverzeichnis liegen würde, kann ich sie mit AutoIt finden. Da sie aber woanders liegt, weiß ich nicht, wie ich den Pfad ermittle.

    "Was machst du wenn der Anwender garkeine Verknüpfung verwendet um die au3 auszuführen?"

    Ich bin der Anwender und ich nutze auf jeden Fall die Verknüpfung. :)

    Verknüpfungen liegen in x-beliebigen Ordnern und in denen liegen viele Verknüpfungen.

    Verknüpfungen werden aus Programmen gestartet, die Verknüpfungen speichern und starten können.

    Und ich brauche die Beschreibung ( = Kommentar) aus der jeweiligen Verknüpfung.

    Jene kann ich aber nur auslesen, wenn ich den Pfad zur Verknüpfung habe.

    "Wenn du das unbedingt haben musst, dann pass die zu überwachenden Verknüpfungen halt an und pack als zweiten Parameter noch den Pfad zur Verknüpfung selbst mit rein."

    Auch das geht leider nicht, weil meine Parameter länger sind, als es die Zeichenkettelänge einer Verknüpfung zulässt. Daher liegen diese Informationen im Kommentar der Verknüpfung. Diese kann ich mit AutoIt auslesen. Aber nur, wenn ich weiß, wo die Verknüpfung liegt.

    Hallo Peter S. Taler,

    Ich glaube auch nicht, dass es so einfach mit AutoIt-Boardmitteln möglich ist.

    Vielleicht weiß jemand von Euch, wie ich mit Windows API Mitteln den Pfad der Verknüpfung auslesen kann, von der aus die au3 Datei ausgeführt wurde.

    Es wird gehen - und es ist eine harte Nuss, die nur jene knacken können, die tiefer in der Windows-Materie zu Hause sind.

    Etwas vergleichbares gab es im Thread


    Per WMI die Eltern-PID holen

    Wie wurde Programm gestartet? In cmd.exe (DOS-Box) oder Verknüpfung / Doppelklick / Explorer

    ... allerdings ist das Ergebnis hier nicht die Verknüpfung, sondern das Eltern-Programm, z.B. wenn ich die Verknüpfung heraus aus Total Commander gestartet habe, dann erhalte ich als Ergebnis:

    ---------------------------

    ---------------------------

    Der Parent-Prozess heißt: TOTALCMD64.EXE.

    Er hat die PID: 6532.

    ---------------------------

    OK

    ---------------------------


    Wenn sowas möglich ist, dann bietet Windows sicherlich über irgendein Mittel auch den Zugriff auf die zugrundeliegende Verknüpfung an.

    Nur wie gesagt - das wird ähnlich kompliziert sein, wie eben gezeigter Thread.

    Ich würde mich freuen, wenn wir hier eine Lösung finden.

  • Du verstehst schon, dass das keiner versteht? Und nach #4 Wird es unverständlicher als nach #1

    Gruß

    Peter

    Hinweise auf Suchmaschinen finde ich überflüssig - wer fragt hat es nicht gefunden oder nicht verstanden. Die Antwort gibt sich oftmals schneller als der Hinweis auf Dr. Goggle & Co.

    Ab 19-10-22 ergänzt um:

    Die Welt wird nicht bedroht von den Menschen, die böse sind, sondern von denen, die das Böse zulassen. (Albert Einstein)

  • Wenn sowas möglich ist, dann bietet Windows sicherlich über irgendein Mittel auch den Zugriff auf die zugrundeliegende Verknüpfung an.

    Nein. Wenn du eine Verknüpfung ausführst wird schlichtergreifend der Windowsinterpreter für exe Dateien gestartet und öffnet dann eben die definierte Datei mit den entsprechenden Parametern und ggf. Arbeitsverzeichnis und Kompatibilitätsmodus. Der Speicherort der Verknüpfung ist dabei völlig irrelevant und wird dem zu startenden Programm daher auch nicht mitgeteilt. Der einzige der Kenntnis von der Verknüpfung hat ist evtl. der Windows Interpreter, welcher die benötigten Verknüpfungsinformationen ermittelt um die EXE Datei entsprechend auszuführen. Diese Information wird aber mit Sicherheit nirgendwo gespeichert oder via API zugänglich gemacht, da eben völlig irrelevant für irgendjemand anderen.

    Im Gegensatz dazu sind Informationen über den Parent- oder Childprozess durchaus relevant, weil unter anderem die Berechtigungsstufe (Adminrechte?) an die Child Prozesse weitergereicht werden. Desweiteren ist es Üblich, dass ein Prozess welcher einen anderen startet mit diesem kommuniziert oder diesen zumindestens überwacht.

    3 Mal editiert, zuletzt von misterspeed (18. Dezember 2017 um 21:24)

  • Versuchen wir es erstmal anders:

    Es ist im Moment nicht wichtig was du konkret umsetzen möchtest sondern viel wichtiger wäre die Frage: Warum?

    Was willst du am Ende damit bezwecken?

    Den Pfad der Verknüpfung herauszubekommen hat ja keinen Selbstzweck sondern du möchtest ihn für irgendetwas weiterverwenden.

    Die Frage ist: Wofür?

    Wenn die Frage beantwortet wurde, wird es wohl mit sehr hoher Wahrscheinlichkeit dazu kommen das die Lösungsvorschläge für dein eigentliches Problem gegeben werden welche deutlich effektiver sind.

  • Etwas vergleichbares gab es im Thread

    Deiner Aussage nach wäre dann "einen Baum pflanzen" vergleichbar mit "einen Baum fällen". Den Parent-Prozess herauszufinden ist zudem auch keine komplizierte Sache!

    Ich denke das wird nicht möglich sein, denn egal von welchem Prozess dein Script via Verknüpfung gestartet wurde... die relevanten Daten werden aus der Verknüpfung gelesen - diese wird dann vergessen, weil nicht mehr benötigt - und dann wird dein Script dementsprechend gestartet - Ende der Geschichte.

    Hier hast du übrigens eine vergleichbare Frage hestellt... 8o

  • Auch das geht leider nicht, weil meine Parameter länger sind, als es die Zeichenkettelänge einer Verknüpfung zulässt. Daher liegen diese Informationen im Kommentar der Verknüpfung. Diese kann ich mit AutoIt auslesen. Aber nur, wenn ich weiß, wo die Verknüpfung liegt.

    Nur mal am Rande... wenn man wirklich sehr viele und umfangreiche Parameter benötigt bietet es sich an diese Informationen in eine Parameterdatei auszulagern und nur den Pfad zur Parameterdatei als Parameter beim Aufruf zu nutzen. So machen das alle gängigen cmdline Tools die sehr umfangreich/komplex sind. Damit sollte dann auch dein Problem gelöst sein, denn du musst nicht mehr relevante Informationen in das Kommentarfeld deiner Verknüpfung auslagern.

  • Wie kannst du das alles nachhalten?

    Bestimmt nicht besser als Du oder andere User... aber ich bin recht gut darin, Sachen zu finden, insofern sie existieren. Zudem wär es sehr erstaunlich, wenn diese Frage nicht bereits in ähnlicher Form gestellt wurde... also auch ein wenig Intuition. ;)

    Hier mal als Inspiration: Übersicht aller Suchparameter für Google

    Bsp: allinurl:Verknüpfung site:autoit.de

    2 Mal editiert, zuletzt von Bitnugger (19. Dezember 2017 um 08:35)