AutoIt Frage

11/06/2010 10:38 Lighthex#1
Hallo ich bins wiedermal,
ehm meine neuen Probleme sind :
Ich habe ein GUI in dem ein Paar Labels sind und diese Labels werden durch GUICtrlSetData aktualisiert und jetzt werden die Labels so schnell aktualisiert das es flakert....
Hättet ihr dafür eine Lösung ?

Ich möchte ein Tool schreiben dies bei einer bestimmten Zeit herrunterfährt,also bei einer Zeit die der Benutzer auswählen kann und die restliche Zeit soll in einem Label angezeigt werden...

Ich hoffe ihr könnt mir helfen

Danke ...
11/06/2010 10:44 ZaZiZu#2
Quote:
Originally Posted by Lighthex View Post
Hallo ich bins wiedermal,
ehm meine neuen Probleme sind :
Ich habe ein GUI in dem ein Paar Labels sind und diese Labels werden durch GUICtrlSetData aktualisiert und jetzt werden die Labels so schnell aktualisiert das es flakert....
Hättet ihr dafür eine Lösung ?

Ich möchte ein Tool schreiben dies bei einer bestimmten Zeit herrunterfährt,also bei einer Zeit die der Benutzer auswählen kann und die restliche Zeit soll in einem Label angezeigt werden...

Ich hoffe ihr könnt mir helfen

Danke ...
ist bei dir in einer schleife ohne speedlimit
deswegen empfehle ich dir irgendwo ein sleep(XXXX) zwischenzuschieben
am besten halt mit 1000, also in 1 sekunde-schritten
11/06/2010 10:46 Lighthex#3
Naja dies ist ein Bot mit anzeige dann würde der Bot 1Skunde lang immer wieder stoppenn ,deswegen ist das nicht tauglich
11/06/2010 12:49 MoepMeep#4
timer? :>
11/06/2010 13:11 Lighthex#5
Hmm ok und ehm ...
Das mit dem Shutdown ....
also das die restliche zeit angezeigt wird
11/06/2010 13:11 PenGuin :O#6
Script?
11/06/2010 13:14 Neon™#7
Pythagoras ;)

@Topic: Ein bissche eigene Initiative wäre angebracht. Es soll ja schließlich DEIN Bot werden.
11/06/2010 14:01 PenGuin :O#8
Quote:
Hallo ich bins wiedermal,
ehm meine neuen Probleme sind :
Ich habe ein GUI in dem ein Paar Labels sind und diese Labels werden durch GUICtrlSetData aktualisiert und jetzt werden die Labels so schnell aktualisiert das es flakert....
Hättet ihr dafür eine Lösung ?

Ich möchte ein Tool schreiben dies bei einer bestimmten Zeit herrunterfährt,also bei einer Zeit die der Benutzer auswählen kann und die restliche Zeit soll in einem Label angezeigt werden...

Ich hoffe ihr könnt mir helfen

Danke ...

Quote:
Pythagoras

@Topic: Ein bissche eigene Initiative wäre angebracht. Es soll ja schließlich DEIN Bot werden.

o.O
Entweder bin ich schon wieder schwer von Begriff, aber was hat das mit Mathe zutun? :D
11/06/2010 14:05 Neon™#9
Quote:
Originally Posted by pinguin94 View Post
o.O
Entweder bin ich schon wieder schwer von Begriff, aber was hat das mit Mathe zutun? :D
Ich musste diesen Kommentar einfach posten :)
[Only registered and activated users can see links. Click Here To Register...]


Jetzt aber mal ernsthaft: Google (Timer, AutoIt, Countdown)
11/06/2010 14:18 PenGuin :O#10
Quote:
Originally Posted by Neon™ View Post
: Google (Timer, AutoIt, Countdown)
Oder einfach auf bestimmte Fälle reagieren.
WM_COMMAND, WM_NOTIFY hilft da manchmal, oder auch einfach eine Variable in der ein alter Wert geschrieben wurde.

Deshalb will ich ja das Script sehen, damit man dazu was konkretes sagen aknn :D
11/06/2010 14:34 omer36#11
Quote:
Originally Posted by Lighthex View Post
Hallo ich bins wiedermal,
ehm meine neuen Probleme sind :
Ich habe ein GUI in dem ein Paar Labels sind und diese Labels werden durch GUICtrlSetData aktualisiert und jetzt werden die Labels so schnell aktualisiert das es flakert....
Hättet ihr dafür eine Lösung ?

Ich möchte ein Tool schreiben dies bei einer bestimmten Zeit herrunterfährt,also bei einer Zeit die der Benutzer auswählen kann und die restliche Zeit soll in einem Label angezeigt werden...

Ich hoffe ihr könnt mir helfen

Danke ...

