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

Beiträge von Oscar

  • Variabeln zusammensetzen

    • Oscar
    • 15. September 2017 um 10:25

    Es gäbe auch noch die Möglichkeit, Richtig oder Falsch in die Antworten zu speichern:

    Spoiler anzeigen
    AutoIt
    #include <GUIConstantsEx.au3>
    #include <StaticConstants.au3>
    
    Global $aQA[6][5] = [ _
    [' Frage1', 'rAntwort1', 'fAntwort2', 'fAntwort3', 'fAntwort4'], _
    [' Frage2', 'fAntwort1', 'rAntwort2', 'fAntwort3', 'fAntwort4'], _
    [' Frage3', 'fAntwort1', 'fAntwort2', 'rAntwort3', 'fAntwort4'], _
    [' Frage4', 'fAntwort1', 'fAntwort2', 'fAntwort3', 'rAntwort4'], _
    [' Frage5', 'rAntwort1', 'fAntwort2', 'fAntwort3', 'fAntwort4'], _
    [' Frage6', 'fAntwort1', 'rAntwort2', 'fAntwort3', 'fAntwort4']]
    
    Global $hGui = GUICreate('Quiz', 640, 200)
    Global $aidQA[5], $iCount = 0, $iIndex
    $aidQA[0] = GUICtrlCreateLabel('', 10, 10, 600, 25, $SS_CENTER)
    GUICtrlSetFont(-1, 14, 400, 0, 'Arial')
    For $i = 0 To UBound($aidQA) - 2
        $aidQA[$i + 1] = GUICtrlCreateButton('', 20 + Mod($i, 2) * 320, 50 + Int($i / 2) * 50, 280, 30)
        GUICtrlSetFont(-1, 14, 400, 0, 'Arial')
    Next
    _NextQuestion()
    GUISetState()
    Global $aMsg
    While True
        $aMsg = GUIGetMsg(1)
        Switch $aMsg[0]
            Case $GUI_EVENT_CLOSE
                Exit
            Case $aidQA[1] To $aidQA[4]
                $iIndex = $aMsg[0] - $aidQA[0]
                If StringLeft($aQA[$iCount][$iIndex], 1) = 'r' Then
                    MsgBox(0, 'Antwort', 'Richtig!')
                Else
                    MsgBox(0, 'Antwort', 'Falsch!')
                EndIf
                $iCount += 1
                If $iCount = UBound($aQA) Then $iCount = 0
                _NextQuestion()
        EndSwitch
    WEnd
    
    Func _NextQuestion()
        For $i = 0 To UBound($aidQA) - 1
            GUICtrlSetData($aidQA[$i], StringMid($aQA[$iCount][$i], 2))
        Next
    EndFunc
    Alles anzeigen
  • Poker-Card-Machine v3

    • Oscar
    • 14. September 2017 um 20:51
    Zitat von Musashi

    Aufgrund der generierten Karten möglicherweise nicht so einfach zu lösen, oder ?

    Doch das ist sogar sehr einfach. Ich hab's nur wieder vergessen. :whistling:

    Bei den übrigen Texten habe ich ja dran gedacht, aber bei dieser Änderung dann nicht.

    Ich schiebe das jetzt einfach mal darauf, dass ich gerade im Krankenhaus liege.

    Du musst nur die Zeile 568 gegen diese austauschen:

    $hFont = _GDIPlus_FontCreate($hFamily, 32 / $iAppDPI * 96, 1)

    dann sollten die Karten richtig angezeigt werden.

    Zitat von Musashi

    Es fehlen noch die üblichen Lizenzinfos und ggf. eine Kurzanleitung im Programm (wie z.B. bei 'Chiphunter'). Das liegt aber sicher daran, dass es sich noch um eine Beta-Version handelt.

    Ja, der Rest kommt noch. Ich wollte nur erstmal eine voll spielbare Version haben.

  • Poker-Card-Machine v3

    • Oscar
    • 14. September 2017 um 18:34

    Neue Version in Post#1.

    Ich habe mir die Spielkarten mal vorgenommen. Sie werden jetzt vom Programm generiert.

  • Skript zum automatischen verschieben einer Datei

    • Oscar
    • 11. September 2017 um 17:36

    Willst Du wirklich nur einmalig (nach 15 Sekunden) das Quellverzeichnis überprüfen und die evtl. enthaltene "dfq"-Datei verschieben?

    Ich hatte das jetzt eher so verstanden, dass das Script gestartet wird und dann endlos läuft und darauf wartet, dass im Quellverzeichnis eine "dfq"-Datei auftaucht.

    Und wenn das passiert, dann soll diese Datei ins Zielverzeichnis verschoben werden. Falls Du das so gemeint hast, dann wäre das hier eine mögliche Lösung:

    Spoiler anzeigen
    AutoIt
    #include <APIShellExConstants.au3>
    #include <GUIConstantsEx.au3>
    #include <GuiListView.au3>
    #include <ListViewConstants.au3>
    #include <MsgBoxConstants.au3>
    #include <WinAPI.au3>
    #include <WinAPIShellEx.au3>
    
    Global Const $sSourceDir = @ScriptDir & '\SourceDir\'
    Global Const $sDestDir = @ScriptDir & '\DestDir\'
    
    If Not FileExists($sSourceDir) Then
        If Not DirCreate($sSourceDir) Then
            MsgBox(BitOR($MB_ICONERROR, $MB_SYSTEMMODAL), 'Error', 'Unable to create SourceDir.')
            Exit
        EndIf
    EndIf
    If Not FileExists($sDestDir) Then
        If Not DirCreate($sDestDir) Then
            MsgBox(BitOR($MB_ICONERROR, $MB_SYSTEMMODAL), 'Error', 'Unable to create DestDir')
            Exit
        EndIf
    EndIf
    
    OnAutoItExitRegister('OnAutoItExit')
    
    Global $hGui = GUICreate('dfq-Move', 600, 400)
    Global $idListview = GUICtrlCreateListView('Uhrzeit|Datei', 10, 10, 580, 380)
    GUICtrlSetFont(-1, 12, 400, 2, 'Arial')
    Global $iMsg = _WinAPI_RegisterWindowMessage('SHELLCHANGENOTIFY')
    GUIRegisterMsg($iMsg, 'WM_SHELLCHANGENOTIFY')
    Global $iID = _WinAPI_ShellChangeNotifyRegister($hGui, $iMsg, $SHCNE_ALLEVENTS, BitOR($SHCNRF_INTERRUPTLEVEL, $SHCNRF_SHELLLEVEL, $SHCNRF_RECURSIVEINTERRUPT), $sSourceDir, 1)
    If @error Then
        MsgBox(BitOR($MB_ICONERROR, $MB_SYSTEMMODAL), 'Error', 'Window does not registered.')
        Exit
    EndIf
    GUISetState(@SW_SHOW, $hGui)
    
    Do
    Until GUIGetMsg() = $GUI_EVENT_CLOSE
    
    Func WM_SHELLCHANGENOTIFY($hWnd, $iMsg, $wParam, $lParam)
        #forceref $hWnd, $iMsg
        Local $sPath = _WinAPI_ShellGetPathFromIDList(DllStructGetData(DllStructCreate('dword Item1; dword Item2', $wParam), 'Item1'))
        If BitAND($lParam, $SHCNE_CREATE) And StringRight($sPath, 4) = '.dfq' Then
            If FileMove($sPath, $sDestDir, 1) Then
                GUICtrlCreateListViewItem(StringFormat('%02d:%02d:%02d|%s', @HOUR, @MIN, @SEC, $sPath), $idListview)
                _GUICtrlListView_SetColumnWidth($idListview, 0, $LVSCW_AUTOSIZE)
                _GUICtrlListView_SetColumnWidth($idListview, 1, $LVSCW_AUTOSIZE)
            EndIf
        EndIf
    EndFunc   ;==>WM_SHELLCHANGENOTIFY
    
    Func OnAutoItExit()
        If $iID Then _WinAPI_ShellChangeNotifyDeregister($iID)
    EndFunc   ;==>OnAutoItExit
    Alles anzeigen
  • autoit und Touchscreen - 2 Fragen

    • Oscar
    • 5. September 2017 um 07:45

    Ich besitze keinen Touchscreen, aber vielleicht klappt es ja besser, wenn Du abfragst, ob das Inputfeld den Focus besitzt:

    Spoiler anzeigen
    AutoIt
    #include <EditConstants.au3>
    #include <GUIConstantsEx.au3>
    #include <WinAPI.au3>
    #include <WindowsConstants.au3>
    
    Global $hGui = GUICreate('Test', 240, 120)
    Global $idInput = GUICtrlCreateInput('', 20, 20, 200, 20)
    Global $idButton = GUICtrlCreateButton('Nur zum testen', 20, 60, 120, 25)
    GUISetState()
    GUICtrlSetState($idButton, $GUI_FOCUS)
    GUIRegisterMsg($WM_COMMAND, '_WM_COMMAND')
    Do
    Until GUIGetMsg() = $GUI_EVENT_CLOSE
    
    Func _WM_COMMAND($hWnd, $iMsg, $wParam, $lParam)
        #forceref $hWnd, $iMsg
        Local $iCode = _WinAPI_HiWord($wParam)
        Switch $lParam
            Case GUICtrlGetHandle($idInput)
                Switch $iCode
                    Case $EN_SETFOCUS ; Sent when an edit control receives the keyboard focus
                        MsgBox(0, 'Test', 'Inputbox hat den Focus')
                EndSwitch
        EndSwitch
        Return $GUI_RUNDEFMSG
    EndFunc   ;==>_WM_COMMAND
    Alles anzeigen
  • MouseWheel auswerten

    • Oscar
    • 3. September 2017 um 16:55

    Du musst den Focus jedes Mal auf den zu scollenden Bereich legen:

    Spoiler anzeigen
    AutoIt
    #include <GUIConstantsEx.au3>
    #include <WindowsConstants.au3>
    #include <StructureConstants.au3>
    #include <GUIScrollBars.au3>
    #include <ScrollBarConstants.au3>
    #include <ListViewConstants.au3>
    #include <SendMessage.au3>
    #include "GuiScroll.au3" ; -> http://autoit.de/index.php?page=Thread&postID=162464#post162464
    
    startGui()
    
    Func startGui()
        $Gui = GUICreate("", 700, 600, -1, -1, $WS_POPUP)
        $up = GUICtrlCreateButton("UP", 10, 10, 80, 40)
        $down = GUICtrlCreateButton("DOWN", 100, 10, 80, 40)
        GUICtrlCreateLabel("Schliessen mit ESC", 550, 10, 120, 40)
        GUIRegisterMsg($WM_MOUSEWHEEL, "_Scrollbars_WM_MOUSEWHEEL")
        $hScrollPl = GUICreate("$hScrollPl", 500, 400, 10, 100, BitOR($WS_POPUP, $WS_GROUP, $WM_VSCROLL, $WS_CLIPSIBLINGS), $WS_EX_MDICHILD, $Gui)
        GUISetBkColor(0xffffff)
        Scrollbar_Create($hScrollPl, $SB_VERT, 400)
        Scrollbar_Step(10, $hScrollPl, $SB_VERT)
        _GUIScrollBars_SetScrollInfoMax($hScrollPl, $SB_VERT, 500)
    
        $art = GUICtrlCreateLabel("", 1, 1) ; Label für folgenden Focus...
    
        $hListV = GUICtrlCreateListView("1|2", 100, 100, 300, 200, BitOR($LVS_REPORT, $LVS_NOCOLUMNHEADER, $LVS_SHOWSELALWAYS))
        GUISetState(@SW_SHOW, $Gui)
        GUISetState(@SW_SHOW, $hScrollPl)
        GUICtrlSetState($art, $GUI_FOCUS); Focus auf Label von $hScrollPl
        GUISwitch($Gui)
        ;GUISetState(@SW_SHOW, $Gui)
        While 1
            $iMsg3 = GUIGetMsg()
            Switch $iMsg3
                Case $GUI_EVENT_CLOSE
                    Exit
                Case $up
                    MsgBox(0, "Info", "Button up gedrückt")
                    GUICtrlSetState($art, $GUI_FOCUS); Focus auf Label von $hScrollPl
                Case $down
                    MsgBox(0, "Info", "Button down gedrückt")
                    GUICtrlSetState($art, $GUI_FOCUS); Focus auf Label von $hScrollPl
            EndSwitch
        WEnd
    EndFunc   ;==>startGui
    
    Func _Scrollbars_WM_MOUSEWHEEL($hWnd, $iMsg, $wParam, $lParam)
        #forceref $hWnd, $iMsg, $lParam
        Local $i, $iDirn, $iDelta = BitShift($wParam, 16) ; Mouse wheel movement
    
        If BitAND($wParam, 0x0000FFFF) Then ; If Ctrl or Shft pressed move Horz scrollbar
            $iDirn = $SB_LINERIGHT
            If $iDelta > 0 Then $iDirn = $SB_LINELEFT
            For $i = 1 To 7
                _SendMessage($hWnd, $WM_HSCROLL, $iDirn)
            Next
        Else ; Move Vert scrollbar
            $iDirn = $SB_LINEDOWN
            If $iDelta > 0 Then $iDirn = $SB_LINEUP
            For $i = 1 To 7 ; Schleife regelt die Scroll Geschwindigkeit, je mehr Durchläufe desto schneller
                _SendMessage($hWnd, $WM_VSCROLL, $iDirn)
            Next
    
        EndIf
        Return $GUI_RUNDEFMSG
    EndFunc   ;==>_Scrollbars_WM_MOUSEWHEEL
    Alles anzeigen
  • Autoit Script Decompilen [Hilfe]

    • Oscar
    • 28. August 2017 um 07:27

    Das ist ein Hexadezimal-String = randomName
    Wie sinnvoll so etwas ist, lasse ich mal dahingestellt. :huh:

  • Poker-Card-Machine v3

    • Oscar
    • 26. August 2017 um 19:41

    Ich habe jetzt doch noch ein Karten-Set gefunden, was unter der LGPL-Lizenz steht und als Vektor-Grafik zur Verfügung gestellt wird.
    Außerdem habe ich ein neues Jackpot-System eingeführt. Damit kann ich das Gewinn-/Verlustverhältnis ganz gut regulieren.
    So hat der Spieler gute Chancen, einen Teil (20%) seines Verlusts wieder zu gewinnen. Neue Beta-Version in Post#1.

  • Poker-Card-Machine v3

    • Oscar
    • 26. August 2017 um 08:52
    Zitat von Yjuq

    1.: Wenn du Grafiken für Spielkarten benötigst kann ich dir welche machen. Ich brauche für alle 52 Stück ca. ne Stunde. Die 4 Symbole einmal erstellen + die Kartenrückseite. Danach lasse ich mir die Karten einfach generieren mit nen Skript oder sowas.

    Die Symbole (Karo, Herz, Pik, Kreuz) habe ich bereits als Grafik gefunden und das erstellen der Zahlen-Karten kriege ich auch per GDI+ hin.
    Das Problem besteht in den Grafiken für die "Bilder"-Karten (Bube, Dame, König) und die dann noch in Schwarz- und Rot-Tönen.
    Ich brauche also eigentlich keine kompletten Karten-Grafiken, weil ich dafür bereits eine Funktion (es wird die obere Hälfte erstellt und dann gespiegelt) mit GDI+ erstellt habe.
    Eine Kartenrückseite habe ich auch schon selbst erstellt.
    Mir gefielen halt nicht die Grafiken für die "Bilder"-Karten.

  • Poker-Card-Machine v3

    • Oscar
    • 25. August 2017 um 11:15

    Danke, für eure Einschätzungen!
    Ja, vielleicht sollte ich beide Varianten zur Auswahl anbieten. Ich hatte zuerst gedacht, dass die Variante mit immer neuen Karten mehr Vorteile bringt, aber nach den bisherigen Tests relativiert sich das doch sehr.
    Andererseits suche ich immer noch nach einer Möglichkeit den bisherigen "Bankvorteil" zu verringern (ich habe bisher immer mein Startkapital verspielt). Wenn ich den Gewinn bei "Two pair" erhöhe, hat das allerdings zur Folge, dass man gar nicht mehr verlieren kann. Vielleicht sollte ich doch wieder den Jackpot einbauen...

    Andy: Das mit den "nicht umgedrehten Karten" ist ein Bug. Werde ich beheben. Danke, für den Hinweis!
    bazii: Die Karten habe ich im Internet gefunden. Die Qualität ist leider nicht optimal. Es ist schwer wirklich gute Spielkarten zu finden, die noch dazu kostenlos angeboten werden. Vielleicht nehme ich doch meine Eigenkreation...

    Vielleicht hat ja noch jemand eine Idee, wie man den "Bankvorteil" etwas verringern kann, so dass der Spieler nicht immer verliert.

  • Poker-Card-Machine v3

    • Oscar
    • 24. August 2017 um 19:43

    23.09.2017: Die Version 3.0.0.0 ist jetzt fertig! Ein extra großes DANKESCHÖN an Musashi, der die Spielanleitung ins englische übersetzt hat! :klatschen:

    Vorab ein paar Anmerkungen:

    Im ZIP-Archiv (Anhang) befinden sich das Script sowie alle Includes, um damit eine Exedatei erstellen zu können.

    Hat man die Exedatei erstellt, so befinden sich alle benötigten Grafiken, Sounds, Texte, etc. in dieser Datei.

    Zur Weitergabe und "Installation" reicht es also, diese Exedatei irgendwohin zu kopieren, wo das Script Schreibrechte besitzt, weil

    beim Start die Anleitungen (deutsch/englisch) dorthin entpackt werden.

    Spielanleitung:

    Bei Spielbeginn bekommt man ein Startkapital von 100€. Vor jedem Spiel kann man einen bestimmten Prozentsatz davon setzen (der Mindesteinsatz beträgt allerdings 10€).

    Gespielt wird mit einem Pokerspiel (52 Karten: 2, 3, 4, 5, 6, 7, 8, 9, 10, Bube, Dame, König, Ass und diese 13 Karten jeweils in den vier Spielfarben: ♦ Karo, ♥ Herz, ♠ Pik und ♣ Kreuz).

    Ein Spiel besteht darin, dass man von dem Kartenstapel 5 Karten bekommt. Anschließend kann man entscheiden, welche Karten man austauschen will.
    Dazu klickt man sie mit der linken Maustaste an, sodass sie umgedreht werden. Man darf zwei Mal beliebig viele Karten austauschen (Runde 1 und Runde 2), danach erfolgt die Gewinnauswertung.

    Gewinnmöglichkeiten (in absteigender Reihenfolge):

    Royal Flush = Fünf Karten in einer Spielfarbe und in Folge, mit dem Ass als höchste Karte.
    Beispiel: ♠10, ♠B, ♠D, ♠K, ♠A
    Gewinn: 30 mal den Einsatz
    Straight Flush = Fünf Karten in einer Spielfarbe und in Folge, ohne das Ass als höchste Karte.
    Beispiel: ♦3, ♦4, ♦5, ♦6, ♦7
    Gewinn: 20 mal den Einsatz
    Anmerkung:
    • Kein Ass als höchste Karte (siehe 'Royal Flush')
    • Das Ass kann als niedrigste Karte (1) eingesetzt werden.
    Four of a kind = Vier Karten mit dem gleichen Wert.
    Beispiel: ♦D, ♥D, ♠D, ♣D
    Gewinn: 15 mal den Einsatz
    Full House = Drei und zwei Karten mit jeweils dem gleichen Wert.
    Beispiel: ♦10, ♠10, ♣10 und ♥8, ♣8
    Gewinn: 10 mal den Einsatz
    Flush = Fünf Karten in einer Spielfarbe
    Beispiel: ♥5, ♥8, ♥10, ♥D, ♥K
    Gewinn: 7 mal den Einsatz
    Straight = Fünf Karten in Folge und in unterschiedlicher Spielfarbe.
    Beispiel: ♠5, ♥6, ♦7, ♠8, ♣9
    Gewinn: 5 mal den Einsatz
    Anmerkung:
    • Das Ass kann als höchste Karte (über dem König) oder als niedrigste Karte (1) eingesetzt werden.
    Three of a kind = Drei Karten mit dem gleichen Wert.
    Beispiel: ♥6, ♠6, ♣6
    Gewinn: 3 mal den Einsatz
    Two Pair = Zwei mal 2 gleiche Karten.
    Beispiel: ♦3, ♥3, ♣7, ♠7
    Gewinn: Kein Gewinn, aber man bekommt den Einsatz zurück.
    One Pair = Zwei Karten mit dem gleichen Wert.
    Beispiel: ♥10, ♣10
    Gewinn: Kein Gewinn, aber man bekommt den halben Einsatz zurück.
    Nothing = Nichts von den oberen Möglichkeiten
    Gewinn: Kein Gewinn. Man verliert den Einsatz.

    Jackpot

    Zusätzlich zu den obigen Gewinnmöglichkeiten, besteht die Chance auf den Gewinn des Jackpots. In diesen Jackpot fließt ein Teil (20%) der verlorenen Einsätze.
    Hat man mit seinen Karten einen Gewinn erzielt (Three of a kind oder höher) und es befindet sich Geld im Jackpot, so zieht die Bank eine Karte vom Kartenstapel.
    Diese wird oben links angezeigt und mit der höchsten Karte des Spielers verglichen.
    Ist die höchste Karte des Spielers höher als die Karte der Bank, so erhält der Spieler das Geld aus dem Jackpot (zusätzlich zum obigen Gewinn). Ist die Karte der Bank höher, so bleibt das Geld im Jackpot.

    Statistik

    Es werden zwei Statistiken über die Spiele geführt.
    Zum Einen eine Gesamtstatistik über alle Spiele und zum Anderen eine Spielerstatistik.
    Die Spielerstatistik wird bei jedem Neustart des Spiels auf Null gesetzt bzw. beim laden eines Spielstands auf die dort gespeicherten Werte gesetzt.

    Sprachauswahl

    Es gibt die Möglichkeit, die Beschriftung der Felder und die Beschriftung der Karten (Bube / Jack, Dame / Queen) zwischen Deutsch und Englisch umzuschalten.
    Dazu muss man lediglich auf eine der beiden Flaggen (rechts oben) klicken.

    Menü "Einstellungen"

    Hier gibt es die Möglichkeit, die Sprache für die Gewinnauswertung zwischen Deutsch und Englisch umzuschalten (unabhängig von der Sprache für die übrige Beschriftung). Das habe ich eingebaut, damit man trotz deutscher Beschriftung die Gewinnauswertung auf englisch haben kann.

    Außerdem gibt es die Möglichkeit, ein schwarzes Hintergrundfenster anzeigen zu lassen. Damit stört der übrige Desktop nicht so sehr beim spielen. Außerdem flackert dieser Hintergrund in grün oder rot (gewonnen / verloren) bei der Jackpotauswertung.

    Menü "Programm"

    Mit "Spiel laden" kann man einen vorher abgespeicherten Spielstand wieder laden, um an der abgespeicherten Stelle weiterspielen zu können.
    Achtung!
    Nachdem der Spielstand erfolgreich geladen wurde, wird die Spielstanddatei gelöscht!

    Damit soll verhindert werden, dass man mehrmals an der abgespeicherten Stelle wieder neu anfangen kann.

    Mit "Spiel speichern" kann man einen Spielstand abspeichern, damit man später weiterspielen kann.
    Das Laden und Speichern funktioniert aber nur, wenn gerade kein Spiel läuft (die Beschriftung des großen Buttons steht auf "Start").

    Viel Spaß beim Spielen!

    Screenshot vom Spiel:

    Poker-Card-Machine_Screenshot.png

    Dateien

    Poker-Card-Machine_v3_0_0_0.zip 575,12 kB – 421 Downloads
  • Make's Gedanken feat. Yjuq

    • Oscar
    • 20. August 2017 um 10:31
    Zitat von Yjuq

    Ich wünsche mir eine einheitliche Sprache womit jeder Programmierer dieser Welt arbeitet und die so viel Freiraum in der Syntax zulässt, wie die deutsche Sprache in seiner Wortwahl. Sätze können unterschiedlich formuliert und ausgelegt werden und dennoch bleibt der Inhalt der Selbe.

    Ich weiß nicht, ob die Idee so gut ist. Gerade bei der menschlichen Sprache gibt es ja viele Doppelbedeutungen der Worte und sogar manche Sätze sind doppeldeutig/gegenteilig auslegbar:
    Computer arbeitet nicht / ausschalten
    Computer arbeitet/ nicht ausschalten

    Eine Computersprache muss aber eindeutig sein (digital = Strom an/aus). Die Syntax der Befehle mag bei den Programmiersprachen unterschiedlich sein, aber letztendlich ist es doch der Programmierer, der die gewünschten Funktionen in eben diese Syntax übersetzt. Und ob es wirklich hilfreich ist, wenn sich jeder Programmierer seine "eigene" Syntax aussuchen kann? Ich denke, dass das für das Debugging und die Teamfähigkeit eher ein Nachteil darstellt.

  • Zeitstempel setzten beim Öffen & schliessen eines Programmes

    • Oscar
    • 18. August 2017 um 11:21

    Was willst Du denn nun erreichen?
    Im Ausgangs-Post war es Start-/Endzeit, im Post#6 die Nutzungsdauer und nun Datum/Zeit je Benutzer.
    Definiere doch mal genau, was das Script aufzeichnen soll, dann kann man Dir auch weiterhelfen.

  • Zeitstempel setzten beim Öffen & schliessen eines Programmes

    • Oscar
    • 16. August 2017 um 19:28
    Zitat von ru642

    Es geht darum dem Kunden die Nutzungsdauer des Programms zu verrechnen.

    In dem Fall würde ich das anders angehen:

    AutoIt
    Global $sIniFile = @ScriptDir & '\TimeProtocol.ini'
    
    
    Global $iProcTime = IniRead($sIniFile, 'Protocol', 'Time', 0)
    AdlibRegister('_AddTime', 1000)
    HotKeySet('{ESC}', '_Exit')
    
    
    While Sleep(1000)
    WEnd
    
    
    Func _Exit()
    	If ProcessExists('Notepad.exe') Then Return
    	IniWrite($sIniFile, 'Protocol', 'Time', $iProcTime)
    	Exit
    EndFunc
    
    
    Func _AddTime()
    	If ProcessExists('Notepad.exe') Then
    		$iProcTime += 1
    		ToolTip(_FormatTime($iProcTime))
    	EndIf
    EndFunc
    
    
    Func _FormatTime($iSec)
    	Local $iHour, $iMin
    	$iHour = Int($iSec / 3600)
    	$iSec = Mod($iSec, 3600)
    	$iMin = Int($iSec / 60)
    	$iSec = Mod($iSec, 60)
    	Return StringFormat('%02i:%02i:%02i', $iHour, $iMin, $iSec)
    EndFunc   ;==>_FormatTime
    Alles anzeigen
  • StringSplit in ein 2D Array?

    • Oscar
    • 12. August 2017 um 19:38

    Das Thema hatten wir vor kurzem erst: 1D Array in 2D Array splitten
    Von AspirinJunkie stammt die Funktion "_StringSplit2D". Die ist sehr universell einsetzbar, um einen String in Zeilen/Spalten aufzusplitten (Ergebnis 2D-Array).

  • Starplayer v4

    • Oscar
    • 4. August 2017 um 13:49

    Es gibt noch ein kleines Update, womit (hoffentlich) die gelegentlichen Abstürze behoben sind.
    Außerdem gibt es jetzt auch eine Installer-Version. Danke Musashi, für die Hilfe mit InnoSetup!

  • Starplayer v4

    • Oscar
    • 2. August 2017 um 17:21
    Zitat von UEZ

    Du kannst mit den Funktionen

    BASS_ChannelGetLength (liefert die Länge in Bytes)

    BASS_ChannelBytes2Seconds (wandelt die Bytes in Sekunden um)
    die Zeit ermitteln.

    Ja, das ist mir schon bekannt. Das benutze ich ja bei den abgespielten MP3s.
    Aber ich müsste dann jede Drap&Drop-Datei erst mit BASS öffnen und die Laufzeit auslesen, bevor ich sie zum Listview hinzufüge.
    Ich weiß jetzt nicht, wie lange das dauert. Müsste ich mal testen...

  • Starplayer v4

    • Oscar
    • 2. August 2017 um 15:33
    Zitat von UEZ

    Hallo Oscar,

    hier das Resultat einiger Tests:

    • wenn der ID3 Tag nicht gelesen werden kann, wird die Datei nicht hinzugefügt -> da würde ich den Dateiname nehmen
    • wenn ich eine Datei per DnD auf die GUI ziehe und Play drücke, wird die Liste geleert (Anzahl = 0, Dauer = 00:00:00)
    • einmal ist das Skript abgestürzt, als ich das Skript geschlossen habe, aber die Musik noch spielte
    • vor / zurück Spulen funktioniert nur, wenn man auf die Position klickt, aber nicht, wenn man den grauen Knopf verschieben will

    Zu 1: Ja, das stimmt! Um in die Liste aufgenommen zu werden, muss der ID3-Tag korrekt sein. Das habe ich so programmiert, weil es sonst Probleme mit kaputten MP3s geben kann. Ich weiß nicht, ob es sinnvoll ist, stattdessen den Dateinamen einzusetzen. Wie ermittele ich dann die Laufzeit?
    Zu 2: Das ist so korrekt/so gewollt! Jeder Titel, der abgespielt wird, wird aus der Liste entfernt, sodass der nächste Titel stets oben steht.
    Zu 3: Ich dachte, dass ich die Probleme beseitigt hätte. Bei mir ist das in letzter Zeit nicht mehr passiert. Ich muss nochmal genau nachsehen, ob ich irgendwo ein Handle oder so übersehen habe, was nicht freigegeben wird...
    Zu 4: Ja, ein verschieben mit dem grauen Knopf habe ich gar nicht vorgesehen. Ich halte das für überflüssig, weil man dann die Musik zwangsläufig anhält.

  • Starplayer v4

    • Oscar
    • 2. August 2017 um 10:14

    Nachdem die letzte Version von meinem MP3-Player (Starplayer v3) bereits 7 Jahre her ist, habe ich den Player mal fast komplett neu geschrieben.
    Er entspricht jetzt meinen Anforderungen und ich möchte ihn mit euch teilen.
    Es gibt viele MP3-Player-Programme, warum also noch eines?
    Zum Einen natürlich, weil es mir Spaß macht, sowas in AutoIt zu programmieren. Zum Anderen aber auch, weil ich so ein paar Besonderheiten einbauen kann.
    Eine (für mich) wesentliche Besonderheit ist die Möglichkeit die Titel aus einer Playlist zu exportieren. Was heißt das?
    Nun, man lädt eine Playlist in den Starplayer oder stellt eine Playlist zusammen, das ist egal. Wenn man damit fertig ist, klickt man im Kontextmenü vom Starplayer "Playlist exportieren" an, wählt dann ein Zielverzeichnis und der Starplayer kopiert alle MP3-Dateien aus der Playlist in dieses Zielverzeichnis. Außerdem erstellt er eine Playlist ("!Playlist.m3u") mit den MP3-Dateien und speichert sie im Zielverzeichnis. Sehr praktisch, wenn man eine SD-Card für's Auto befüllen will.
    Eine weitere Besonderheit ist die Möglichkeit, die abgespielten MP3s in eine Playlist zu protokollieren. So kann man den Starplayer auf einer Party verwenden und kann hinterher noch genau sehen, wann welcher Titel gespielt wurde.
    Natürlich kann man den Starplayer auch als Standard-Player für ".mp3" und ".m3u" registrieren, sodass man die MP3s auch per Doppelklick abspielen kann. Befindet sich noch kein Titel in der Playlist, wird der neue Titel auch gleich abgespielt, ansonsten wird er an die Playlist angehängt.
    Das festlegen der Aus- und Einblendzeit ist auch so eine Besonderheit, die mir wichtig war. So entsteht ein Überblendeffekt bzw. es verringert die Pausenzeit zwischen den Titeln.
    Ich habe aber auch eine Hilfe geschrieben, wo ich noch auf einige Dinge hinweise.

    Screenshot:
    Starplayer_Screenshot.png

    Update v4.0.1.0:
    - Die GUIs für die Programm-Informationen und die Hilfe werden jetzt nur einmalig bei Programmstart erstellt und dann nur per SHOW/HIDE ein-/ausgeblendet. Irgendwie führte das dynamische erstellen der GUIs zu gelegentlichen Abstürzen von AutoIt. Das sollte jetzt behoben sein.
    - Ich habe beim Start des Programms noch einen Test eingebaut, ob die zuletzt gespeicherte Position des Fensters noch einem Monitor entspricht (im Multi-Monitor-Betrieb könnte es ja sein, dass der Monitor abgeschaltet ist). Wenn dort kein Monitor ist, dann wird der Starplayer auf dem aktuellen Monitor zentriert gestartet.
    - Es gibt jetzt auch eine Installer-Version (die befindet sich im "Starplayer_v4_0_1_0_Setup.zip"-Archiv im Anhang). Danke Musashi, für die Hilfe mit InnoSetup! :thumbup:


    Alle benötigten Dateien (Script, Includes, Grafiken, Icons, Fonts, etc.) findet ihr im ZIP-Archiv im Anhang.

    Dateien

    Starplayer_v4_0_1_0.zip 2,11 MB – 424 Downloads Starplayer_v4_0_1_0_Setup.zip 2,38 MB – 401 Downloads
  • Text Datei auslesen ohne Dateinamen zu kennen

    • Oscar
    • 1. August 2017 um 13:25
    Zitat von Musashi

    If StringInStr(FileGetAttrib($sFullName, 'D') Then ... -> ist ein Verzeichnis

    Beim verwenden von FileFindNextFile und Flag = 0 wird @extended = 1, wenn es sich um ein Verzeichnis handelt.
    Die zusätzliche Abfrage mit StringInStr und FileGetAttrib ist somit überflüssig.

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™