Frag mal die Position des Fensters ab. Vielleicht ist es nur außerhalb deines sichtbaren Bildschirmbereiches.
Beiträge von Kanashius
-
-
Du übergibst die E-Mail adresse hier als GET parameter. Das ist im Prinzip nur ein Array, welches mithilfe von z.B. PHP ausgelesen werden kann.
Nur weil du die E-Mailadresse in dieses Array einträgst heißt das noch nicht, dass Youtube das Array einliest und den Wert in das Loginformular einfügt.
Normal wird http auch genutzt, um Formulareingaben vollkommen wegzulassen.
Im Formular schaust du dir die Value-Werte der Inputfelder an und bei dem Form-Tag schaust du ob POST oder GET verwendet wird. Dann kannst du diese mit http übertragen und den Folgelink, der ebenfalls im Form-Tag steht, aufrufen. Das login-feld wird also garnicht gebraucht.
-
Ich kann in deinem Code nichts entdecken, was das Problem erklären würde...
Meine Vermutungen wären: Bei den guisetstate() befehlen das fenster mitübergeben, vielleicht wird da was durcheinandergebracht...
Ansonsten: Von welchem Benutzer wird dein Dienst ausgeführt? Wenn du den Dienst z.B. vom System ausführen lässt und dort einen anderen Prozess startest läuft dieser ebenfalls im System-Benutzer und das Fenster taucht bei dir als User XXX nicht auf. Stattdessen würde das Fenster bei dem System-User erscheinen, bzw. garnicht, da man sich nicht als dieser einloggen kann.
Ein Befehl, den ich auf die schnelle gefunden habe:
Wenn du das dann in AutoIT umsetzt mit dir als Nutzer, oder dem Aktuellen Nutzer, sollte es klappen

MfG Kanashius
-
Ich mag die Resizefunktion von Autoit nicht wirklich... dort treten öfter glitches auf und es wird nicht genauso skaliert, wie ich es gerne haben möchte. Deshalb bau ich mir das Resizen immer selbst.
Beispiel:
AutoIt
Alles anzeigen#include <GuiConstants.au3> #include <WindowsConstants.au3> #include <WinApi.au3> AutoItSetOption("GUIResizeMode",$GUI_DOCKALL) Global $iWidth=800,$iHeight=600 Global $hMainGui,$iMainListView,$arButtons=[["Button 1",0,0],["Button 2",0,0],["Button 3",0,0],["Button 4",0,0]],$iButtonLabelWidth=200,$iButtonWidth=300,$iButtonHeight=25 $hMainGui=GUICreate("",$iWidth,$iHeight,-1,-1,BitOR($WS_MINIMIZEBOX,$WS_CAPTION,$WS_POPUP,$WS_SYSMENU,$WS_MAXIMIZEBOX,$WS_SIZEBOX)) for $i=0 to UBound($arButtons)-1 step 1 $arButtons[$i][1]=GUICtrlCreateLabel("Dies ist: ",5,5,5,5) $arButtons[$i][2]=GUICtrlCreateButton($arButtons[$i][0],5,5,5,5) next $iMainListView=GUICtrlCreateListView("",5,5,5,5) ;Dein Fenster erstellen GUIRegisterMsg($WM_SIZE,"_updateWinSize") _updateWinSize($hMainGui) GUISetState() While sleep(10) If GUIGetMsg()=-3 then exit WEnd Func _updateWinSize($hwnd,$iMsg=-1,$iWParam=-1,$iLParam=-1) If $hwnd=$hMainGui Then local $tRect=_WinAPI_GetClientRect($hMainGui) local $iClientWidth=DllStructGetData($tRECT, "Right")-DllStructGetData($tRECT, "Left") local $iClientHeight=DllStructGetData($tRECT, "Bottom")-DllStructGetData($tRECT, "Top") ;Hier dann alle Controls positionieren For $i=0 to UBound($arButtons)-1 step 1 GUICtrlSetPos($arButtons[$i][1],5,5+$i*($iButtonHeight),$iButtonLabelWidth,$iButtonHeight) GUICtrlSetPos($arButtons[$i][2],5+$iButtonLabelWidth+5,5+$i*($iButtonHeight),$iButtonLabelWidth,$iButtonHeight) Next local $iButtonEndHeight=5+(UBound($arButtons)*($iButtonHeight+5)) GUICtrlSetPos($iMainListView,5,$iButtonEndHeight+5,$iClientWidth-10,$iClientHeight-10-$iButtonEndHeight) EndIf EndFuncDabei nutze ich, wenns geht auch Arrays, da diese das Positionieren vereinfach. Außerdem sollte man gerade in der Resizefunktion viele Variablen nutzen.
Die meisten "Festen" Abstände lege ich auch als globale Variablen oben an, sodass ich dort später einfach einen Pixelwert ändern kann um das Design anzupassen.
Das bauen der Resize funktion kann aber bei komplexen Fenstern schnell unübersichtlich werden. Also immer viele und Aussagekräftige Variablen nutzen

