Beiträge von Oscar
-
-
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. -
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. -
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]
[/autoit] [autoit][/autoit] [autoit][/autoit] [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'$pattern = '(\d{2}:\d{2}:\d{2})(?:\s+\d+\s+)(\w+)'
[/autoit] [autoit][/autoit] [autoit]
$ret = StringRegExp($text, $pattern, 3)
;~ _ArrayDisplay($ret)MsgBox(0, 'Letzte Zeile', $ret[UBound($ret)-2] & ' ' & $ret[UBound($ret)-1])
[/autoit]
MsgBox(0, 'Vorletzte Zeile', $ret[UBound($ret)-4] & ' ' & $ret[UBound($ret)-3]) -
Einfach transparent ein Label über die Progressbar legen:
Spoiler anzeigen
[autoit]
[/autoit] [autoit][/autoit] [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)Func _Counter($hWnd, $Msg, $iIDTimer, $dwTime)
[/autoit]
$iPercent += $iCount
GUICtrlSetData($hLabel, $iPercent & '%')
GUICtrlSetData($hProgress, $iPercent)
If $iPercent = 100 Or $iPercent = 0 Then $iCount = -$iCount
EndFunc -
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.

-
Aber diese "If...Then-Wälder" sind doch grausam.
Dann lieber gleich etwas strukturierter lernen. -
Man kann das Ganze auch viel kürzer schreiben:
Spoiler anzeigen
[autoit]
[/autoit] [autoit][/autoit] [autoit]
#include <GUIConstants.au3>
Opt("GUICoordMode", 2)Global $icq, $msn, $skype, $firefox, $winamp, $inidatei
[/autoit] [autoit][/autoit] [autoit]$inidatei = @ScriptDir & "\dennis.ini"
[/autoit] [autoit][/autoit] [autoit]
_InidateiEinlesen()GUICreate("Dennis's Toolbox", 370, 100)
[/autoit] [autoit][/autoit] [autoit]$hCombo = GUICtrlCreateCombo("ICQ", 10, 10, 100, 25, 0x0003)
[/autoit] [autoit][/autoit] [autoit]
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)GUISetState(@SW_SHOW)
[/autoit] [autoit][/autoit] [autoit]
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
WEndFunc _InidateiEinlesen()
[/autoit]
$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", "")
EndFuncEs würde sogar noch kürzer gehen (mit Arrays), aber das lernst Du dann später...

-
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).
-
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).
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.
-
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. -
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?
-
Vielleicht so:
[autoit]
[/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 -
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.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.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? -
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.
-
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...
-
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:
[autoit]
In Zeile 432 muss statt:$iTimerDuration = -2
[/autoit]
[autoit]
diese Zeile stehen$iTimerDuration = -1
[/autoit]
Sonst wird die Laufzeitanzeige beim nächsten Titel nicht aktualisiert.Edit:
Zitataber 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]
[/autoit] [autoit][/autoit] [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)While True
[/autoit]
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 -
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. -
-
So groß ist die Prozessorlast doch gar nicht:
Spoiler anzeigen
[autoit]
[/autoit] [autoit][/autoit] [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')Do
[/autoit] [autoit][/autoit] [autoit]
Until GUIGetMsg() = -3
_Timer_KillTimer($hGui, $hTimer)Func _Display($hWnd, $Msg, $iIDTimer, $dwTime)
[/autoit]
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