Guten Abend
Ich hole für ein vermutlich einfaches Problem ziemlich weit aus, daher gibt es einmal die Kurzfassung und einmal die ausführliche Version
Kurzfassung:
Spoiler anzeigen
Wie schaffe ich es dieses Skript aus einer anderen au3 Datei, per Funktion aufrufbar zu machen?
#AutoIt3Wrapper_Au3Check_Parameters=-w 1 -w 2 -w 3 -w 4 -w 5 -w 6
;.......script written by trancexx (trancexx at yahoo dot com)
#include <WindowsConstants.au3>
#include <WinAPI.au3>
#include "GIFAnimation.au3"
Opt("GUICloseOnESC", 1); ESC to exit
Opt("MustDeclareVars", 1)
Global $sTempFolder = @TempDir & "\GIFS"
DirCreate($sTempFolder)
Global $sFile = $sTempFolder & "\Dance.gif"
If Not FileExists($sFile) Then
TrayTip("GIF Download", "Please wait...", 0)
InetGet("http://i241.photobucket.com/albums/ff141/trancexx_bucket/Dance.gif", $sFile)
TrayTip("", "", 0)
EndIf
If Not FileExists($sFile) Then
MsgBox(262192, "Download", "Download failed!")
Exit
EndIf
; Get dimension of the GIF
Global $aGIFDimension = _GIF_GetDimension($sFile)
; Make GUI
Global $hGui = GUICreate("GIF Animation", $aGIFDimension[0], $aGIFDimension[1], -1, -1, $WS_POPUP, BitOR($WS_EX_LAYERED, $WS_EX_TOPMOST))
; GIF job
Global $hGIF = _GUICtrlCreateGIF($sFile, "", 0, 0)
GUICtrlSetTip(-1, "ESC to exit")
; Make GUI transparent
GUISetBkColor(345) ; some random color
_WinAPI_SetLayeredWindowAttributes($hGui, 345, 255) ; making the GUI transparent
_WinAPI_SetParent($hGui, 0)
; Show it
GUISetState()
; Loop till end
While 1
If GUIGetMsg() = - 3 Then Exit
WEnd
Alles anzeigen
Quelle:
https://pastebin.com/n2cpRNS0 & https://pastebin.com/mre6xLhc
Laaaannnnggggeeee Version:
Spoiler anzeigen
Ich habe mir mit Autoit bzw. SciTE4AutoIt3 ein recht umfangreiches Programm erstellt, das soweit auch wie gewünscht funktioniert, allerdings nur solange auf dem System Autoit installiert ist.
Das Programm selbst besteht aus etwa 15 Au3 Dateien, die sich alle im selben Verzeichnis befinden, die einzelnen Skripte werden werden über eine GUI, z.B. über den folgenden Befehl aufgerufen:
Nachdem kompilieren des "Haupt-Skriptes", welches die GUI beinhaltet und dazu verwendet wird alle anderen Skripte aufzurufen, können die au3 Skripte auf einem System auf dem Autoit nicht installiert ist natürlich nicht aufgerufen werden.
(Dies ist mir leider erst im nachhinein aufgefallen, da ich zunächst nicht darüber nachgedacht hatte...)
Normalerweise würde ich die au3 Skripte nun jeweils beispielsweise per
Befehl im Haupt-Skript einbinden und die einzelnen Skripte so umschreiben, dass diese nicht mehr direkt beim aufrufen des Skriptes ausgeführt werden, sondern über eine Funktion gestartet werden. Bei meinen selbst geschrieben Skripten funktioniert das auch, ich habe nun aber in den Tiefen des WWW, eine UDF gefunden, bei der mir das nicht gelingt.
Konkret geht es bei der UDF um ein Programm zum abspielen von animierten GIF Dateien, das Programm besteht aus zwei Teilen, diese können hier Teil1 & hier Teil2 bezogen werden. Die Datei "DancingOnMyScript.au3" wird beim starten sofort ausgeführt und legt fest welche Animation abgespielt werden soll, die Animation selbst wird dann über Funktionen, dankt der "GIFAnimation.au3" Datei abgespielt.
Wenn ich nun jedoch die Zeilen 8-43 des Skriptes "DancingOnMyScript.au3" in eine Funktion packe z.B.:
und diese Funktion anschließend über mein Haupt-Skript ausführe, wird die Animation nicht abgespielt, entweder beendet sich das Haupt-Skript direkt nach dem Start oder aber bleibt in einer Endlosschleife hängen, ohne dass ich nachvollziehen kann warum.
Natürlich habe ich schon versucht mir den Zeitpunkt wann der Fehler auftritt in der Kommandozeile oder per MsgBox ausgeben zu lassen, diese wird aber gar nicht erst aufgerufen...
PS:
Die original URL, die im Skript angegeben ist, gibt es leider nicht mehr, daher sollte diese in Zeile 18 angepasst werden z.B. durch "https://media.giphy.com/media/MF1kR4YmC2Z20/giphy.gif"
PPS: Den Thread GIF-Animation mit GDI+ hatte ich gesehen und auch alle dort genannten Skripte getestet, auch diese werden jedoch immer sofort, direkt nachdem starten der au3 Datei ausgeführt ohne dass dies über eine Funktion gesteuert werden kann...
Außerdem gefällt mir die Version von "trancexx" einfach am besten, da diese die Animation ohne Rahmen darstellen kann und auch die Größe der Animation nicht händisch angegeben werden muss.