MfG Kanashius
-
-
Sqlite braucht man eigentlich nur 6 Befehle:
_SQLite_Startup EInmal zum initialisieren
_SQLite_Shutdown Einmal beim beenden des Programmes
_SQLite_Open Zum öffnen einer Datenbankdatei
_SQLite_Close Zum schließen einer Datenbankdatei
_SQLite_Exec Zum Einfügen, Löschen, Bearbeiten,....
_SQLite_GetTable2D Zum abfragen von Daten
Dazu muss man noch SQL lernen. Und die besonderheiten dabei von SQLite berücksichtigen, dort wird nämlich nicht alles Unterstützt.
Hier findet man für den Anfang alles wichtige: https://www.tutorialspoint.com/sqlite/index.htm
Ansonsten in meinem Tool nach dem Exec und GetTable2D Befehl suchen, dort hab ich einige genutzt

MfG Kanashius
-
Ich wollte schon länger ein solches Programm schreiben und hab die letzten Tage daran gebastelt.
Ich hab das Programm jetzt fertig, du kannst es hier finden: TVShow Manager - Serienverwaltung
Es kann eigentlich alles, was du hier auch genannt hast.
Ich arbeite im Moment auch an einem größeren Verwaltungstool, allerdings in Java. Dort werde ich eine ähnliche Serienverwaltung ebenfalls implementieren, nur mit mehr Funktionen. Da das Projekt aber sehr umfangreich ist (Ich hab bisher fast nur Interfaces und kleinere Klassen und bin schon bei mehr als 6000 Zeilen Code...) und ich noch nicht weiß, wie lange ich dafür noch brauche hab ich das hier jetzt mit AutoIt geschrieben.
Wenn du dir den Quellcode ansiehst kannst du auch einiges lernen. Ich hab versucht, etwas auf guten Stil zu achten (Kommentare habe ich aber vernachlässigt :D). Dies Tool hat jetzt fast 1100 Zeilen :).
MfG Kanashius
-
Ich wollte schon länger ein Tool zum verwalten der Serien, die ich bereits gesehen habe, schreiben.
Inspiriert durch den Thread Brauche ein klein wenig hilfe für mein neues projekt: Mein Serienmanager habe ich jetzt ein Programm geschrieben, wo ich alle Serien eintragen kann, sodass ich nicht den Überblick verliere :).
Eingebaut habe ich die Möglichkeit Serien hinzuzufügen, anzugeben, wie weit man bereits gesehen hat und die Serie zu bewerten. Außerdem werden Informationen über die Serie angezeigt.
Durch nutzen der "The Move Database" Webseite Webseite können Serien auch gesucht werden und dann die passende Serie ausgewählt werden. Die Infos zu der Serie werden dann automatisch übernommen.
Mithilfe der Webseite habe ich auch die Funktion hinzugefügt, mit der bei allen in Produktion befindlichen Serien nach neuen Episode gesucht werden kann. Es wird also automatisch geupdatet.
WICHTIG:
Um die Funktionen zu nutzen, die TheMovieDatabase betreffen muss der API-KEY in der settings.ini unter general->TheMoveDBApiKey gespeichert werden. Erst dann kann das Automatische updaten und die Suche der Webseite genutz werden!
Um einen Apikey zu bekommen müsst ihr euch auf der Seite anmelden.
Unter Einstellungen->API findet ihr den Key

