1. Dashboard
  2. Mitglieder
    1. Letzte Aktivitäten
    2. Benutzer online
    3. Team
    4. Mitgliedersuche
  3. Forenregeln
  4. Forum
    1. Unerledigte Themen
  • Anmelden
  • Registrieren
  • Suche
Alles
  • Alles
  • Artikel
  • Seiten
  • Forum
  • Erweiterte Suche
  1. AutoIt.de - Das deutschsprachige Forum.
  2. Mitglieder
  3. Kanashius

Beiträge von Kanashius

  • Frage zum Microsoft Edge-Browser

    • Kanashius
    • 19. April 2018 um 13:06

    Frag mal die Position des Fensters ab. Vielleicht ist es nur außerhalb deines sichtbaren Bildschirmbereiches.

  • WinHttp Login funktioniert im Browser aber nicht über AUTOIT

    • Kanashius
    • 5. April 2018 um 21:03

    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.

  • Prozess startet ohne GUI

    • Kanashius
    • 5. April 2018 um 20:57

    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:

    Code
    runas /user:cybuser@charlottenburg "cybcli.exe"

    Wenn du das dann in AutoIT umsetzt mit dir als Nutzer, oder dem Aktuellen Nutzer, sollte es klappen :)

    MfG Kanashius

  • GUI resizeable gestalten

    • Kanashius
    • 27. März 2018 um 18:56

    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
    #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
    EndFunc
    Alles anzeigen

    Dabei 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

  • GUI: Verhindern, dass Neustart durchgeführt wird und die Meldung "Das Programm verhindert, dass Windows abgemeldet wird." aufkommt

    • Kanashius
    • 24. März 2018 um 10:35

    Normal müsste es unter Windows reichen, ein Fenster zu erstellen, welches sich beim "Schließen" Befehl nicht schließt, sondern blockiert. Ob sichtbar oder nicht ist glaub ich egal.

  • Brauche ein klein wenig hilfe für mein neues projekt: Mein Serienmanager

    • Kanashius
    • 17. März 2018 um 10:35

    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

  • Brauche ein klein wenig hilfe für mein neues projekt: Mein Serienmanager

    • Kanashius
    • 16. März 2018 um 17:04

    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

  • TVShow Manager - Serienverwaltung

    • Kanashius
    • 16. März 2018 um 16:54

    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:



    empty.png

    Das Suchfeld für Serien:

    search.png

    Die automatisch bezogenen Daten von der Webseite:

    edit.png

    Die Liste mit den Serien (nach Genre gefiltert). (Gelb markiert sind Serien die noch nicht fertig geschaut wurden.):

    list.png

    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.

    Dateien

    TVShowManager_bin_v1_0_1.7z 941,46 kB – 569 Downloads TVShowManager_src_v1_0_1.zip 357,7 kB – 585 Downloads
  • Fehler in der deutschen Hilfe bitte hier melden (Hilfedatei 3.3.14.2 2018.01.20)

    • Kanashius
    • 14. März 2018 um 01:08

    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.

  • Ordner überprüfen verschiedene Arbeiten ausführen und das ganze als Dauerschleife

    • Kanashius
    • 11. März 2018 um 18:59
    AutoIt
    While Sleep(10);statt 10 hier die Wartezeit zum nächsten aufruf in millisekunden angeben
        xml()
    WEnd

    Du 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.

  • Treeview Icons einzeln ändern

    • Kanashius
    • 3. März 2018 um 14:27

    Das hier ist mit einem minimalbeispiel gemeint:

    AutoIt
    #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   ;==>_CreateDirectoryRecursive
    Alles anzeigen

    Und 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.

  • Progressbar für Countdown rückwärtslaufen lassen

    • Kanashius
    • 27. Februar 2018 um 17:53

    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
    #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
    WEnd
    Alles anzeigen

    Mit freundlichen Grüßen, Kanashius :)

  • _GUICtrlComboBoxEx_Create - ausgewählten Wert ermitteln

    • Kanashius
    • 10. Februar 2018 um 16:38

    Was du suchst geht mit WM_COMMAND (Schau mal bei _GuiCtrlComboBox_Create)

    So funktionierts:

    AutoIt
    #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
    Alles anzeigen
  • GUI transparenter Hintergrund und Schrift

    • Kanashius
    • 9. Februar 2018 um 15:56

    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.

  • Hallochen allerseits

    • Kanashius
    • 7. Februar 2018 um 22:01

    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.

  • Start/Stop funktioniert nur ohne GUI

    • Kanashius
    • 6. Februar 2018 um 02:31

    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
    #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
    Alles anzeigen
  • Update Funktion

    • Kanashius
    • 31. Januar 2018 um 16:09

    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
    #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
    Alles anzeigen
  • Erstellung einer Anwendung

    • Kanashius
    • 26. Januar 2018 um 22:06

    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.

  • Viele Sub-Funktionen in einer main Funktion hinzufügen/entfernen

    • Kanashius
    • 10. Januar 2018 um 13:38

    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 ;)

  • Mehrere MP3 Dateien in unterschiedlicher Lautstärke abspielen

    • Kanashius
    • 13. Dezember 2017 um 16:02

    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 :)

Spenden

Jeder Euro hilft uns, Euch zu helfen.

Download

AutoIt Tutorial
AutoIt Buch
Onlinehilfe
AutoIt Entwickler
  1. Datenschutzerklärung
  2. Impressum
  3. Shoutbox-Archiv
Community-Software: WoltLab Suite™