Kennt jemand von Euch eine Möglichkeit, eine Verknüpfung zu erstellen? Sie sollte so ähnlich funktionieren, wie file_copy(fname,newname), nur, dass die gewünschte Datei nicht kopiert, sondern nur verknüpft wird. Ist dies irgendwie möglich, wenn ja, wie?
Verknüpfung erstellen
-
-
Es ist möglich, aber nicht gerade unkompliziert. Es lässt sich z.B. mit WSH umsetzen, einer in Windows eingebauten Scriptsprache. Wenn man in eine Textdatei mit Endung "vbs" VB Code schreibt, dann kann man diese mit einem Doppelklick von Windows ausführen lassen, eben auch um Verknüpfungen erstellen zu lassen. Ich hab mal eine Funktion im GM geschrieben die solch eine vbs Datei erstellt, dann ausführt und danach wieder löscht. Zugegeben nicht gerade der eleganteste Weg, aber er sollte funktionieren, denn soweit ich mich richtig informiert habe ist WSH Standard in einigermaßen aktuellen Windows Versionen.
GML-Quellcode
- /* Erstellt eine Verknüpfung mit folgenden Parametern:
- * argument0 : Dateipfad der Verknüpfung
- * argument1 : Zielprogramm
- * argument2 : Argumente die dem Zielprogramm übergeben werden sollen
- * argument3 : Arbeitsverzeichnis für die Ausführung
- * argument4 : Dateipfad zur Icon, dass angezeigt werden soll, oder zum Programm, das ein Icon enthält
- * argument5 : Kommentar zur Verknüpfung
- * argument6 : Tastenkombination
- * argument7 : Fenstereinstellung bei Start :
- * 1 für normales Fenster
- * 2 für minimiertes Fenster
- * 3 für maximiertes Fenster
- */
- var h;
- h = file_text_open_write("shortcut.vbs");
- file_text_write_string(h,'Set Shell = CreateObject("WScript.Shell")
- Set link = Shell.CreateShortcut("'+filename_change_ext(argument0,".lnk")+'")
- link.Arguments = "'+argument2+'"
- link.Description = "'+argument5+'"
- link.HotKey = "'+argument6+'"
- link.IconLocation = "'+argument4+'"
- link.TargetPath = "'+argument1+'"
- link.WindowStyle = '+string(argument7)+'
- link.WorkingDirectory = "'+argument3+'"
- link.Save');
- file_text_close(h);
- execute_program("wscript","shortcut.vbs",true);
- file_delete("shortcut.vbs");
Hier noch schnell ein Beispielaufruf um eine Verknüpfung "test" im gleichen Ordner wie das Spiel zu erstellen, die auf "c:\blah\app.exe" verweist:
-
Hm, irgendwas funktioniert da nicht. Ich habe mehrere Dateien, Zielordner etc ausprobiert. Wenn das Script ausgeführt wurde, hat man gemerkt, dass sich was tut, aber der Zielordner ist dann doch letztendlich leer geblieben.
Aber danke schon mal bis hierhin -
Was meinst du mit Zielordner? Du musst eine Zieldatei für die zu erstellende Verknüpfung angeben und die Datei des auszuführenden Programms.
Schreib mal folgendes in eine Textdatei und gib ihr anschließend die Endung ".vbs". Dann führ diese Datei mal mit einem Doppelklick aus. Wenn dann im gleichen Ordner eine Verknüpfung namens "test" erscheint hast du wohl irgendwo im GM falsche Parameter angegeben.
Quellcode
- Set Shell = CreateObject("WScript.Shell")
- Set link = Shell.CreateShortcut("test.lnk")
- link.Arguments = "1 2 3"
- link.Description = "test shortcut"
- link.HotKey = "CTRL+ALT+SHIFT+X"
- link.IconLocation = "app.exe,1"
- link.TargetPath = "c:\blah\app.exe"
- link.WindowStyle = 3
- link.WorkingDirectory = "c:\blah"
- link.Save
-
Ah ja, jetzt habe ich es! Danke!
Ich hatte tatsächlich link.WorkingDirectory etwas falsch verstanden. Ich habe dort den Pfad und bei Shell.CreateShortcut lediglich den Namen der gewünschten Verknüpfung angegeben. Aber jetzt funktioniert's
Wozu ist denn dieses link.WorkingDirectory, wenn da was völlig schwachsinniges stehen kann und das Ganze trotzdem funktioniert? -
Im GM gibt es sogar die gleichnamige Variable
welche im Normalfall den Pfad der ausgeführten exe enthält. Indem du link.WorkingDirectory setzt, kannst du dem Programm sozusagen vorgaukeln es würde in einem anderen Verzeichnis ausgeführt. Für gewöhnlich sollte also link.WorkingDirectory den Ordner enthalten, in dem die verknüpfte Anwendung liegt. -
Ach so, habe capice! Merci und Danke, und so...!
-
Da ich jetzt kein neues Thema eröffnen möchte, frage ich jetzt mal hier.
Wie kann ich über den Game Maker einen Batch öffnen?Computer können uns bei Entscheidungen helfen.
Bei welchen müssen wir entscheiden.
________________________________________________________________________________________________________________
Diese Signatur wurde bereits 84 mal editiert, zuletzt von »KillerZwerk« (Jetzt, 14:56) -
Mit execute_program() geht sowas, näheres dazu kannst du in der Hilfe nachlesen.
Aber in der SuFu hättest du bestimmt auch was gefunden... -
Ich hab in die SuFu einfach mal Batch eingegeben hab aber nicht brauchbares gefunden.
Ich werde das dann mal ausprobieren wenn ich wieder an meinen Notebook bin.Computer können uns bei Entscheidungen helfen.
Bei welchen müssen wir entscheiden.
________________________________________________________________________________________________________________
Diese Signatur wurde bereits 84 mal editiert, zuletzt von »KillerZwerk« (Jetzt, 14:56) -
Ich hab es mit execute_program('test.bat','',false) ausprobiert, aber der öffnet die Datei unendlich mal.Computer können uns bei Entscheidungen helfen.
Bei welchen müssen wir entscheiden.
________________________________________________________________________________________________________________
Diese Signatur wurde bereits 84 mal editiert, zuletzt von »KillerZwerk« (Jetzt, 14:56) -
[InUnendlichWeiseGlaßkugelSchau]Ich sehe, das du execute_program('test.bat','',false) im Step-Event ausführst!
Wähle einen Anderen Event, der nur einmal ausgeführt wird und du wirst erfolg haben![\InUnendlichWeiseGlaßkugelSchau]
vielleicht ist es aber auch ein Fehler in der Bat. Wer weiß das schon ohne genau informationenBattle Command - WeltraumEchtzeitStrategie | Meine GM Spiele auf Box.net
GCM/FA/O d-(--)@>---xpu s-:- !a C++$@ U- P L+ E W++ N o K-- w++ O? M V PS PE-- Y PGP t 5 X R+++ tv+ b DI D G e+ h? r-- x -
Ich habe den Script aber nicht im Step Event, sondern im wenn ich auf Enter drücke...
Und die Batch Datei ohne Game Maker öffnet sich nicht unendlich mal.
In der Batch Datei steht nur ein Wort: writeComputer können uns bei Entscheidungen helfen.
Bei welchen müssen wir entscheiden.
________________________________________________________________________________________________________________
Diese Signatur wurde bereits 84 mal editiert, zuletzt von »KillerZwerk« (Jetzt, 14:56) -
Ah, die Glaskugel geht also wieder?
Ich versuch ich mich auch mal.... *konzentrier*
Ich sehe, dass du den Code nicht inKey Press sondern in das normale
Key Event getan hast.
Wenn das nicht klappt, ist sie immer noch putt... -
Die Glaskugel funktioniert wieder.Computer können uns bei Entscheidungen helfen.
Bei welchen müssen wir entscheiden.
________________________________________________________________________________________________________________
Diese Signatur wurde bereits 84 mal editiert, zuletzt von »KillerZwerk« (Jetzt, 14:56)
-
Benutzer online 1
1 Besucher