Screenshots
Das leere Eingabeformular um eine Serie hinzuzufügen:Das Suchfeld für Serien:
Die automatisch bezogenen Daten von der Webseite:
Die Liste mit den Serien (nach Genre gefiltert). (Gelb markiert sind Serien die noch nicht fertig geschaut wurden.):
Features/Anleitung:
- In der Serienliste werden Serien, die noch nicht fertiggeschaut wurden, GELB markiert.
- Es können mehrere Genres ausgewählt werden, oder All für alle Serien. Um nur ein Genre auszuwählen kann ein Doppelklick genutzt werden.
- Wird eine Serie ausgewählt, werden weitere Infos angezeigt.
- Wird eine Serie Doppelklickt kann sie bearbeitet werden.
- Unter Edit können neue Serien hinzugefügt werden.
- Neue Episode suchen: Unter Edit den Menüeintrag wählen. Danach wird automatisch bei allen Serien, welche den Produktionsstatus "In Production", haben nach neuen Folgen gesucht.
Je nach Menge der Serien kann dies einen Moment dauern!- Serieninfos und /LastSeen-Season/-Episode: Es gibt unten eine Tabelle. Dort werden alle Seasonnummern mit Anzahl der Episoden gespeichert. Nur Infos die dort eingegeben wurden können oben als LastSeen ausgewählt werden!
- Die TMDB-ID hat extra eine Checkbos, damit die ID nicht ausversehen geändert wird. Will man manuell die Daten einer Serie nachträglich beziehen, kann sie aber dort angegeben werden und auf Update geklickt werden.
- Genres können im Serieneditor hinzugefügt werden. TMDB-Genres werden beim anwählen der Serie automatisch hinzugefügt.
- Zum ändern des Bildes kann eine URL angegeben werden, ebenso wie ein Pfad auf dem Computer.
- Über Season/Episode count wird nachgeschaut, ob eine Serie neue folgen hat. Danach erst werden die Seasoninfos abgefragt.
Changelog
v1.0.0:- Initial release
v1.0.1:
- Fixed Searchinput errors with not allowed Characters
- Fixed Insert with Title/Description not allowed
- (Fixed)[Workarount] Bug not displaying an added series, cause no initial genre was selected
Viel Spaß mit dem Tool, ich würde mich freuen, wenn euch das Programm gefällt.
Bugs und Features auch gerne an mich :).
Mit freundlichen Grüßen, Kanashius.
-
1. Was ein Pfad ist sollte man wissen oder es googlen... man kann nicht an jeder Funktion Grundkenntnisse erläutern. Dann wäre die Hilfe viel zu groß und unübersichtlich.
2. Es sind die Empfohlenen schreibweisen. Funktionieren tut es in beide Richtungen und es ändert auch nur die Reihenfolge in der gesucht wird. Die Reihenfolge steht sogar in einer Tabelle drunter... Sticht vielleicht nicht sofort ins Auge...
3. (Ob dann auch #include <F:\temp\*.au3> funktionieren würde) => Wildcards funktionieren nie! Wenn doch steht es dabei. Das ist einfach eine Grundannahme, da sie bei Pfaden normal nicht gehen.
4. Die Reihenfolge ist selten wichtig. Hin und wieder kommt es vor, dass man unterschiedliche Versionender Dateien hat und dann genau die im Scriptverzeichnis suchen will. Außerdem weiß dann jeder, der sich das Script nochmal anschaut, warum die Includes evtl. nicht Funktionieren => Includeordner fehlt,...
Ist jetzt keine Kritik an dir, aber deine Schwierigkeiten hängen meiner Meinung nach einfach damit zusammen, dass die Hilfe eine Dokumentation ist. Das ist kein Tutorial oder eine Komplettanleitung. Gewissen Kenntnisse werden vorrausgesetzt und nicht jedesmal erläutert (auch um Redundanzen zu vermeiden). Man gewöhnt sich nach einer Weile daran. Die AutoIt-Hilfe ist dabei schon SEHR entgegenkommend und erklärt viel. Wenn ich mir die C/C++, Java und WinApi ansehe... die sind teilweise der Horror. Insbesondere die Beispiele bei fast jeder Funktion sind ein richtiges Geschenk.
-
AutoIt
While Sleep(10);statt 10 hier die Wartezeit zum nächsten aufruf in millisekunden angeben xml() WEndDu solltest für die Grundlagen in der Hilfe unter "Language Reference" schauen. Dort sind alle Grundlegenden Befehle/verwendungen erläutert. Danach fehlen nurnoch Arrays, sowie die Kenntnis der existierenden Funktionen, welche alle in der Hilfe zu finden sind.
-
Das hier ist mit einem minimalbeispiel gemeint:
AutoIt
Alles anzeigen#include <GuiTreeView.au3> #include <GUIConstantsEx.au3> Global $iWidth=800,$iHeight=600 $hGui=GUICreate("Test",$iWidth,$iHeight) $iTreeview=GUICtrlCreateTreeView(10,10,$iWidth-20,$iHeight-20) GUISetState() _GUICtrlTreeView_CreateDirectory($iTreeview,@ScriptDir,true) If @error Then MsgBox(16,"Error","Error creating Filetree: "&@error) _updateIcons($iTreeview) While Sleep(10) $msg=GUIGetMsg() If $msg=-3 Then Exit WEnd Func _updateIcons($iTreeview) $item=_GUICtrlTreeView_GetFirstItem($iTreeview) If NOT $item=0 Then _updateIconsRec($iTreeview,$item,_GUICtrlTreeView_GetText($iTreeview,$item)) EndFunc Func _updateIconsRec($iTreeview,$hItem,$sPath) $child=_GUICtrlTreeView_GetFirstChild($iTreeview,$hItem) While NOT $child=0 $sChildPath=$sPath&"\"&_GUICtrlTreeView_GetText($iTreeview,$child) If StringInStr(FileGetAttrib($sChildPath),"D") Then _updateIconsRec($iTreeview,$child,$sChildPath) Else _checkEntry($iTreeview,$child,$sChildPath) EndIf $child=_GUICtrlTreeView_GetNextChild($iTreeview,$child) WEnd EndFunc Func _checkEntry($iTreeview,$hItem,$sPath) If StringInStr($sPath,".txt") Then ;Change this condition to match yours _GUICtrlTreeView_SetIcon($iTreeview,$hItem,'shell32.dll',110) Else _GUICtrlTreeView_SetIcon($iTreeview,$hItem,'shell32.dll',3) EndIf EndFunc ;=============================================================================== ; Function Name: _GUICtrlTreeView_CreateDirectory($hTreeView, $sPath, $bFiles) ; Description:: erstellt ein TreeView mit Verzeichnissen (+Dateien) ; Parameter(s): $hTreeView = ControlID/Handle des TreeViews ; $sPath = Verzeichnispfad, der dargestellt werden soll ; $bFiles = True = auch Dateien anzeigen, False = nur Verzeichnisse ; Requirement(s): #include<GuiTreeView.au3> ; Return Value(s): Array mit Anzahl der Verzeichnisse=[0] und Dateien=[1] ; 0 und @error = 1, wenn der Pfad nicht existiert bzw. kein Verzeichnis ist ; 0 und @error = 2, wenn das FileSystemObject nicht erstellt werden konnte ; Author(s): Oscar (www.autoit.de) ;=============================================================================== Func _GUICtrlTreeView_CreateDirectory($hTreeView, $sPath, $bFiles = False) Local $hFileItem, $FolderColor = 0x0000FF, $Folder, $aCount[2] = [0, 0] If Not StringInStr(FileGetAttrib($sPath), 'D') Then Return SetError(1, 0, 0) $sPath = FileGetLongName($sPath) Local $oFSO = ObjCreate('Scripting.FileSystemObject') If @error Then Return SetError(2, 0, 0) _GUICtrlTreeView_BeginUpdate($hTreeView) _GUICtrlTreeView_DeleteAll(GUICtrlGetHandle($hTreeView)) Local $hTreeViewItem = GUICtrlCreateTreeViewItem($sPath, $hTreeView) GUICtrlSetColor(-1, $FolderColor) ;~ $read_reservierung = FileReadLine(StringReplace(_GUICtrlTreeView_GetTree($hTreeView), '\\', '\'),5) ;~ If $read_reservierung = 4 then _GUICtrlTreeView_SetIcon($hTreeView, $hTreeViewItem, 'shell32.dll', 134) ;Icon 111 ;~ Else ;~ _GUICtrlTreeView_SetIcon($hTreeView, $hTreeViewItem, 'shell32.dll', 77) ;~ EndIf $Folder = $oFSO.GetFolder($sPath) _CreateDirectoryRecursive($hTreeView, $Folder, $hTreeViewItem, $bFiles, $aCount) If $bFiles Then For $Files In $Folder.Files $hFileItem = GUICtrlCreateTreeViewItem($Files.Name, $hTreeViewItem) $aCount[1] += 1 Next EndIf _GUICtrlTreeView_SetIcon($hTreeView, $hTreeViewItem, 'shell32.dll', 3, 2) _GUICtrlTreeView_SetIcon($hTreeView, $hTreeViewItem, 'shell32.dll', 110, 4) _GUICtrlTreeView_EndUpdate($hTreeView) GUICtrlSetState($hTreeViewItem, $GUI_EXPAND) $oFSO = '' Return $aCount EndFunc ;==>_GUICtrlTreeView_CreateDirectory Func _CreateDirectoryRecursive($hTreeView, $Folder, $ItemOld, $bFiles, ByRef $aCount) Local $hFolderItem, $hFileItem, $FolderColor = 0x0000FF For $Subfolder In $Folder.SubFolders $hFolderItem = GUICtrlCreateTreeViewItem($Subfolder.Name, $ItemOld) GUICtrlSetColor(-1, $FolderColor) _GUICtrlTreeView_SetIcon($hTreeView, $hFolderItem, 'shell32.dll', 3, 2) _GUICtrlTreeView_SetIcon($hTreeView, $hFolderItem, 'shell32.dll', 110, 4) $aCount[0] += 1 _CreateDirectoryRecursive($hTreeView, $Subfolder, $hFolderItem, $bFiles, $aCount) If $bFiles Then For $Files In $Subfolder.Files $hFileItem = GUICtrlCreateTreeViewItem($Files.Name, $hFolderItem) $aCount[1] += 1 Next EndIf Next EndFunc ;==>_CreateDirectoryRecursiveUnd das funktioniert bei mir ohne Probleme

Schau dir das mal durch, vielleicht findest du dann den Fehler in deinem Script :).
(Oft findet man den Fehler selbst, wenn man ein solches Minimalbeispiel baut.)
MfG Kanashius.
-
Das beste Workaround, das ich gefunden habe wäre dieses: Die Progressbar wird versteckt, dann gefüllt und erst danach angezeigt. Dadurch taucht (je nachdem, wo man das guisetstate hinpackt) die Progressbar entweder später auf, oder das gesamte Fenster.
AutoIt
Alles anzeigen#include <GUIConstantsEx.au3> Global $iWidth=800,$iHeight=100 $hGui=GUICreate("",$iWidth,$iHeight) $iProgressbar=GUICtrlCreateProgress(10,10,$iWidth-20,$iHeight-20) GUICtrlSetState($iProgressbar,$GUI_HIDE) GUICtrlSetData($iProgressbar,100) Sleep(500) GUICtrlSetState($iProgressbar,$GUI_SHOW) GUISetState() While Sleep(10) If GUIGetMsg()=-3 Then exit WEndMit freundlichen Grüßen, Kanashius