PHP Code:
#RequireAdmin
;#NoTrayIcon
#include <GUIConstantsEx.au3>
#include <StaticConstants.au3>
#include <WindowsConstants.au3>

$timer InputBox("Info""Wann soll der Computer runtergefahren werden?" & @CRLF "(Bitte Zahl in sec. angeben!)")

If 
Not IsDeclared("iMsgBoxAnswer"Then Local $iMsgBoxAnswer
$iMsgBoxAnswer 
MsgBox(65,"Bestätigen"$timer " sek")
Select
    
Case $iMsgBoxAnswer ;OK
        ok
()
    Case 
$iMsgBoxAnswer ;Cancel
        
Exit
EndSelect

Func ok
()
$Form5 GUICreate("shutdown"23030403379BitOr($WS_BORDER$WS_POPUP), BitOR(""$WS_EX_TOOLWINDOW))
$Label1 GUICtrlCreateLabel("computer wird in "8148417)
$Label2 GUICtrlCreateLabel("Label2"921415017)
GUISetState(@SW_SHOW)

For 
$i $timer To 0 Step -1
    GUICtrlSetData
($Label2$i " sek heruntergefahren")
    If 
$i 0 Then MsgBox(0"""""1")
    
Sleep(1000)
Next

Shutdown
(1)
EndFunc 
11/06/2010 14:39 Lighthex#12
PHP Code:
#include <ButtonConstants.au3>
#include <ComboConstants.au3>
#include <EditConstants.au3>
#include <GUIConstantsEx.au3>
#include <StaticConstants.au3>
#include <WindowsConstants.au3>
#Region ### START Koda GUI section ### Form=
$Form1 GUICreate("Form1"274159192124)
$Label1 GUICtrlCreateLabel("Pc herunterfahren :"16209517)
$Radio1 GUICtrlCreateRadio("in"120811317)
$Radio2 GUICtrlCreateRadio("um,"1203211317)
$Combo1 GUICtrlCreateCombo("Stunde"8568125)
GUICtrlSetData(-1"0|1|2|3|4|5|6|7|8|9|10|11|12|13|14|15|16|17|18|19|20|21|22|23|24")
$Combo2 GUICtrlCreateCombo("Minuten"96568125)
GUICtrlSetData(-1"0|1|2|3|4|5|6|7|8|9|10|11|12|13|14|15|16|17|18|19|20|21|22|23|24|25|26|27|28|29|30|31|32|33|34|35|36|37|38|39|40|41|42|43|44|45|46|47|48|49|50|51|52|53|54|55|56|57|58|59|60")
$Combo3 GUICtrlCreateCombo("Sekunde"184568125)
GUICtrlSetData(-1"0|1|2|3|4|5|6|7|8|9|10|11|12|13|14|15|16|17|18|19|20|21|22|23|24|25|26|27|28|29|30|31|32|33|34|35|36|37|38|39|40|41|42|43|44|45|46|47|48|49|50|51|52|53|54|55|56|57|58|59|60")
$Input1 GUICtrlCreateInput(""88825721BitOR($ES_AUTOHSCROLL,$ES_READONLY))
$Button1 GUICtrlCreateButton("Start/Stop"812025925$WS_GROUP)
GUISetState(@SW_SHOW)
#EndRegion ### END Koda GUI section ###

While 1
    $nMsg 
GUIGetMsg()
    Switch 
$nMsg
        
Case $GUI_EVENT_CLOSE
            
Exit

    EndSwitch
WEnd 
So soll das aussehen und man kann den eben wählen zwischenin so und so viuelen stunden oder um dieser uhrzeit wenn in dann eben wie ein countdown und dieser coutdown soll im input angezeigt werden und wenn um dnn soll die restzeit in diesem input angezeigt werden
11/06/2010 17:14 lolkop#13
ich würde jeweils die restzeit in sekunden ausrechnen, und das denn ausgeben...
Code:
Dim $timer, $go=False
GUICreate("Form1", 274, 159, -1, -1)
GUICtrlCreateLabel("Pc herunterfahren :", 16, 20, 95, 17)
$Radio1 = GUICtrlCreateRadio("in", 120, 8, 113, 17)
GUICtrlSetState(-1, 1)
$Radio2 = GUICtrlCreateRadio("um,", 120, 32, 113, 17)
$Combo1 = GUICtrlCreateCombo("Stunde", 8, 56, 81, 25)
GUICtrlSetData(-1, BuildComboNumber(0,24))
$Combo2 = GUICtrlCreateCombo("Minuten", 96, 56, 81, 25)
GUICtrlSetData(-1, BuildComboNumber(0,60))
$Combo3 = GUICtrlCreateCombo("Sekunde", 184, 56, 81, 25)
GUICtrlSetData(-1, BuildComboNumber(0,60))
$Input1 = GUICtrlCreateInput("", 8, 88, 257, 21, 0x880)
$Button1 = GUICtrlCreateButton("Start/Stop", 8, 120, 259, 25)
GUISetState(@SW_SHOW)

While 1
    Switch GUIGetMsg()
        Case -3
            Exit
		Case $Button1
			$go = Not $go
			$timer = TimerInit()
		Case Else
			If $go Then
				$std_read = GUICtrlRead($Combo1)
				If $std_read = 'Stunden' Then $std_read=0
				$min_read = GUICtrlRead($Combo2)
				If $min_read = 'Minuten' Then $min_read=0
				$sek_read = GUICtrlRead($Combo3)
				If $sek_read = 'Sekunden' Then $sek_read=0
				If BitAND(GUICtrlRead($Radio1),1) Then
					$left = (($std_read*60*60*1000 + $min_read*60*1000 + $sek_read)*1000 - TimerDiff($timer))/1000
				Else
					$left = ($std_read*60*60*1000 + $min_read*60*1000 + $sek_read) - (@HOUR*60*60 + @MIN*60 + @SEC)
					If $left < 0 Then $left += 24*60*60
				EndIf
				$std = Int($left / 60 / 60)
				$min = Int($left / 60 - $std * 60)
				$sek = Int($left - $min*60 - $std*60*60)
				If $std>0 Then
					GUICtrlSetData($Input1, $std&' Stunden '&$min&' Minuten '&$sek& ' Sekunden')
				ElseIf $min>0 Then
					GUICtrlSetData($Input1, $min&' Minuten '&$sek& ' Sekunden')
				Else
					GUICtrlSetData($Input1, $sek& ' Sekunden')
				EndIf
				If $left <= 0 Then
					$go = Not $go
					GUICtrlSetData($Input1, 'Good Bye')
;~ 					Shutdown(1)
				EndIf
			EndIf
    EndSwitch
WEnd

Func BuildComboNumber($von,$bis)
	Local $i, $return
	For $i=$von To $bis
		$return&=$i&'|'
	Next
	Return StringTrimRight($return,1)
EndFunc
11/06/2010 19:51 Lighthex#14
Ehm das verstehe ich nicht ...
kannst du das entweder erklären oder eine anderemoglichkeit :D
11/06/2010 20:21 lolkop#15
also für um xx:xx:xx pc herunterfahren, sollte es doch leicht verständlich sein.

du rechnest du zeit gespeichert in @hour, @min und @sec um in sekunden.

eine minute hat 60 sekunden, eine stunde hat 60minuten.

willst du also stunden in sekunden umrechnen, rechnest du erst mal 60 und kommt kommst auch minuten. dann nochmal mal 60 und du hast sekunden

also @Hour*60*60 und du hast die stunden in sekunden umgewandelt.
für minuten reicht @min*60 und sekunden brauchst du garnichtmehr umwandeln.

das ganze addierst du nun und bekommst die aktuelle tageszeit in sekunden.

angenommen es ist 01:30:25uhr, so hast du 1*60*60 + 30*60 + 25 sekunden.

das selbe machst du jetzt mit den combo-boxen. (wieder in sekunden umrechnen auf die selbe art und weise.

jetzt kannst du einfach die aktuelle tageszeit von gewünschte shutdownzeit subtrahieren, und bekommst so die verbleibende zeit in sekunden.

um sekunden wieder als stunden, minuten, sekunden darzustellen, die umwandlung einfach einmal genau andersherum machen.

für stunden nimmst du die sekunden und dividierst durch 60*60.
die minuten sind der rest davon durch 60.
und die sekunden sind einfach der noch verbleibende rest.

angenommen du hast 5000 sekunden. dann rechnest du das durch 60*60
also 5000/(60*60) bzw 5000/60/60 und erhälst eine stunde.
eine stunde sind 1*60*60 (3600) sekunden. die kannst du jetzt schon von der zeit in sekunden abziehen.
dh du musst noch die restlichen 1400 sekunden in minuten und sekunden aufteilen.
für minuten einfach die 1400/60 rechnen und du erhälst 23 minuten.
das entspricht 23*60 (1380) sekunden.
die ziehst du nun wieder von den verbliebenen 1400 sekunden ab, und erhälst 20 verbleibende sekunden.

dh 5000sekunden = 1 Stunde, 23 Minuten und 20 Sekunden.

sollte soweit wohl verständlich sein.
mit dem anderen "herunterfahren in..." geht das genauso
da timer allerdings im millisekunden bereich arbeiten, musst du hier die zeit in millisekunden umrechnen. (ich habe das gesamte ergebnis dann einfach nochmal durch 1000 geteilt, und bekomme so wieder einen sekunden wert, den ich genauso darstellen kann)