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

  • Automatsiche Laufwerkserkennung zur Abfrage ob bestimmte Dateien schon existieren!!!Hilfe!!

    • Oscar
    • 5. Oktober 2009 um 14:55

    Ich hab's mal rausgesucht: Rekursive Dateisuche per Objekt

  • Automatsiche Laufwerkserkennung zur Abfrage ob bestimmte Dateien schon existieren!!!Hilfe!!

    • Oscar
    • 5. Oktober 2009 um 14:33

    Nein, FileExists lässt keine Platzhalter zu. Der Befehl prüft nur, ob eine bestimmte Datei existiert.
    Willst Du eine ganze Festplatte durchsuchen, musst Du das mit einer Schleife machen. Das oben bereits erwähnte FileFindFirstFile und FileFindNextFile sind hier die passenden Stichwörter.
    Du kannst aber, wie bereits von mir erwähnt, auch auf fertige Funktionen zurückgreifen.

  • Automatsiche Laufwerkserkennung zur Abfrage ob bestimmte Dateien schon existieren!!!Hilfe!!

    • Oscar
    • 5. Oktober 2009 um 13:16

    Um zu prüfen, ob bestimmte Programme installiert sind, solltest Du lieber die Registry durchforschen (geht erheblich schneller als auf allen Festplatten/Partitionen zu suchen).
    Wenn Du wirklich suchen musst/willst, schau Dir mal DriveGetDrive an. Du müsstest aber rekursiv (inkl. aller Unterverzeichnisse) suchen. Dazu hat BugFix mal eine Funktion geschrieben. Musst Du mal die Forumsuche benutzen.

  • mini-problem um auch noch die vorletzte zeile auszulesen...

    • Oscar
    • 5. Oktober 2009 um 12:35

    Wenn Du die _ArrayDisplay-Zeile auskommentierst, dann wird Dir das ganze Array angezeigt.

    Für die vorletzte Zeile brauchst Du aber nur zwei Werte anpassen:

    Spoiler anzeigen
    [autoit]


    #include <array.au3>
    $text = _
    '10/02/2009 02:00:00 2 ankauf 12 1 ' & @CRLF & _
    '13/02/2009 08:00:00 2 verkauf 13 0 0' & @CRLF & @CRLF & _
    '14/02/2009 05:00:00 5 ankauf 14 1 ' & @CRLF & _
    '14/02/2009 10:00:00 5 verkauf 12 0 0' & @CRLF & @CRLF & _
    '16/02/2009 06:00:00 6 ankauf 12 1 ' & @CRLF & _
    '18/02/2009 12:00:00 6 verkauf 13 0 0' & @CRLF & @CRLF & _
    '19/02/2009 07:00:00 7 ankauf 12 1 ' & @CRLF & _
    '19/02/2009 08:00:00 8 verkauf 14 0 0'

    [/autoit] [autoit][/autoit] [autoit][/autoit] [autoit]

    $pattern = '(\d{2}:\d{2}:\d{2})(?:\s+\d+\s+)(\w+)'
    $ret = StringRegExp($text, $pattern, 3)
    ;~ _ArrayDisplay($ret)

    [/autoit] [autoit][/autoit] [autoit]

    MsgBox(0, 'Letzte Zeile', $ret[UBound($ret)-2] & ' ' & $ret[UBound($ret)-1])
    MsgBox(0, 'Vorletzte Zeile', $ret[UBound($ret)-4] & ' ' & $ret[UBound($ret)-3])

    [/autoit]
  • Text auf Progressbar

    • Oscar
    • 5. Oktober 2009 um 12:23

    Einfach transparent ein Label über die Progressbar legen:

    Spoiler anzeigen
    [autoit]


    #include <GUIConstantsEx.au3>
    #include <WindowsConstants.au3>
    #include <Timers.au3>
    Global $iPercent, $iCount = 1
    $hGui = GUICreate('Test', 400, 300)
    $hProgress = GUICtrlCreateProgress(10, 10, 380, 20)
    $hLabel = GUICtrlCreateLabel('0%', 160, 13, 100, 16)
    GUICtrlSetBkColor(-1, $GUI_BKCOLOR_TRANSPARENT)
    GUISetState()
    $iTimer = _Timer_SetTimer($hGui, 50, '_Counter')
    Do
    Until GUIGetMsg() = $GUI_EVENT_CLOSE
    _Timer_KillTimer($hGui, $iTimer)

    [/autoit] [autoit][/autoit] [autoit]

    Func _Counter($hWnd, $Msg, $iIDTimer, $dwTime)
    $iPercent += $iCount
    GUICtrlSetData($hLabel, $iPercent & '%')
    GUICtrlSetData($hProgress, $iPercent)
    If $iPercent = 100 Or $iPercent = 0 Then $iCount = -$iCount
    EndFunc

    [/autoit]
  • Starplayer v2 (MP3-Player)

    • Oscar
    • 5. Oktober 2009 um 12:12

    Raupi, Du hast mich auf die Idee gebracht, das Ganze nochmal durchzusehen. Vorher hatte ich diese Callback-Funktion von _Timer_SetTimer benutzt und das führte zu den Problemen. Jetzt mache ich das mit GUIRegisterMsg($WM_TIMER, '_WM_TIMER') und alles läuft perfekt. :)
    Habe jetzt noch die Playlistunterstützung auf den Doppelklick ausgeweitet und für beide extra Standard-Dateiicons beigepackt. Und außerdem noch etwas Errorhandling hinzugefügt. Vorher konnte das Programm nämlich abstürzen, wenn man in einer Playlist Leerzeilen oder falsche bzw. nicht existierende Dateien drin hatte.

    Neue Version in Post #1.

    Naja, wahrscheinlich nerve ich manche schon mit den ständig neuen Versionen, aber ich denke, das ist jetzt die endgültige Version. ^^

  • Ich bastel mir ein GUI

    • Oscar
    • 4. Oktober 2009 um 22:44

    Aber diese "If...Then-Wälder" sind doch grausam. :rolleyes:
    Dann lieber gleich etwas strukturierter lernen.

  • Ich bastel mir ein GUI

    • Oscar
    • 4. Oktober 2009 um 22:37

    Man kann das Ganze auch viel kürzer schreiben:

    Spoiler anzeigen
    [autoit]


    #include <GUIConstants.au3>
    Opt("GUICoordMode", 2)

    [/autoit] [autoit][/autoit] [autoit]

    Global $icq, $msn, $skype, $firefox, $winamp, $inidatei

    [/autoit] [autoit][/autoit] [autoit]

    $inidatei = @ScriptDir & "\dennis.ini"
    _InidateiEinlesen()

    [/autoit] [autoit][/autoit] [autoit]

    GUICreate("Dennis's Toolbox", 370, 100)

    [/autoit] [autoit][/autoit] [autoit]

    $hCombo = GUICtrlCreateCombo("ICQ", 10, 10, 100, 25, 0x0003)
    GUICtrlSetData($hCombo, "MSN|Skype|Firefox|Winamp", "ICQ")
    $Button_1 = GUICtrlCreateButton("Run", 10, -27, 50, 25)
    $infobox = GUICtrlCreateInput($icq, -160, 10, 350, 20)
    $Button_2 = GUICtrlCreateButton("Durchsuchen", -1, 5, 100, 25)

    [/autoit] [autoit][/autoit] [autoit]

    GUISetState(@SW_SHOW)
    While 1
    Switch GUIGetMsg()
    Case $GUI_EVENT_CLOSE
    Exit
    Case $Button_1
    _InidateiEinlesen()
    Switch GUICtrlRead($hCombo)
    Case "ICQ"
    Run($ICQ)
    Case "MSN"
    Run($MSN)
    Case "Skype"
    Run($skype)
    Case "Firefox"
    Run($firefox)
    Case "Winamp"
    Run($winamp)
    EndSwitch
    Case $Button_2
    $name = GUICtrlRead($hCombo)
    $pfad = FileOpenDialog("Pfad zur " & $name & ".exe auswählen", "C:\", "ausführbare Dateien (*.exe)", 3, $name & ".exe")
    If Not @error Then
    GUICtrlSetData($infobox, $pfad)
    IniWrite($inidatei, $name, "path", $pfad)
    EndIf
    Case $hCombo
    _InidateiEinlesen()
    GUICtrlSetData($infobox, Eval(GUICtrlRead($hCombo)))
    EndSwitch
    WEnd

    [/autoit] [autoit][/autoit] [autoit]

    Func _InidateiEinlesen()
    $icq = IniRead($inidatei, "ICQ", "path", "")
    $msn = IniRead($inidatei, "MSN", "path", "")
    $skype = IniRead($inidatei, "SKYPE", "path", "")
    $firefox = IniRead($inidatei, "FIREFOX", "path", "")
    $winamp = IniRead($inidatei, "WINAMP", "path", "")
    EndFunc

    [/autoit]

    Es würde sogar noch kürzer gehen (mit Arrays), aber das lernst Du dann später... ;)

  • Koordinaten durch InputBoxen

    • Oscar
    • 4. Oktober 2009 um 22:18

    Er hat vorhin in der ShoutBox bereits zugegeben, dass es ein Bot werden soll und er sucht sich ein anderes Forum, wo man ihm helfen wird (glaubt er).

  • Starplayer v2 (MP3-Player)

    • Oscar
    • 4. Oktober 2009 um 20:24

    Der Fehler tritt im Zusammenhang mit dem _Timer_SetTimer auf.
    Wenn beim beenden des Programms noch ein Timer aktiv ist und man beim Klick auf den Schliessen-Button die Maus bewegt, dann stürzt das Programm ab.
    War der Timer nicht aktiv (vorher auf Stop geklickt), dann passierte das nicht (die Fehlersuche hat Stunden gedauert). :S

    Naja, ich habe den Timer jetzt rausgeschmissen und das anders gelöst. Ist zwar nicht so schön, weil die Anzeige nicht aktualisiert wird, wenn man das Menü öffnet, aber was soll's...

    Dafür gibt's jetzt eine Wiederholfunktion für die Up-/Down Tasten (die Hotkeys für die Pfeiltasten habe ich wieder entfernt).

    Neue Version in Post #1.

  • Tastenumleitung funzt irgendwie nicht.

    • Oscar
    • 4. Oktober 2009 um 14:42

    Das funktioniert auch nicht mit jeder Tastatur. Meines Wissens muss dazu der Treiber die Tasten genauso weitergeben, wie bei einer Microsoft-Multimedia-Tastatur.
    Wenn der Treiber nicht mitspielt, kannst Du die Tastenbelegung nur über das Herstellereigene Programm machen.

  • Da stell ich mich mal vor

    • Oscar
    • 4. Oktober 2009 um 11:04

    Hallo und willkommen hier im Forum!
    Wenn Du Hilfe benötigst, melde Dich einfach. Wir werden unser möglichstes tun. :)

    P.S.: Was ist eine PV-Anlage?

  • Nach Zahlen in einem String suchen

    • Oscar
    • 4. Oktober 2009 um 10:56

    Vielleicht so:

    [autoit]


    $string = '0101020101'
    If StringRegExp($string, '[^01]+') Then
    MsgBox(0,0, 'Fehler! Bitte nur Nullen und Einsen eingeben!')
    Else
    MsgBox(0,0, 'Eingabe ok!')
    EndIf

    [/autoit]
  • Starplayer v2 (MP3-Player)

    • Oscar
    • 4. Oktober 2009 um 10:43
    Zitat von Raupi

    Bei anderen Playern wird die Playliste gelöscht und der ausgewählte Titel wiedergegeben. Mich persönlich stört es nicht, finde es sogar besser.


    Das hatte ich doch bereits als Feature bei der Version 2.2 dazugeschrieben. Ich finde das so nämlich auch besser. Vielleicht mache ich das noch auswählbar.

    Zitat von Raupi

    hast du meinen Edit in meinem letzten Post gelesen? Das mit dem Delay der UP und Down Tasten?

    Ach, na klar! Ich habe doch sogar schon etwas dafür programmiert. Jetzt vergesse ich schon, die neuen Features. ^^
    Wenn man einen Titel in der Playlist markiert hat, dann kann man mit den Pfeiltasten (Up und Down) den Titel nach oben oder unten verschieben.

    Zitat von Raupi

    Habe einen Bug entdeckt. Wenn ich den Player schließe kommt immer die Fehlermeldung Starplayer reagiert nicht. Das Script muß beendet werden.


    Nanu?!
    Äh...bei mir ist das nicht der Fall...also Du startest den Player (Wie? Per Doppelklick auf ein MP3 oder über die Exe? Oder das Script?) und wenn Du den dann gleich wieder beendest, dann geht das nicht?

  • Starplayer v2 (MP3-Player)

    • Oscar
    • 4. Oktober 2009 um 09:55

    Jam00: Ja, genau so wollte ich das haben, aber ich hatte noch keinen Plan, wie das geht. Nach einigen Tests funktioniert es jetzt aber. :)

    Neue Version in Post #1.

  • Starplayer v2 (MP3-Player)

    • Oscar
    • 4. Oktober 2009 um 00:02

    Jam00, das mache ich doch bereits so (statt des Labels benutze ich ein Edit-Control und statt ProcessExists WinExists) und das funktioniert im Prinzip auch.
    Das Problem, was Raupi hat, ist, wenn noch kein Starplayer gestartet ist und er mehrere MP3s auswählt und dann per rechten Mausklick "mit Starplayer öffnen" auswählt, dann werden mehrere Instanzen vom Starplayer gestartet.
    Das liegt wohl daran, dass jede Instanz "glaubt" sie wäre die einzige, weil ja noch kein Fenster existiert.

    Wenn man jetzt aber ProcessExists benutzt, dann geht das eigentlich nicht, weil dann das Fenster mit dem Edit-Control noch nicht existiert. Wohin soll gesendet werden?
    Irgendwie beisst sich die Katze da immer selbst in den Schwanz. ?(
    Jemand eine Lösung parat?

    Edit: Wegen der Laufzeit guck mal bei Post #18. Musst eine Zeile austauschen. Wird in der nächsten Version behoben sein. Mit dem registrieren bei Windows-Versionen <> Windows XP weiss ich noch nicht weiter...

  • Starplayer v2 (MP3-Player)

    • Oscar
    • 3. Oktober 2009 um 22:53

    Ich kann den Fehler gerade nicht nachvollziehen. Allerdings wird bei mir in dem Fall auch nur die erste selektierte Datei an Starplayer übergeben (Bug in XP?).
    Vermutlich ist das aber auch schwer zu beheben, denn wenn die alle "gleichzeitig" gestartet werden, sind die Scripte wahrscheinlich schon über die Abfrage (WinExists) hinaus, bevor die Fenster erstellt werden.
    Vielleicht sollte ich das mit ProcessExists machen...aber dafür brauche ich die PID. Gibt's eine Funktion vom Prozessnamen zur PID? Ach...ProcessList könnte vielleicht helfen...muss ich mal testen.

    Aber einen kleinen Bug habe ich noch in die neue Version eingebaut:
    In Zeile 432 muss statt:

    [autoit]

    $iTimerDuration = -2

    [/autoit]


    diese Zeile stehen

    [autoit]

    $iTimerDuration = -1

    [/autoit]


    Sonst wird die Laufzeitanzeige beim nächsten Titel nicht aktualisiert.

    Edit:

    Zitat

    aber wie hast du es gemacht, dass ein Klick auf die Progressbar die Song-Position dahin verschiebt?


    Ich habe Dir mal ein Beispielscript geschrieben:

    Spoiler anzeigen
    [autoit]


    #include <GUIConstantsEx.au3>
    $hGui = GUICreate('Test', 400, 300)
    $hProgress = GUICtrlCreateProgress(10, 10, 350, 20)
    $hLabel = GUICtrlCreateLabel('0%', 365, 12, 35, 20)
    GUISetState()
    $aPos = ControlGetPos($hGui, '', $hProgress)

    [/autoit] [autoit][/autoit] [autoit]

    While True
    Switch GUIGetMsg()
    Case $GUI_EVENT_CLOSE
    Exit
    Case $GUI_EVENT_PRIMARYUP
    $aInfo = GUIGetCursorInfo($hGui)
    If $aInfo[4] = $hProgress Then
    $iPercent = 100 / $aPos[2] * ($aInfo[0] - $aPos[0])
    GUICtrlSetData($hProgress, $iPercent)
    GUICtrlSetData($hLabel, Int($iPercent) & '%')
    EndIf
    EndSwitch
    WEnd

    [/autoit]
  • Starplayer v2 (MP3-Player)

    • Oscar
    • 3. Oktober 2009 um 22:28

    Jam00: Die Verzeichnisse werden nun auch rekursiv eingelesen.

    Außerdem habe ich einen Fehler behoben, der auftrat, wenn man sehr viele MP3s in der Playlist hatte.
    Und die Anzeige für die Laufzeit funktioniert nun auch bei geöffnetem Menü.
    Neue Version in Post #1.

  • Benutzen der WM_MENUSELECT Notification um Hilftext in der Statusbar anzuzeigen.

    • Oscar
    • 3. Oktober 2009 um 22:06

    Genial, ich hatte gedacht, dass das nur über _Timer_SetTimer funktionieren würde.
    Hab ich wieder was dazugelernt. Danke für das Script, Raupi. :thumbup:
    Werde ich mir mal archivieren.

  • Wie finde ich heraus, welcher Menüeintrag gerade selektiert ist?

    • Oscar
    • 3. Oktober 2009 um 20:43

    So groß ist die Prozessorlast doch gar nicht:

    Spoiler anzeigen
    [autoit]


    #include <GuiMenu.au3>
    #include <GuiStatusBar.au3>
    #include <Timers.au3>
    $hGui = GUICreate('Test', 400, 300)
    Global $ahMenuItems[3]
    $hMenu = GUICtrlCreateMenu('File')
    $ahMenuItems[0] = GUICtrlCreateMenuItem('bla1', $hMenu)
    $ahMenuItems[1] = GUICtrlCreateMenuItem('bla2', $hMenu)
    $ahMenuItems[2] = GUICtrlCreateMenuItem('bla3', $hMenu)
    $hStatus = _GUICtrlStatusBar_Create($hGui)
    GUISetState()
    $hTimer = _Timer_SetTimer($hGui, 100, '_Display')

    [/autoit] [autoit][/autoit] [autoit]

    Do
    Until GUIGetMsg() = -3
    _Timer_KillTimer($hGui, $hTimer)

    [/autoit] [autoit][/autoit] [autoit]

    Func _Display($hWnd, $Msg, $iIDTimer, $dwTime)
    For $i = 0 To UBound($ahMenuItems) - 1
    If _GUICtrlMenu_GetItemHighlighted(GUICtrlGetHandle($hMenu), $i) Then
    _GUICtrlStatusBar_SetText($hStatus, GUICtrlRead($ahMenuItems[$i], 1))
    Return
    EndIf
    Next
    _GUICtrlStatusBar_SetText($hStatus, '')
    EndFunc

    [/autoit]

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™