-
Was du suchst geht mit WM_COMMAND (Schau mal bei _GuiCtrlComboBox_Create)
So funktionierts:
AutoIt
Alles anzeigen#Region ;************ Includes ************ #Include <WindowsConstants.au3> #include <GuiComboBoxEx.au3> #include <GUIConstantsEx.au3> #include <GuiImageList.au3> #EndRegion ;************ Includes ************ Opt("GUIOnEventMode", 1) $hGui = GUICreate("Test", 400, 300) GUISetState(@SW_SHOW) Global $idCombo = _GUICtrlComboBoxEx_Create($hGui, "", 10, 10, 170, 200, $CBS_DROPDOWNLIST) Global $hImagelist = _GUIImageList_Create(32, 32, 5, 3) _GUICtrlComboBoxEx_SetImageList($idCombo, $hImagelist) _GUIImageList_AddIcon($hImagelist, "shell32.dll", 10, True) _GUICtrlComboBoxEx_AddString($idCombo, "Test", 0, 0) Global $idCombo2 = _GUICtrlComboBoxEx_Create($hGui, "", 10, 100, 170, 200, $CBS_DROPDOWNLIST) _GUICtrlComboBoxEx_AddString($idCombo2, "Test") GUISetOnEvent($GUI_EVENT_CLOSE, "_exit") GUIRegisterMsg($WM_COMMAND, "WM_COMMAND") While 1 Sleep(10) WEnd Func _exit() Exit EndFunc ;==>_exit Func WM_COMMAND($hWnd, $iMsg, $wParam, $lParam) #forceref $hWnd, $iMsg Local $hWndFrom, $iIDFrom, $iCode $hWndFrom = $lParam $iIDFrom = BitAND($wParam, 0xFFFF) ; Low Word $iCode = BitShift($wParam, 16) ; Hi Word ;ConsoleWrite($iCode&@crlf) Switch $hWndFrom Case $idCombo Switch $iCode Case $CBN_SELCHANGE ConsoleWrite("SelectedIndex: "& _GUICtrlComboBoxEx_GetCurSel($idCombo) & @CRLF) Return 0 EndSwitch Case $idCombo2 Switch $iCode Case $CBN_SELCHANGE ConsoleWrite("SelectedIndex: "& _GUICtrlComboBoxEx_GetCurSel($idCombo) & @CRLF) Return 0 EndSwitch EndSwitch EndFunc -
Wenn es dir darum geht, dass die Schrift sichtbar sein soll würd ich vorschlagen, dass du es machst, wie man es im Internet ständig sieht: Weiße Schrift mit schwarzem Rahmen.
Falls es dir um die "weißen" Pixelfehler um das Label geht: Diese entstehen durch das Antialiasing, bei denen Windowslabels wohl weiß als Hintergrund nehmen.
Ich würde emüfehlen, dass du den Text direkt mit den GDI-Befehlen auf das Fenster malst und nicht mit Labels. Dann lässt sich der Rahmen auch hinzufügen.
MfG Kanashius.
-
Herzlich Willkommen im AutoIt Forum

