Aufgrund dieses Theades:
[ gelöst ] Uhrzeit ständig aktualisieren, aber wie?
habe ich mal schnell etwas geschireben um eine MsgBox zu aktualisieren:
(benutzt meine unsichere Thread-UDF :P)
Spoiler anzeigen
#include <Misc.au3>
_MsgBox(0,"Test","Es klappt! :)")
Sleep(10)
$t=TimerInit()
While Not _IsPressed("1B")
ControlSetText("Test","","[CLASS:Static; INSTANCE:1]",@HOUR&":"&@MIN&":"&@SEC)
Sleep(10)
WEnd
While TimerDiff($t)<1000
Sleep(10)
WEnd
Exit
Func _MsgBox($flag,$title,$message)
_ThreadCreate("__ThMB","int;char[101];char[501]",$flag&";"&$title&";"&$message)
EndFunc
Func __ThMB($struct)
Local $data=_ThreadDataRead($struct,"int;char[101];char[501]")
Local $t=TimerInit()
MsgBox($data[0],$data[1],$data[2])
While TimerDiff($t)<1000
Sleep(10)
WEnd
EndFunc
Func _ThreadCreate($func,$globalstruct="",$zuweisungen="") ;$func must have one Parameter, Data can be read with _ThreadDataRead
Local $threadinfo[3],$ptr
If $globalstruct="" Then
$ptr=0
Else
$struct=DllStructCreate($globalstruct)
If $zuweisungen<>"" Then
Local $split=StringSplit($zuweisungen,";")
If @error Then
Local $split[2]
$split[0]=1
$split[1]=$zuweisungen
EndIf
For $x=1 To $split[0]
DllStructSetData($struct,$x,$split[$x])
Next
EndIf
$ptr=DllStructGetPtr($struct)
EndIf
Local $cbr=DllCallbackRegister($func,"int","ptr")
Local $ret=DllCall("kernel32.dll","hwnd","CreateThread","ptr",0,"dword",0,"long",DllCallbackGetPtr($cbr),"ptr",$ptr,"long",0,"int*",0)
If Not IsArray($ret) Or @error Then Return SetError(@error,@extended,0)
$threadinfo[0]=$ret[0];Handle
$threadinfo[1]=$ret[6];Thread-ID
$threadinfo[2]=$globalstruct;information struct
Return $threadinfo
EndFunc
Func _ThreadDataRead($param,$tgis);Returns Data in Array
If $tgis="" Then Return 0
$struct=DllStructCreate($tgis,$param)
Local $split=StringSplit($tgis,";")
If @error Then
Local $split[2]
$split[0]=1
EndIf
Local $ret[$split[0]]
For $x=1 To $split[0]
$ret[$x-1]=DllStructGetData($struct,$x)
Next
Return $ret
EndFunc
Func _ThreadClose(ByRef $threadinfo,$exitcode=0)
If Not IsArray($threadinfo) Then Return SetError(1,0,-1)
DllCall("kernel32.dll","bool","TerminateThread","handle",$threadinfo[0],"dword",$exitcode)
DllCall("kernel32.dll","int","CloseHandle","handle",$threadinfo[0])
EndFunc
Viel Spaß damit
EDIT:
Es muss am Anfang mindestens ein Zeichen in der MsgBox stehen, damit ein Label erstellt wird
EDIT:
Stürzt doch manchmal ab, aber seltener. Autoit ist 0% Threadsicher
EDIT:
Habs noch ein bisschen besser hingekriegt, dass es nicht so oft abstürzt