Danke Kanashius, habe es mittlerweile auch selber hinbekommen.
wie du schon sagst, funktioniert das ganze aber nur wenn das fenster aktiv ist -> kann ich dementsprechend nicht gebrauchen oder gibt es wege das zu umgehen?
Beiträge von 63rrit
-
-
Setze dir ein paar Dummy-Ctrl auf deine Overlay-GUI.
Diesen weist du mit GUISetAccelerators Hotkeys zu, die sind dann ausschliesslich mit dieser GUI wirksam. Dann sollten die Reaktionszeiten auch nicht mehr träge sein.kannst du mir zum besseren verständnis ein paar zeilen beispielcode schreiben? wäre super
-
hallo zusammen,
ich habe mir folgendes skript geschrieben:
Spoiler anzeigen
[autoit]
[/autoit] [autoit][/autoit] [autoit]
#include <GuiConstantsEx.au3>
#include <WindowsConstants.au3>
#include <WinAPI.au3>
#include <Misc.au3>HotKeySet("{NUMPAD9}", "On_Exit") ; only on desktop
[/autoit] [autoit][/autoit] [autoit]Global $SS_CENTER, $hGUI, $aRadio[5], $hButton, $res
[/autoit] [autoit][/autoit] [autoit]
Global $TimeTicks_d, $TimeTicks_b, $TimeTicks_ob, $TimeTicks_or, $TimeTicks_tb, $TimeTicks_tr, $TimeTicks
Global $_SecCalc_d, $_SecCalc_b, $_SecCalc_ob, $_SecCalc_or, $_SecCalc_tb, $_SecCalc_tr, $_SecCalc
Global $_Seconds_d, $_Seconds_b, $_Seconds_ob, $_Seconds_or, $_Seconds_tb, $_Seconds_tr, $_Seconds
Global $iAdlibTicks = 20
Global $aTimerStart[6] = [360, 420, 300, 300, 300, 300]
Global $iTimerCount = 6 ; Amount of Timers
Global $TimeLabel[$iTimerCount]
Global $aTimer[$iTimerCount]
Global $iFlashStartTicks = 21000 ; Timer lower than 20 seks
Global $iProgTimer = TimerInit()
Global $iCount
Global $TimerActive[$iTimerCount] = [False, False, False, False, False, False]$hGUI = GUICreate("LJT", 150, 190)
[/autoit] [autoit][/autoit] [autoit]GUICtrlCreateLabel("Choose your resolution", 10, 10, 150, 20)
[/autoit] [autoit][/autoit] [autoit]GUIStartGroup()
[/autoit] [autoit][/autoit] [autoit]
For $i = 0 To 4
Local $res[5] = ["2560 x 1440", "1920 x 1080", "1600 x 900", "1280 x 720", "1024 x 768"]
$aRadio[$i] = GUICtrlCreateRadio($res[$i], 55, 30 + ($i * 20), 100, 20)
Next
GUICtrlSetState($aRadio[0], $GUI_CHECKED)$hButton = GUICtrlCreateButton("Start Overlay", 35, 150, 80, 30)
[/autoit] [autoit][/autoit] [autoit]GUISetState()
[/autoit] [autoit][/autoit] [autoit]While 1
[/autoit] [autoit][/autoit] [autoit]Switch GUIGetMsg()
[/autoit] [autoit][/autoit] [autoit]
Case $GUI_EVENT_CLOSE
Exit
Case $hButton
GUISetState(@SW_HIDE, $hGUI)
For $i = 0 To 4
If GUICtrlRead($aRadio[$i]) = 1 Then
$res = $i
ExitLoop
EndIf
Next
Timer()
EndSwitchWEnd
[/autoit] [autoit][/autoit] [autoit]; -------------
[/autoit] [autoit][/autoit] [autoit]Func Timer()
[/autoit] [autoit][/autoit] [autoit]
Local $pos[$iTimerCount][2] = [[1825, 990], [1738, 884], [1720, 929], [1788, 996], [1842, 945], [1772, 877]] ; Timer positions [[dx, dy], [bx, by], [obx, oby], [orx, ory], [tbx, tby], [trx, try]]
Local $color_code[$iTimerCount] = [0xFF00FF, 0xFF00FF, 0x00FF00, 0xFF0000, 0x00FF00, 0xFF0000] ; Timer color [d, b, ob, or, tb, tr]
Local $hRectangle_GUI = GUICreate("", @DesktopWidth, @DesktopHeight, 0, 0, $WS_POPUP, $WS_EX_TOOLWINDOW + $WS_EX_TOPMOST + $WS_EX_LAYERED + $WS_EX_TRANSPARENT)
Local $hMaster_Mask = _WinAPI_CreateRectRgn(0, 0, @DesktopWidth, @DesktopHeight)
For $i=0 To $iTimerCount - 1 ; Create timer, set font, set color
$TimeLabel[$i] = GUICtrlCreateLabel ( "", $pos[$i][0], $pos[$i][1], 20, 15, $SS_CENTER)
GuiCtrlSetColor(-1, $color_code[$i])
GUICtrlSetBkColor(-1, 0xABCDEF)
Next
GUISetBkColor(0xABCDEF)
_WinAPI_SetLayeredWindowAttributes($hRectangle_GUI, 0xABCDEF, 255)
GUISetState()
AdlibRegister('_Check', $iAdlibTicks)
AdlibRegister('_Pressed', $iAdlibTicks)
EndFuncFunc _Pressed ()
[/autoit] [autoit][/autoit] [autoit]
If _IsPressed('60') Then
_StartTimer(0)
Sleep(100)
ElseIf _IsPressed('6E') Then
_StartTimer(1)
Sleep(100)
ElseIf _IsPressed('61') Then
_StartTimer(2)
Sleep(100)
ElseIf _IsPressed('64') Then
_StartTimer(3)
Sleep(100)
ElseIf _IsPressed('63') Then
_StartTimer(4)
Sleep(100)
ElseIf _IsPressed('66') Then
_StartTimer(5)
Sleep(500)
EndIf
EndFuncFunc _Check ()
[/autoit] [autoit][/autoit] [autoit]
Local $aTicks[$iTimerCount]
Local $iTicks = TimerDiff($iProgTimer)
For $i = 0 To $iTimerCount - 1
$aTicks[$i] = ($iTicks - $aTimer[$i])
Next
For $i = 0 To $iTimerCount - 1
If $TimerActive[$i] Then
$iTicks = $aTimerStart[$i] * 1000 - $aticks[$i]
If $iTicks < $iFlashStartTicks Then
If $iTicks <= 0 Then
$TimerActive[$i] = not $TimerActive[$i]
$iTicks = 0
GUISetState(@SW_HIDE, $TimerActive[$i])
EndIf
EndIf
GUICtrlSetData($TimeLabel[$i], _MyTicksToTime($iTicks))
EndIf
Next
EndFuncFunc _MyTicksToTime($iTicks)
[/autoit] [autoit][/autoit] [autoit]
Local $sOut = StringRight(Int($iTicks/1000), 3)
Return $sOut
EndFunc
Func _StartTimer($iCount)
$TimerActive[$iCount] = not $TimerActive[$iCount]
GUISetState(@SW_SHOW, $TimerActive[$iCount])
If $TimerActive[$iCount] Then
$aTimer[$iCount] = TimerDiff($iProgTimer)
Else
GUICtrlSetData($TimeLabel[$iCount], '')
EndIf
EndFuncFunc On_Exit()
[/autoit] [autoit][/autoit] [autoit]Exit
[/autoit] [autoit][/autoit] [autoit]EndFunc
[/autoit]was das skript tut ist folgendes:
1) gui startet in der man eine auflösung auswählt (für meine frage uninteressant, und für spätere funktionen vorgesehen)
2) dann wird ein transparentes und nicht anklickbares overlay erstellt
3) durch klicken der tasten numblock 0,1,3,4,6,komma können timer in der
rechten unteren bildschirmecke gestartet werden. (diese funktion wurde
über "_IsPressed" und nicht über einen hotkeyset realisiert, da die
timer sonst falls eine anwendung die selben hotkeys benutzt nicht gestartet werden könnenprobiert das skript am besten einfach mal aus, dann werdet ihr merken
was ich genau mit dem timerflackern und der trägen antwort auf die
tasteneingaben meine.hoffe ihr könnt mir helfen. Sinn soll es sein mit dem skript timer zu starten die dann runterzählen bis auf 0 und dann verschwinden
und sich bei nochmaligem drücken erneuern (bis auf die oben genannten
probleme funktioniert das auch)viele grüße
63rrit
-
-
[strike]
hallo ihr lieben,
ich schreibe mir immoment ein kleines script und habe ein paar probleme dabei ein nicht klickbares overlay zu erstellen auf dem durch einen hotkey ein countdown timer erstellt wird, der nach ablauf des timers wieder verschindet.mein code bisher:
Spoiler anzeigen
[autoit]
[/autoit] [autoit][/autoit] [autoit]
#include <GuiConstantsEx.au3>
#include <WindowsConstants.au3>
#include <WinAPI.au3>HotKeySet("{NUMPAD0}", "d")
[/autoit] [autoit][/autoit] [autoit]
HotKeySet("{NUMPAD9}", "On_Exit")Global $TimeLabel, $_Seconds, $TimeTicks, $_SecCalc, $_Countdown, $SS_CENTER, $hGUI, $aRadio[5], $hButton, $res, $d_timer, $x_pos_d, $y_pos_d
[/autoit] [autoit][/autoit] [autoit]
$hGUI = GUICreate("LJT", 150, 190)$x_pos_b = 100
[/autoit] [autoit][/autoit] [autoit]
$y_pos_b = 100; gui zum auswählen einer bildschirmauflösung (der timer soll später an eine feste stelle auf dem desktop kommen und bei veränderter auflösung auch noch richtig platziert werden -> damit ich das script auch auf meinem laptop nutzen kann :))))->
[/autoit] [autoit][/autoit] [autoit]GUICtrlCreateLabel("Choose your resolution", 10, 10, 150, 20)
[/autoit] [autoit][/autoit] [autoit]GUIStartGroup()
[/autoit] [autoit][/autoit] [autoit]
For $i = 0 To 4
Local $res[5] = ["2560 x 1440", "1920 x 1080", "1600 x 900", "1280 x 720", "1024 x 768"]
$aRadio[$i] = GUICtrlCreateRadio($res[$i], 55, 30 + ($i * 20), 100, 20)
Next
GUICtrlSetState($aRadio[0], $GUI_CHECKED)$hButton = GUICtrlCreateButton("Start Timer", 35, 150, 80, 30)
[/autoit] [autoit][/autoit] [autoit]GUISetState()
[/autoit] [autoit][/autoit] [autoit]While 1
[/autoit] [autoit][/autoit] [autoit]Switch GUIGetMsg()
[/autoit] [autoit][/autoit] [autoit]
Case $GUI_EVENT_CLOSE
Exit
Case $hButton
GUISetState(@SW_HIDE, $hGUI)
For $i = 0 To 4
If GUICtrlRead($aRadio[$i]) = 1 Then
$res = $i
ExitLoop
EndIf
Next
Timer()
EndSwitchWEnd
[/autoit] [autoit][/autoit] [autoit]; gui timer auf dem nicht klickbarem overlay->
[/autoit] [autoit][/autoit] [autoit]Func Timer()
[/autoit] [autoit][/autoit] [autoit]
Local $hRectangle_GUI = GUICreate("", @DesktopWidth, @DesktopHeight, 0, 0, $WS_POPUP, $WS_EX_TOOLWINDOW + $WS_EX_TOPMOST)
Local $hMaster_Mask = _WinAPI_CreateRectRgn(0, 0, 0, 0)
$TimeLabel = GUICtrlCreateLabel ( "", $x_pos_b, $y_pos_b, 100, 50, $SS_CENTER )
GUICtrlSetFont ( -1, 8, 200 )
_WinAPI_SetWindowRgn($hRectangle_GUI, $hMaster_Mask)
GUISetState()
EndFunc; countdown checkfunktion berechnet die sekunden und alarmiert bei 20/1 sekunde/n->
[/autoit] [autoit][/autoit] [autoit]Func _Check ()
[/autoit] [autoit][/autoit] [autoit]
$_Countdown -= TimerDiff ( $TimeTicks )
$TimeTicks = TimerInit ( )
$_SecCalc = Int ( $_Countdown / 1000 )
If $_SecCalc <= 0 Then
GUICtrlSetData ( $TimeLabel, "" )
Else
If $_SecCalc <> $_Seconds Then
$_Seconds = $_SecCalc
GUICtrlSetData ( $TimeLabel, StringFormat ("u", $_Seconds ) )
If $_Seconds = 20 or $_Seconds = 1 Then
Beep ( 1200, 100 )
EndIf
EndIf
EndIf
EndFunc; d funktion setzt die countdownzeit und statet den countdown->
[/autoit] [autoit][/autoit] [autoit]Func d()
[/autoit] [autoit][/autoit] [autoit]
$d_timer = 360000
$_Countdown = $d_timer
$TimeTicks = TimerInit ()
While 1
_Check()
Sleep (200)
WEnd
EndFuncFunc On_Exit()
[/autoit] [autoit][/autoit] [autoit]Exit
[/autoit] [autoit][/autoit] [autoit]EndFunc
[/autoit]wie ihr sicher gemerkt habt bin ich mit gui's noch nicht so bewandert
[/strike]
UPDATE + updated code:
nachdem in einer gui die bildschirmauflösung ausgewählt wurde, sollen
auf knopfdruck in einem "durchklickbaren" und transparentem overlay
Countdowntimer erstellt werden die von z.b. 300 sek bis 0 zählen und bei
20 sek und 1 sek einen warnton abgeben. Bei 0 sekunden soll der timer
wieder verschwinden.-> soweit funktioniert der code auch [unterschiedliche koordinaten je
nach auflösung sind noch nicht vergeben worden, aber an dieser stelle
erstmal auch nicht nötig (das auswahlfenster am anfang ist somit auch immoment noch sinnfrei)]Das problem: es können zwar alle 6 timer gestartet werden, aber visuell
werden nur die änderungen von dem zuletzt geklickten timer angezeigt.(-> anscheinend kann autoit funktionen in meinem skript nicht 6 mal parallel laufen lassen)
hat da jemand von euch eine elegante lösung?
auch generell andere anmerkungen/verbesserungsvorschläge zum code sind erwünscht
Spoiler anzeigen
[autoit]
[/autoit] [autoit][/autoit] [autoit]
#include <GuiConstantsEx.au3>
#include <WindowsConstants.au3>
#include <WinAPI.au3>HotKeySet("{NUMPADDOT}", "b")
[/autoit] [autoit][/autoit] [autoit]
HotKeySet("{NUMPAD0}", "d")
HotKeySet("{NUMPAD1}", "o_b")
HotKeySet("{NUMPAD3}", "t_b")
HotKeySet("{NUMPAD4}", "o_r")
HotKeySet("{NUMPAD6}", "t_r")
HotKeySet("{NUMPAD9}", "On_Exit")Global $SS_CENTER, $hGUI, $aRadio[5], $hButton, $res
[/autoit] [autoit][/autoit] [autoit]
Global $TimeLabel_d, $TimeLabel_b, $TimeLabel_ob, $TimeLabel_or, $TimeLabel_tb, $TimeLabel_tr, $TimeLabel
Global $TimeTicks_d, $TimeTicks_b, $TimeTicks_ob, $TimeTicks_or, $TimeTicks_tb, $TimeTicks_tr, $TimeTicks
Global $_SecCalc_d, $_SecCalc_b, $_SecCalc_ob, $_SecCalc_or, $_SecCalc_tb, $_SecCalc_tr, $_SecCalc
Global $_Seconds_d, $_Seconds_b, $_Seconds_ob, $_Seconds_or, $_Seconds_tb, $_Seconds_tr, $_Seconds
Global $x_pos_b, $y_pos_b, $x_pos_d, $y_pos_d, $x_pos_ob, $y_pos_ob, $x_pos_or, $y_pos_or, $x_pos_tb, $y_pos_tb, $x_pos_tr, $y_pos_tr$hGUI = GUICreate("LJT", 150, 190)
[/autoit] [autoit][/autoit] [autoit]$x_pos_d = 1825
[/autoit] [autoit][/autoit] [autoit][/autoit] [autoit][/autoit] [autoit]
$y_pos_d = 990
$x_pos_b = 1738
$y_pos_b = 884
$x_pos_ob = 1720
$y_pos_ob = 929
$x_pos_or = 1788
$y_pos_or = 996
$x_pos_tb = 1842
$y_pos_tb = 945
$x_pos_tr = 1772
$y_pos_tr = 877GUICtrlCreateLabel("Choose your resolution", 10, 10, 150, 20)
[/autoit] [autoit][/autoit] [autoit]GUIStartGroup()
[/autoit] [autoit][/autoit] [autoit]
For $i = 0 To 4
Local $res[5] = ["2560 x 1440", "1920 x 1080", "1600 x 900", "1280 x 720", "1024 x 768"]
$aRadio[$i] = GUICtrlCreateRadio($res[$i], 55, 30 + ($i * 20), 100, 20)
Next
GUICtrlSetState($aRadio[0], $GUI_CHECKED)$hButton = GUICtrlCreateButton("Start Overlay", 35, 150, 80, 30)
[/autoit] [autoit][/autoit] [autoit]GUISetState()
[/autoit] [autoit][/autoit] [autoit]While 1
[/autoit] [autoit][/autoit] [autoit]Switch GUIGetMsg()
[/autoit] [autoit][/autoit] [autoit]
Case $GUI_EVENT_CLOSE
Exit
Case $hButton
GUISetState(@SW_HIDE, $hGUI)
For $i = 0 To 4
If GUICtrlRead($aRadio[$i]) = 1 Then
$res = $i
ExitLoop
EndIf
Next
Timer()
EndSwitchWEnd
[/autoit] [autoit][/autoit] [autoit]; -------------
[/autoit] [autoit][/autoit] [autoit]Func Timer()
[/autoit] [autoit][/autoit] [autoit]
Local $hRectangle_GUI = GUICreate("", @DesktopWidth, @DesktopHeight, 0, 0, $WS_POPUP, $WS_EX_TOOLWINDOW + $WS_EX_TOPMOST + $WS_EX_LAYERED + $WS_EX_TRANSPARENT)
Local $hMaster_Mask = _WinAPI_CreateRectRgn(0, 0, @DesktopWidth, @DesktopHeight)
$TimeLabel_d = GUICtrlCreateLabel ( "", $x_pos_d, $y_pos_d, 20, 15, $SS_CENTER )
$TimeLabel_b = GUICtrlCreateLabel ( "", $x_pos_b, $y_pos_b, 20, 15, $SS_CENTER )
$TimeLabel_ob = GUICtrlCreateLabel ( "", $x_pos_ob, $y_pos_ob, 20, 15, $SS_CENTER )
$TimeLabel_or = GUICtrlCreateLabel ( "", $x_pos_or, $y_pos_or, 20, 15, $SS_CENTER )
$TimeLabel_tb = GUICtrlCreateLabel ( "", $x_pos_tb, $y_pos_tb, 20, 15, $SS_CENTER )
$TimeLabel_tr = GUICtrlCreateLabel ( "", $x_pos_tr, $y_pos_tr, 20, 15, $SS_CENTER )
GUISetFont ( -1, 8, 200 )
GuiCtrlSetColor($TimeLabel_d, 0xFF00FF)
GuiCtrlSetColor($TimeLabel_b, 0xFF00FF)
GuiCtrlSetColor($TimeLabel_ob, 0x0000FF)
GuiCtrlSetColor($TimeLabel_or, 0xFF0000)
GuiCtrlSetColor($TimeLabel_tb, 0x0000FF)
GuiCtrlSetColor($TimeLabel_tr, 0xFF0000)
GUISetBkColor(0xABCDEF)
_WinAPI_SetLayeredWindowAttributes($hRectangle_GUI, 0xABCDEF, 255)
GUISetState()
EndFuncFunc _Check ($timer, $TimeTicks, $TimeLabel, $_SecCalc, $_Seconds)
[/autoit] [autoit][/autoit] [autoit][/autoit] [autoit]
$timer -= TimerDiff ( $TimeTicks )
$TimeTicks = TimerInit ( )
$_SecCalc = Int ( $timer / 1000 )
If $_SecCalc <= 0 Then
GUICtrlSetData ( $TimeLabel, "" )
Else
If $_SecCalc <> $_Seconds Then
$_Seconds = $_SecCalc
GUICtrlSetData ( $TimeLabel, StringFormat ("%02u", $_Seconds ) )
If $_Seconds = 20 or $_Seconds = 1 Then
Beep ( 1200, 100 )
EndIf
EndIf
EndIf
EndFuncFunc d()
[/autoit] [autoit][/autoit] [autoit]
$d_timer = 360000
$TimeTicks_d = TimerInit ()
While 1
_Check($d_timer, $TimeTicks_d, $TimeLabel_d, $_SecCalc_d, $_Seconds_d)
Sleep (200)
WEnd
EndFuncFunc b()
[/autoit] [autoit][/autoit] [autoit]
$b_timer = 420000
$TimeTicks_b = TimerInit ()
While 1
_Check($b_timer, $TimeTicks_b, $TimeLabel_b, $_SecCalc_b, $_Seconds_b)
Sleep (200)
WEnd
EndFuncFunc o_b()
[/autoit] [autoit][/autoit] [autoit]
$ob_timer = 300000
$TimeTicks_ob = TimerInit ()
While 1
_Check($ob_timer, $TimeTicks_ob, $TimeLabel_ob, $_SecCalc_ob, $_Seconds_ob)
Sleep (200)
WEnd
EndFuncFunc o_r()
[/autoit] [autoit][/autoit] [autoit]
$or_timer = 300000
$TimeTicks_or = TimerInit ()
While 1
_Check($or_timer, $TimeTicks_or, $TimeLabel_or, $_SecCalc_or, $_Seconds_or)
Sleep (200)
WEnd
EndFuncFunc t_b()
[/autoit] [autoit][/autoit] [autoit]
$tb_timer = 300000
$TimeTicks_tb = TimerInit ()
While 1
_Check($tb_timer, $TimeTicks_tb, $TimeLabel_tb, $_SecCalc_tb, $_Seconds_tb)
Sleep (200)
WEnd
EndFuncFunc t_r()
[/autoit] [autoit][/autoit] [autoit]
$tr_timer = 300000
$TimeTicks_tr = TimerInit ()
While 1
_Check($tr_timer, $TimeTicks_tr, $TimeLabel_tr, $_SecCalc_tr, $_Seconds_tr)
Sleep (200)
WEnd
EndFuncFunc On_Exit()
[/autoit] [autoit][/autoit] [autoit]Exit
[/autoit] [autoit][/autoit] [autoit]EndFunc
[/autoit]viele grüße