Wenn du dich mit einer recht einfachen Programmiersprache beschäftigen möchtest und ein bisschen was automatisieren, oder ein kleines Programm (mit Fenster) schreiben möchtest, dann bist du hier genau richtig.
AutoIt eignet sich hervorragend zum lernen von Programmieren, insbesondere, weil man recht schnell und einfach gute Ergebnisse produzieren kann

Ich hab auch mit AutoIt Programmieren gelernt, also viel Spaß dabei und nicht verzagen, wenns am Anfang nicht so einfach zu sein scheint

Wenn du nicht weiterkommst: Einfach in Hilfe & Unterstützung posten, dann wird dir bestimmt schnell geholfen

Mit freundlichen Grüßen, Kanashius.
-
Du hast zwei Whileschleifen. Einmal die des Fensters und die mit dem $On. Du bist in der ersten Schleife, also wird die zweite erst aufgerufen, wenn die erste verlassen wurde. Du musst beide Schleifen kombinieren.
Grund: Programmiersprachen laufen von oben nach unten durch (Sprünge/Funktionen,... mal abgesehen).
Generell solltest du keinen Code nach/zwischen Funktionen schreiben, das ist schlechter Stil, weil es sehr schnell unübersichtlich wird.
Tipp: Um ein boolean zu invertieren reicht $On=Not $On
Ich hab einen Timer hinzugefügt, damit während der 5 Sekunden warten das Fenster weiterhin reagiert.
AutoIt
Alles anzeigen#include <GUIConstantsEx.au3> #include <StaticConstants.au3> #include <WindowsConstants.au3> Global $bIsOn = False,$iTimer HotKeySet("s","StartStop") HotKeySet("e", "_Exit") #Region ### START Koda GUI section ### Form= $Form1 = GUICreate("Form1", 220, 148, 258, 227) $Label1 = GUICtrlCreateLabel("Start/Stop = s", 16, 8, 124, 29) GUICtrlSetFont(-1, 15, 400, 0, "MS Sans Serif") $Label2 = GUICtrlCreateLabel("Exit = e", 16, 40, 69, 29) GUICtrlSetFont(-1, 15, 400, 0, "MS Sans Serif") GUISetState(@SW_SHOW) #EndRegion ### END Koda GUI section ### While 1 $nMsg = GUIGetMsg() Switch $nMsg Case $GUI_EVENT_CLOSE Exit EndSwitch If $bIsOn Then If TimerDiff($iTimer)>5000 Then ;damit nur alle 5 Sekunden gesendet wird ;den zeitunterschied zwischen TimerInit und diesem Ausruf prüfen Send(1) $iTimer=TimerInit() ;Timer aktualisieren EndIf EndIf WEnd Func _Exit() Exit EndFunc Func StartStop() $bIsOn = Not $bIsOn EndFunc -
Ich hab mal eine kleine Updatefunktion erstellt.
Es funktioniert so: Du erstellst deinen Ordner. Dort platzierst du beliebig viele .exe Dateien. Diese werden mit der Version benannt. z.B. programm_v1.0.0.exe oder programm_v1.0.2
Diesen Ordner gibst du in dem Script unten an unter $sProgrammFolder. Wenn du eine neue Version des Programmes erstellst benennst du die Variable $sVersion um auf die neue Version. Dann compilierst du die Datei und benennst sie mit dem _v0.0.0 und verschiebst sie in das Verzeichnis.
Wird ein Update ausgeführt werden alle Dateien in dem Verzeichnis ausgelesen und auf den Versions String verglichen. Deshalb muss das Muster erhalten bleiben. _v(BELIEBIG VIELE ZAHLEN).(BELIEBIG VIELE ZAHLEN).(BELIEBIG VIELE ZAHLEN).exe ,der Rest ist offen.
Die Funktion kopiert die Datei, benennt die Datei um, sodass der alte Dateiname erhalten bleibt und startet dieses Programm dann wieder.
Deinen Code schreibst du dort wo das _makeUpdate() aufgerufen wird. Das kannst du dann auch bei einem Buttonklick,... ausführen.
Ich hoffe, das ist genau das, was du gesucht hast.
MfG Kanashius
AutoIt
Alles anzeigen#include <file.au3> Global $sProgrammFolder=@ScriptDir&"\versions",$sVersion="1.0.0" ;If startet with parameter "-version" the programm will print the version in stdout and exit If $CmdLine[0]>0 and $CmdLine[1]="-version" Then ConsoleWrite($sVersion) exit ElseIf $CmdLine[0]>0 and $CmdLine[1]="-updated" Then MsgBox(48,"Information","Software successfully updated to version: "&$sVersion&".") EndIf ;perform Update _makeUpdate() Func _makeUpdate() $iUpdate=_update($sProgrammFolder) If $iUpdate<0 Then MsgBox(16,"Error at Update","Update Failed!"&@crlf&"Error: "&@error&@crlf&"Extended: "&@extended) ElseIf $iUpdate=0 Then MsgBox(48,"Information","No update available. The Actual Version is: "&$sVersion&".") EndIf EndFunc Func _update($sPath) ;read version of this programm (NEED TO BE A COMPILED EXE!) Local $iProgramm = Run(StringReplace(@ScriptFullPath,".au3",".exe")&" -version", "", @SW_HIDE, 2+4) If @error Then return SetError(1,@error,-1) Local $sActVersion="" While sleep(10) $sActVersion &= StdoutRead($iProgramm) if @error then exitloop WEnd Local $arActVersion=StringSplit($sActVersion,".",1+2) ;read newest version from folder Local $arFiles=_FileListToArray($sPath,"*.exe",1,true) If @error Then return SetError(1,@error,-1) Local $sNewestFile=-1 For $i=1 To UBound($arFiles)-1 step 1 $arVersion=StringRegExp($arFiles[$i],"(?:.*?)_v(\d+)\.(\d+)\.(\d+)\.exe",1) If NOT @error Then If Int($arActVersion[0])<Int($arVersion[0]) Then ;Check Versionnumber 1 $sNewestFile=$arFiles[$i] $arActVersion=$arVersion ElseIf Int($arActVersion[0])=Int($arVersion[0]) Then If Int($arActVersion[1])<Int($arVersion[1]) Then ;Check Versionnumber 2 $sNewestFile=$arFiles[$i] $arActVersion=$arVersion ElseIf Int($arActVersion[1])=Int($arVersion[1]) Then If Int($arActVersion[2])<Int($arVersion[2]) Then ;Check Versionnumber 3 $sNewestFile=$arFiles[$i] $arActVersion=$arVersion EndIf EndIf EndIf EndIf Next $sNewPath=StringReplace($sNewestFile,$sPath,@ScriptDir) If $sNewPath=-1 Then return 0 ;No newer Version available FileCopy($sNewestFile,$sNewPath,1) Local $sCommand = 'ping 127.0.0.1 -n 3 > nul & del "'&StringReplace(@ScriptFullPath,".au3",".exe")&'" & ren "'&$sNewPath&'" "'&StringReplace(@ScriptName,".au3",".exe")&'" & start "" "'&StringReplace(@ScriptFullPath,".au3",".exe")&'" "-updated" & pause' Run(@ComSpec & " /C " & $sCommand,"",@SW_HIDE) If @error Then return SetError(2,@error,-1) Else exit EndIf EndFunc -
Ich hab grundsätzlich Interesse.
Wichtig wäre, um welche Software es sich handelt, denn davon hängt maßgeblich ab, wie viel Aufwand dahinter steckt.
Du kannst mir gerne eine PM mit weiteren Infos schreiben :).
MfG Kanashius.
-
Deaken Falls du mit SciTe programmierst: drück mal F5, dann wird das Programm direkt kompiliert und ausgeführt. Die Ausgabe steht dann in dem Fenster unten. Dann hast du auch eine vernünftige Zeile angegeben.
Das Problem ist, dass alle Includes vor deinen Code kopiert werden, wenn du nicht fürs Debuggen kompilierst => Du bekommst die Zeile, mit allen Includes (Inhalt von MsgBoxConstants.au3,...) davor

-
Falls du nur was zum Faden brauchst, und nicht selbst Programmieren möchtest hab ich hier noch nen älteres Projekt von mir: MusikPlayer mit Equalizer,Playlist, etc.
Damit kann man Lieder abspielen und auch Faden (mit bestimmter Zeit,...), mehrere Playlists, Equalizer, Streams,...
Eventuell solltest du dir auch VirtualDJ mal ansehen
