|
You last visited: Today at 07:01
Advertisement
Erinnermich
Discussion on Erinnermich within the AutoIt forum part of the Coders Den category.
05/04/2011, 21:33
|
#1
|
elite*gold: 0
Join Date: Jan 2009
Posts: 74
Received Thanks: 3
|
Erinnermich
Servus!
Ich bin grad dabei, einen Bot zu schreiben, der mich alle 35sec daran erinnert, dass ich etwas machen soll. Dazu wollte ich gerne eine Progressbar und ein Soundfile (mp3) verwenden.
Die Sounddatei liegt im gleichen Ordner (genauso wie das Bild für das GUI) und wird mit ".\Dateiname" aufgerufen.
Damit man die Zeit bis zum nächsten mal sieht, wollte ich sie gerne in einer Progressbar darstellen.
Der Basicbefehl für Progressbar schaut so aus:
PHP Code:
ProgressOn("Progress Bar", "Sample progress bar", "Working...") For $i = 0 To 100 ProgressSet($i) Sleep(5) Next ProgressSet(100, "Done!") Sleep(750) ProgressOff()
Da ich so nicht wirklich weiter kam, recherchierte ich ein bisschen im Internet und fand diesen Code:
PHP Code:
#include <GUIConstantsEx.au3> #include <ProgressConstants.au3> #include <WindowsConstants.au3> #Region ### START Koda GUI section ### Form= $Form1 = GUICreate("[Autoit] - 014 - Progressbar", 600, 100, -1, -1) $Progress1 = GUICtrlCreateProgress(10, 10, 580,30) GUICtrlSetLimit(-1, 200, 100) $btnLos = GUICtrlCreateButton("Los", 140,50, 100) GUISetState(@SW_SHOW) #EndRegion ### END Koda GUI section ### While 1 $nMsg = GUIGetMsg() Switch $nMsg Case $GUI_EVENT_CLOSE Exit Case $btnLosLangsam GUICtrlSetData($Progress1,0) setPro() AdlibRegister("setPro",1000) EndSwitch WEnd Func setPro() $curValue = GUICtrlRead($Progress1) if $curValue < 100 Then $curValue += 10 GUICtrlSetData($Progress1, $curValue) EndFunc
Leider brachte ich nach 2 Stunden herumprobieren und Tutorials anschauen immer noch nicht das gewünschte Ergebniss auf den Bildschirm.
Hier nochmal genau was eigentlich meine Pläne waren:
1.) GUI Fenster mit einem Start-Button und einer Progressbar
1a.) Der Start-Button löst nach ::WinMinimizeAll:: (sleep (1000)) eine MsgBox aus.
1.b) Die Progressbar zeigt eine Zeitspanne von 35sec an.
2.) Mit der HotKeyTaste {#} wird der Timer gestartet, bei erneutem Drücken wird der Timer angehalten und resetet.
Dies müsste mit diesem Code funktionieren:
PHP Code:
$y = 0 Hotkeyset("{#}", 'start') Func start() $y = 1 Hotkeyset("{#}", 'pause') While 1 If $y = 0 Then ExitLoop sleep (5000) SoundPlay(".\Schwammerl.mp3",1) WEnd EndFunc Func pause() $y = 0 Hotkeyset("{a}", 'start') ConsoleWrite('+Puse' & @CRLF) EndFunc
3.) Jedes mal wenn der Balken auf 100% oder 35sec ist, sollte mit
PHP Code:
SoundPlay(".\File.mp3",1)
ein Soundfile aus dem gleichen Ordner abgespielt werden.
Die GUI kann ich mir schon selber zusammen basteln.. ;D
Hat wer von euch eine Idee wie das zu lösen wäre?
By the way:
Progressbar einfärben geht das auch anders als so:
PHP Code:
GUISetBkColor(0x000000) DllCall('uxtheme.dll', 'none', 'SetThemeAppProperties', 'int', 0) $Progress1 = GUICtrlCreateProgress(64, 16, 553, 41) GUICtrlSetColor(-1, 0x00FF00)
Das Design is eher nicht so das Gelbe vom Ei...
Grüße Stoani!
|
|
|
05/04/2011, 23:21
|
#2
|
elite*gold: 0
Join Date: Mar 2009
Posts: 2,317
Received Thanks: 1,254
|
ist zwar bischen umständlich geschrieben, aber meinste so?
PHP Code:
#Include <Misc.au3> #include <ButtonConstants.au3> #include <GUIConstantsEx.au3> #include <ProgressConstants.au3> #include <StaticConstants.au3> #include <WindowsConstants.au3>
#Region ### START Koda GUI section ### Form= $Form1 = GUICreate("Form1", 400, 80, 294, 207) $Progress1 = GUICtrlCreateProgress(10, 10, 377, 25) GUICtrlSetState(-1, $GUI_DISABLE) $Button1 = GUICtrlCreateButton("start", 150, 40, 89, 33, $WS_GROUP) GUISetState(@SW_SHOW) #EndRegion ### END Koda GUI section ###
While 1 $nMsg = GUIGetMsg() Switch $nMsg Case $GUI_EVENT_CLOSE Exit Case $Button1 start() EndSwitch WEnd
Func start() Local $timer, $end = 0
MsgBox("","","Timer wurde zurück gesetzt") GUICtrlSetData($Progress1, 0)
$timer = TimerInit()
While Not _IsPressed("BF") And Not _IsPressed("1B") For $i = 0 To 100 If TimerDiff($timer) >= 35000/100 Then ;35000 für 35sec GUICtrlSetData($Progress1, GUICtrlRead($Progress1) + 1) $timer = TimerInit() EndIf Next If GUICtrlRead($Progress1) >= 100 Then $end = 1 ExitLoop EndIf WEnd
If _IsPressed("1B") Then Exit If _IsPressed("BF") Then start()
If $end = 1 Then ;um mehrmaliges aufrufen zu vermeiden MsgBox("","", "Zeit ist um") ;hier dann der rest, wie zb deien .mp3 EndIf
EndFunc
|
|
|
05/04/2011, 23:29
|
#3
|
elite*gold: 0
Join Date: Dec 2009
Posts: 1,622
Received Thanks: 2,070
|
Ähm..
Ich will dir ja nicht zu nahe treten, aber worin soll der sinn bestehen, eine Msgbox alle 35 sekunden zu öffnen?
1. Man würde dadurch nur genervt werden, anstatt sich an etwas zu "erinnern"
2. Wenn man etwas nicht vergessen will, kann man es sich auch notieren.
Naja ich find die idee doof, und wenn du es nur für den eigengebrauch willst, kannst du es doch ohne gui und dem ganzem kram machen :O
|
|
|
05/06/2011, 21:34
|
#4
|
elite*gold: 0
Join Date: Jan 2009
Posts: 74
Received Thanks: 3
|
Sooo, endlich komm ich dazu, die Antworten zu checken. Omer danke für die wie üblich flotte und gute Antwort!
@freehuntx
Brauchst du mehr Beiträge oder ist dein Leben echt so langweilig....
Ob du dass ganze sinnvoll findest oder nicht, ist mir ziemlich egal...
@Omer
Ich bin derweilen mit meinem Script ziemlich zu dem Ergeniss gekommen, dass ich haben wollte! Siehe unten:
PHP Code:
$y = 0 Hotkeyset("{#}", "start") Hotkeyset("{o}", "_exit") MsgBox(0, "Mushroooooooms","Hallo! Hotkeys: #=run o=exit") ;Zählt mit einer Progressbar von 100% auf 0% in 35sec und spielt anschließen eine Sounddatei ab. Func start() $y = 1 Hotkeyset("{#}", 'pause') While 1 If $y = 0 Then ExitLoop ProgressOn("Mushroom", "","100%") For $i = 1 to 100 step 1 sleep(350) ProgressSet( $i, $i - 100 & " %") Next ProgressSet(100 , "Ready", "Another mushroom!") sleep(500) ProgressOff() $s = SoundPlay(".\Schwammerl.mp3",1) WEnd EndFunc ;Durch diese Funktion wird der Cooldown angehalten! Func pause() $y = 0 Hotkeyset("{#}", 'start') While 1 sleep (100) WEnd EndFunc ;Beendet das Skript! Func _exit() Exit EndFunc ;Damit das Skript nicht ausgeht! while 1 Sleep(100) WEnd
Ich hab auch schon ein nettes GUI erstellt:
PHP Code:
#include <ButtonConstants.au3> #include <GUIConstantsEx.au3> #include <ProgressConstants.au3> #include <StaticConstants.au3> #include <WindowsConstants.au3> #Region ### START Koda GUI section ### Form=c:\users\fabian\documents\au3\bot alpha 1.0\test 1.kxf $Form1 = GUICreate("Form1", 224, 151, 249, 291, BitOR($WS_MINIMIZEBOX,$WS_GROUP)) GUISetBkColor(0xFFFFFF) $Progress1 = GUICtrlCreateProgress(31, 40, 161, 25) $GUI_LABEL1 = GUICtrlCreateLabel("Next mushroom in", 31, 8, 125, 29) GUICtrlSetFont(-1, 12, 400, 0, "Papyrus") GUICtrlSetColor(-1, 0x000000) $GUI_ANZAHL = GUICtrlCreateLabel("35", 159, 8, 24, 29) GUICtrlSetFont(-1, 12, 800, 0, "Papyrus") GUICtrlSetColor(-1, 0xFF0000) $Pic1 = GUICtrlCreatePic("C:\Users\Fabian\Documents\Au3\Bot Alpha 1.0\SCHWAMMERL_ICO.jpg", 31, 72, 49, 41) $Pic2 = GUICtrlCreatePic("C:\Users\Fabian\Documents\Au3\Bot Alpha 1.0\SCHWAMMERL_ICO.jpg", 87, 72, 49, 41) $Pic3 = GUICtrlCreatePic("C:\Users\Fabian\Documents\Au3\Bot Alpha 1.0\SCHWAMMERL_ICO.jpg", 143, 72, 49, 41) $Checkbox1 = GUICtrlCreateCheckbox("Sound On/Off", 67, 120, 89, 25) GUISetState(@SW_SHOW) #EndRegion ### END Koda GUI section ### While 1 $nMsg = GUIGetMsg() Switch $nMsg Case $GUI_EVENT_CLOSE Exit Case $GUI_LABEL1 EndSwitch WEnd
Nun meine Frage(n):
Kann man ein Label, wie zb.:
PHP Code:
$GUI_ANZAHL = GUICtrlCreateLabel("35", 159, 8, 24, 29)
so einrichten, dass es immer die jeweilige Sekunde der Progressbar anzeigt? Müsste doch eigentlich mit gehen oder?
Ist es möglich, Bilder einblenden zu lassen? dh. nach dem ersten Durchlauf der Zeit Bild 1 bzw.:
PHP Code:
$Pic1 = GUICtrlCreatePic("C:\Users\Fabian\Documents\Au3\Bot Alpha 1.0\SCHWAMMERL_ICO.jpg", 31, 72, 49, 41)
und so weiter und so fort(bis zu 3mal.) Und wenn die Taste (zb) X gedrückt wird, dann geschieht Y...
Danke an jeden, der sich die geschicht kurz durch den Kopf gehen lässt...
Wenn wer will, kann er auch gerne mein Script durschauen, testen und etwaige Schwachstellen aufdecken!
Grüße
Stoani
|
|
|
05/06/2011, 22:24
|
#5
|
elite*gold: 0
Join Date: Mar 2009
Posts: 2,317
Received Thanks: 1,254
|
Ich würde eher zu Timern raten, da du durch die Sleep Funktion dein Script blockst und du "nebenbei" nichts machen kannst...
Ich habe mal das von mir in deine GUI eingefügt, und raus kam das:
PHP Code:
#Include <Misc.au3> #include <ButtonConstants.au3> #include <GUIConstantsEx.au3> #include <ProgressConstants.au3> #include <StaticConstants.au3> #include <WindowsConstants.au3> Global $zeit = 35, $zae = 1 #Region ### START Koda GUI section ### Form=c:\users\fabian\documents\au3\bot alpha 1.0\test 1.kxf $Form1 = GUICreate("Form1", 224, 151, 249, 291, BitOR($WS_MINIMIZEBOX,$WS_GROUP)) GUISetBkColor(0xFFFFFF) $Progress1 = GUICtrlCreateProgress(31, 40, 161, 25) $GUI_LABEL1 = GUICtrlCreateLabel("Next mushroom in", 31, 8, 125, 29) GUICtrlSetFont(-1, 12, 400, 0, "Papyrus") GUICtrlSetColor(-1, 0x000000) $GUI_ANZAHL = GUICtrlCreateLabel($zeit, 159, 8, 24, 29) GUICtrlSetFont(-1, 12, 800, 0, "Papyrus") GUICtrlSetColor(-1, 0xFF0000) $Pic1 = GUICtrlCreatePic("C:\Users\Fabian\Documents\Au3\Bot Alpha 1.0\SCHWAMMERL_ICO.jpg", 31, 72, 49, 41) $Pic2 = GUICtrlCreatePic("C:\Users\Fabian\Documents\Au3\Bot Alpha 1.0\SCHWAMMERL_ICO.jpg", 87, 72, 49, 41) GUICtrlSetState($Pic2, $GUI_HIDE) $Pic3 = GUICtrlCreatePic("C:\Users\Fabian\Documents\Au3\Bot Alpha 1.0\SCHWAMMERL_ICO.jpg", 143, 72, 49, 41) GUICtrlSetState($Pic3, $GUI_HIDE) $Checkbox1 = GUICtrlCreateCheckbox("Sound On/Off", 67, 120, 89, 25) GUISetState(@SW_SHOW) #EndRegion ### END Koda GUI section ### start() While 1 $nMsg = GUIGetMsg() Switch $nMsg Case $GUI_EVENT_CLOSE Exit Case $GUI_LABEL1 EndSwitch WEnd Func start() Local $timer, $zTimer, $end = 0 GUICtrlSetData($Progress1, 0) $zeit = 35 $timer = TimerInit() $zTimer = TimerInit() While Not _IsPressed("1B") If _IsPressed("BF") Then ExitLoop If _IsPressed("58") Then ToolTip("X - Taste wurde gedrückt", 0, 0) For $i = 0 To 100 If TimerDiff($timer) >= 35000/100 Then GUICtrlSetData($Progress1, GUICtrlRead($Progress1) + 1) $timer = TimerInit() EndIf Next If GUICtrlRead($Progress1) >= 100 Then $zae += 1 $end = 1 ExitLoop EndIf If TimerDiff($zTimer) >= 1000 Then $zeit -= 1 GUICtrlSetData($GUI_ANZAHL, $zeit) $zTimer = TimerInit() EndIf WEnd If $zae > 3 Then GUICtrlSetState($Pic2, $GUI_HIDE) GUICtrlSetState($Pic3, $GUI_HIDE) $zae = 1 EndIf If $zae = 2 Then GUICtrlSetState($Pic2, $GUI_SHOW) If $zae = 3 Then GUICtrlSetState($Pic3, $GUI_SHOW) If _IsPressed("1B") Then Exit If _IsPressed("BF") Then start() If $end = 1 Then MsgBox("","", "Zeit ist um", 1) start() EndIf EndFunc
Ist es in etwa das, was du wolltest?
|
|
|
05/07/2011, 12:05
|
#6
|
elite*gold: 0
Join Date: Jan 2009
Posts: 74
Received Thanks: 3
|
Hey Omer!
While 1
Danke
Wend
Ja das schaut schon ziemlich gut aus!
Da mit den Timern muss ich dir tatsächlich recht geben. Diese Lösung ist um einiges eleganter als sleep(100) ;D
Das Problem ist, dass ich halt noch nie mit Timern gearbeitet habe( bin aber grad dabei) und grad nicht ganz versteh wieso der Timer das Skript total stopt... also nicht ganz genau das, was ich brauche. Wenn der Button X das Skript stoppt, sollte er beim zweiten Mal das Skript resetten und neu starten!
Kann man den eigentlich start() ohne func davor hinschreiben?
Ich habs noch ein bisserl verändert...
PHP Code:
#Include <Misc.au3> #include <ButtonConstants.au3> #include <GUIConstantsEx.au3> #include <ProgressConstants.au3> #include <StaticConstants.au3> #include <WindowsConstants.au3>
Global $zeit = 35, $zae = 0
#Region ### START Koda GUI section ### Form=c:\users\fabian\documents\au3\bot alpha 1.0\test 1.kxf $Form1 = GUICreate("Form1", 224, 151, 249, 291, BitOR($WS_MINIMIZEBOX,$WS_GROUP)) GUISetBkColor(0xFFFFFF) $Progress1 = GUICtrlCreateProgress(31, 40, 161, 25) $GUI_LABEL1 = GUICtrlCreateLabel("Next mushroom in", 31, 8, 125, 29) GUICtrlSetFont(-1, 12, 400, 0, "Papyrus") GUICtrlSetColor(-1, 0x000000) $GUI_ANZAHL = GUICtrlCreateLabel($zeit, 159, 8, 24, 29) GUICtrlSetFont(-1, 12, 800, 0, "Papyrus") GUICtrlSetColor(-1, 0xFF0000) $Pic1 = GUICtrlCreatePic("C:\Users\Fabian\Documents\Au3\Bot Alpha 1.0\SCHWAMMERL_ICO.jpg", 31, 72, 49, 41) GUICtrlSetState($Pic1, $GUI_HIDE) $Pic2 = GUICtrlCreatePic("C:\Users\Fabian\Documents\Au3\Bot Alpha 1.0\SCHWAMMERL_ICO.jpg", 87, 72, 49, 41) GUICtrlSetState($Pic2, $GUI_HIDE) $Pic3 = GUICtrlCreatePic("C:\Users\Fabian\Documents\Au3\Bot Alpha 1.0\SCHWAMMERL_ICO.jpg", 143, 72, 49, 41) GUICtrlSetState($Pic3, $GUI_HIDE) $Checkbox1 = GUICtrlCreateCheckbox("Sound On/Off", 67, 120, 89, 25) GUISetState(@SW_SHOW) #EndRegion ### END Koda GUI section ###
start()
While 1 $nMsg = GUIGetMsg() Switch $nMsg Case $GUI_EVENT_CLOSE Exit
Case $GUI_LABEL1 EndSwitch WEnd
Func start() Local $timer, $zTimer, $end = 0
GUICtrlSetData($Progress1, 0) $zeit = 35
$timer = TimerInit() $zTimer = TimerInit() While Not _IsPressed("1B") If _IsPressed("79") Then ExitLoop If _IsPressed("58") Then ToolTip("X - Taste wurde gedrückt", 0, 0) For $i = 0 To 100 If TimerDiff($timer) >= 35000/100 Then GUICtrlSetData($Progress1, GUICtrlRead($Progress1) + 1) $timer = TimerInit() EndIf Next If GUICtrlRead($Progress1) >= 100 Then $zae += 1 $end = 1 ExitLoop EndIf If TimerDiff($zTimer) >= 1000 Then $zeit -= 1 GUICtrlSetData($GUI_ANZAHL, $zeit) $zTimer = TimerInit() EndIf WEnd
If $zae > 3 Then GUICtrlSetState($Pic1, $GUI_HIDE) GUICtrlSetState($Pic2, $GUI_HIDE) GUICtrlSetState($Pic3, $GUI_HIDE) $zae = 0 EndIf If $zae = 1 Then GUICtrlSetState($Pic1, $GUI_SHOW) If $zae = 2 Then GUICtrlSetState($Pic2, $GUI_SHOW) If $zae = 3 Then GUICtrlSetState($Pic3, $GUI_SHOW)
If _IsPressed("1B") Then Exit If _IsPressed("79") Then start()
If $end = 1 Then SoundPlay(".\Schwammerl.mp3",1) start() EndIf
EndFunc
Grüße
Stoani!
|
|
|
05/07/2011, 12:50
|
#7
|
elite*gold: 0
Join Date: Mar 2009
Posts: 2,317
Received Thanks: 1,254
|
ahh seh erst jetz was du meinst...
Wenn man die # - Taste zu lange hält, stoppt es total oder beendet sich manchmal...
habs mal so gelöst:
If _IsPressed("BF") Then
Sleep(1000)
start()
EndIf
Da du in dem Fall den Script eh neustarten möchtest, hab ich eine Sleep von 1 sec eingebaut (um mehrmaliges drücken zu vermeiden) und dadurch müsste es normal funktionieren.
|
|
|
All times are GMT +2. The time now is 07:01.
|
|