XiaolinDraconis Posted June 22, 2014 Posted June 22, 2014 (edited) Trying to make two functions work on one HotKeySet during testing each component worked great. However when I put it all together, something in the Func TapTimer() has failed, at least I think that's the problem. It works properly the first run, after that it seems to either stop toggling the hotkey off, or _IsPressed keeps reporting that I let go even though I'm still holding it. Anyone know how to get it working properly? expandcollapse popup#NoTrayIcon #include <Misc.au3> #include <MsgBoxConstants.au3> #include <TrayConstants.au3> #include <ButtonConstants.au3> #include <GUIConstantsEx.au3> #include <SliderConstants.au3> #include <StaticConstants.au3> #include <WindowsConstants.au3> Opt("TrayMenuMode", 3) ; The default tray menu items will not be shown and items are not checked when selected. These are options 1 and 2 for TrayMenuMode. Opt("TrayOnEventMode", 1) ; Enable TrayOnEventMode. HotKeySet("^{SPACE}", "TapTimer") If FileExists(@AutoItExe & "\OTPT.ini") Then Sleep(10) Else IniWrite("OTPT.ini", "AOT", "True", "1" & @CRLF) IniWrite("OTPT.ini", "Transparency", "Value", "204" & @CRLF & @CRLF & "Max Transparency Value = 255") EndIf $Toggle = 0 $AOT = IniRead("OTPT.ini", "AOT", "True", "1") $Transparency = IniRead("OTPT.ini", "Transparency", "Value", "204") TrayMenu() Func TrayMenu() TrayCreateItem("Settings") TrayItemSetOnEvent(-1, "Options") TrayCreateItem("About") TrayItemSetOnEvent(-1, "About") TrayCreateItem("") ; Create a separator line. TrayCreateItem("Exit") TrayItemSetOnEvent(-1, "ExitScript") TraySetOnEvent($TRAY_EVENT_PRIMARYDOUBLE, "Options") ; Display the About MsgBox when the tray icon is double clicked on with the primary mouse button. TraySetState($TRAY_ICONSTATE_SHOW) ; Show the tray menu. EndFunc ;==>TrayMenu While 1 Sleep(100) ; An idle loop. WEnd Func TapTimer() $DLL = DllOpen("user32.dll") HotKeySet("^{SPACE}") $Timer = TimerInit() While _IsPressed("20",$DLL) Sleep(1000) WEnd $Time = TimerDiff($Timer) If $Time < 3000 Then OnTop() Sleep(500) Else Options() Sleep(500) EndIf DllClose($DLL) HotKeySet("^{SPACE}", "OnTop") EndFunc ;==>TapTimer Func Options() $Form1 = GUICreate("Settings", 290, 142) $Radio1 = GUICtrlCreateRadio("", 119, 32, 17, 17) $Radio2 = GUICtrlCreateRadio("", 168, 32, 17, 17) $Label1 = GUICtrlCreateLabel("ON", 96, 32, 20, 17) $Label2 = GUICtrlCreateLabel("OFF", 142, 30, 24, 17) $Slider = GUICtrlCreateSlider(13, 72, 255, 25) GUICtrlSetData(-1,$Transparency) GUICtrlSetLimit(-1, 255, 0) $Label3 = GUICtrlCreateLabel("-", 8, 72, 15, 17) $Label4 = GUICtrlCreateLabel("+", 269, 70, 10, 17) $Label5 = GUICtrlCreateLabel("Always On Top", 102, 3, 89, 17) GUICtrlSetFont(-1, 8, 800, 0, "MS Sans Serif") $Label6 = GUICtrlCreateLabel("Transparency", 106, 56, 81, 17) GUICtrlSetFont(-1, 8, 800, 0, "MS Sans Serif") $OK = GUICtrlCreateButton("OK", 128, 104, 33, 33) GUISetState(@SW_SHOW) While 1 $nMsg = GUIGetMsg() Switch $nMsg Case $GUI_EVENT_CLOSE GUISetState(@SW_HIDE) Case $OK While GUICtrlRead($Radio1) = $GUI_UNCHECKED And GUICtrlRead($Radio2) = $GUI_UNCHECKED Sleep(100) ToolTip("Please Select ON/OFF State") WEnd If GUICtrlGetState($Radio1) = $GUI_CHECKED Then $AOT = 1 $Transparency = GUICtrlRead($Slider) Else $AOT = 0 $Transparency = GUICtrlRead($Slider) EndIf IniWrite("OTPT.ini", "AOT", "True", $AOT) IniWrite("OTPT.ini", "Transparency", "Value", $Transparency) ToolTip("") GUISetState(@SW_HIDE) ExitLoop EndSwitch WEnd EndFunc ;==>Options Func About() MsgBox($MB_OK, "About", "OnTopPeekThrough" & @CRLF & @CRLF & _ "Press CTRL+SPACE to toggle" & @CRLF & _ "Or hold 3 seconds for Options" & @CRLF & @CRLF & _ "By: XiaolinDraconis") EndFunc ;==>About Func OnTop() If $Toggle = 0 Then $Toggle = 1 Set() Else $Toggle = 0 Unset() EndIf EndFunc ;==>OnTop Func Set() $WinTitle = WinGetTitle("[active]") WinSetOnTop($WinTitle, "", 1) WinSetTrans($WinTitle, "", $Transparency) EndFunc ;==>Set Func Unset() $WinTitle = WinGetTitle("[active]") WinSetOnTop($WinTitle, "", 0) WinSetTrans($WinTitle, "", 255) EndFunc ;==>Unset Func ExitScript() Exit EndFunc ;==>ExitScript Edited June 22, 2014 by XiaolinDraconis
JohnOne Posted June 22, 2014 Posted June 22, 2014 An explanation of what it is supposed to do would be good. AutoIt Absolute Beginners Require a serial Pause Script Video Tutorials by Morthawt ipify Monkey's are, like, natures humans.
XiaolinDraconis Posted June 22, 2014 Author Posted June 22, 2014 (edited) An explanation of what it is supposed to do would be good. If CTRL+Space are pressed for less than 3 seconds it makes the active window always on top and transparent, longer than that it will open the settings dialog. Toggles with each tap. Edited June 22, 2014 by XiaolinDraconis
XiaolinDraconis Posted June 22, 2014 Author Posted June 22, 2014 (edited) Just realized I need to add something to the options, redefine HotKey. Oh boy... I'll handle that after this issue gets sorted. Edited June 22, 2014 by XiaolinDraconis
XiaolinDraconis Posted June 22, 2014 Author Posted June 22, 2014 (edited) "If calling this function repeatedly, you should open 'user32.dll' and pass the handle. Make sure to close the handle at end of script using DllClose." Derped once again. Ok then, apparently I still don't understand, I used the DLLCall but to no avail. Updated OP with altered (still fail) code Edited June 22, 2014 by XiaolinDraconis
XiaolinDraconis Posted June 22, 2014 Author Posted June 22, 2014 (edited) Func TapTimer() HotKeySet("^{SPACE}") $TapTime = 0 While _IsPressed("20") Sleep(1000) $TapTime += 1 WEnd If $TapTime < 3 Then OnTop() Sleep(500) Else Options() Sleep(500) EndIf HotKeySet("^{SPACE}", "OnTop") EndFunc ;==>TapTimer Once again it works as expected, but only once. Holding the hotkey again simply rapid fires the OnTop() function. I don't see how it can since the first line in TapTimer() is set to disable the hotkey. Edited June 22, 2014 by XiaolinDraconis
Solution XiaolinDraconis Posted June 22, 2014 Author Solution Posted June 22, 2014 I'm tired, quit laughing.
JohnOne Posted June 22, 2014 Posted June 22, 2014 In your TapTimer() function you set hotkey to OnTop() function. What is it you expect the hotkey to do after that? AutoIt Absolute Beginners Require a serial Pause Script Video Tutorials by Morthawt ipify Monkey's are, like, natures humans.
JohnOne Posted June 22, 2014 Posted June 22, 2014 Here's a repo so you might see. #include <Misc.au3> HotKeySet("^{SPACE}", "TapTimer") While 3 Sleep(300) WEnd Func TapTimer() HotKeySet("^{SPACE}") $TapTime = 0 While _IsPressed("20") Sleep(1000) $TapTime += 1 WEnd If $TapTime < 3 Then ConsoleWrite("OnTop()" & @LF) Sleep(500) Else ConsoleWrite("Options()" & @LF) Sleep(500) EndIf HotKeySet("^{SPACE}", "OnTop") EndFunc ;==>TapTimer Func OnTop() ConsoleWrite("In OnTop() Function" & @LF) EndFunc AutoIt Absolute Beginners Require a serial Pause Script Video Tutorials by Morthawt ipify Monkey's are, like, natures humans.
XiaolinDraconis Posted June 22, 2014 Author Posted June 22, 2014 (edited) Yeah I noticed that bit immediately after posting the snippet with that line in it. If you could prevent me from making a new thread, I'm now trying to understand why my slider keeps reverting to 100 and no radio is checked even though it should be reading those settings from the variables. $Form1 = GUICreate("Settings", 290, 142) $Radio1 = GUICtrlCreateRadio("", 119, 32, 17, 17) If $AOT = 1 Then GUICtrlSetData($Radio1,$GUI_CHECKED,$GUI_CHECKED) Else GUICtrlSetData($Radio1,$GUI_UNCHECKED,$GUI_UNCHECKED) EndIf $Radio2 = GUICtrlCreateRadio("", 168, 32, 17, 17) $Label1 = GUICtrlCreateLabel("ON", 96, 32, 20, 17) $Label2 = GUICtrlCreateLabel("OFF", 142, 30, 24, 17) $Slider = GUICtrlCreateSlider(13, 72, 255, 25) GUICtrlSetData(-1, $Transparency) GUICtrlSetLimit(-1, 255, 0) $Label3 = GUICtrlCreateLabel("-", 8, 72, 15, 17) $Label4 = GUICtrlCreateLabel("+", 269, 70, 10, 17) $Label5 = GUICtrlCreateLabel("Always On Top", 102, 3, 89, 17) GUICtrlSetFont(-1, 8, 800, 0, "MS Sans Serif") $Label6 = GUICtrlCreateLabel("Transparency", 106, 56, 81, 17) GUICtrlSetFont(-1, 8, 800, 0, "MS Sans Serif") $OK = GUICtrlCreateButton("OK", 128, 104, 33, 33) GUISetState(@SW_SHOW) Edited June 22, 2014 by XiaolinDraconis
JohnOne Posted June 22, 2014 Posted June 22, 2014 It's important that you post runnable code. People don't want to fart around to even get a code running before trying to debug it. AutoIt Absolute Beginners Require a serial Pause Script Video Tutorials by Morthawt ipify Monkey's are, like, natures humans.
XiaolinDraconis Posted June 22, 2014 Author Posted June 22, 2014 expandcollapse popup#NoTrayIcon #include <Misc.au3> #include <MsgBoxConstants.au3> #include <TrayConstants.au3> #include <ButtonConstants.au3> #include <GUIConstantsEx.au3> #include <SliderConstants.au3> #include <StaticConstants.au3> #include <WindowsConstants.au3> Opt("TrayMenuMode", 3) ; The default tray menu items will not be shown and items are not checked when selected. These are options 1 and 2 for TrayMenuMode. Opt("TrayOnEventMode", 1) ; Enable TrayOnEventMode. HotKeySet("^{SPACE}", "TapTimer") If FileExists(".\OTPT.ini") Then Sleep(1000) Else IniWrite("OTPT.ini", "AOT", "True", "1" & @CRLF) IniWrite("OTPT.ini", "Transparency", "Value", "204" & @CRLF & @CRLF & "Max Transparency Value = 255") EndIf $Toggle = 0 $AOT = IniRead("OTPT.ini", "AOT", "True", "1") $Transparency = IniRead("OTPT.ini", "Transparency", "Value", "204") TrayMenu() Func TrayMenu() TrayCreateItem("Settings") TrayItemSetOnEvent(-1, "Options") TrayCreateItem("About") TrayItemSetOnEvent(-1, "About") TrayCreateItem("") ; Create a separator line. TrayCreateItem("Exit") TrayItemSetOnEvent(-1, "ExitScript") TraySetOnEvent($TRAY_EVENT_PRIMARYDOUBLE, "Options") ; Display the About MsgBox when the tray icon is double clicked on with the primary mouse button. TraySetState($TRAY_ICONSTATE_SHOW) ; Show the tray menu. EndFunc ;==>TrayMenu While 1 Sleep(100) ; An idle loop. WEnd Func TapTimer() HotKeySet("^{SPACE}") $TapTime = 0 While _IsPressed("20") Sleep(1000) $TapTime += 1 WEnd If $TapTime < 3 Then OnTop() Sleep(500) Else Options() Sleep(500) EndIf HotKeySet("^{SPACE}", "TapTimer") EndFunc ;==>TapTimer Func Options() $Form1 = GUICreate("Settings", 290, 142) $Radio1 = GUICtrlCreateRadio("", 119, 32, 17, 17) If $AOT = 1 Then GUICtrlSetData($Radio1, $GUI_CHECKED, $GUI_CHECKED) Else GUICtrlSetData($Radio1, $GUI_UNCHECKED, $GUI_UNCHECKED) EndIf $Radio2 = GUICtrlCreateRadio("", 168, 32, 17, 17) $Label1 = GUICtrlCreateLabel("ON", 96, 32, 20, 17) $Label2 = GUICtrlCreateLabel("OFF", 142, 30, 24, 17) $Slider = GUICtrlCreateSlider(13, 72, 255, 25) GUICtrlSetData(-1, $Transparency) GUICtrlSetLimit(-1, 255, 0) $Label3 = GUICtrlCreateLabel("-", 8, 72, 15, 17) $Label4 = GUICtrlCreateLabel("+", 269, 70, 10, 17) $Label5 = GUICtrlCreateLabel("Always On Top", 102, 3, 89, 17) GUICtrlSetFont(-1, 8, 800, 0, "MS Sans Serif") $Label6 = GUICtrlCreateLabel("Transparency", 106, 56, 81, 17) GUICtrlSetFont(-1, 8, 800, 0, "MS Sans Serif") $OK = GUICtrlCreateButton("OK", 128, 104, 33, 33) GUISetState(@SW_SHOW) WinSetOnTop("Settings", "", 1) While 1 WinActivate("Settings") $nMsg = GUIGetMsg() Switch $nMsg Case $GUI_EVENT_CLOSE GUISetState(@SW_HIDE) ExitLoop Case $OK While GUICtrlRead($Radio1) = $GUI_UNCHECKED And GUICtrlRead($Radio2) = $GUI_UNCHECKED Sleep(100) ToolTip("Please Select ON/OFF State") WinActivate("Settings") WEnd If GUICtrlGetState($Radio1) = $GUI_CHECKED Then $AOT = 1 $Transparency = GUICtrlRead($Slider) Else $AOT = 0 $Transparency = GUICtrlRead($Slider) EndIf IniWrite("OTPT.ini", "AOT", "True", $AOT) IniWrite("OTPT.ini", "Transparency", "Value", $Transparency) ToolTip("") GUISetState(@SW_HIDE) ExitLoop EndSwitch WEnd EndFunc ;==>Options Func About() MsgBox($MB_OK, "About", "OnTopPeekThrough" & @CRLF & @CRLF & _ "Press CTRL+SPACE to toggle" & @CRLF & _ "Or hold 3 seconds for Options" & @CRLF & @CRLF & _ "By: XiaolinDraconis") EndFunc ;==>About Func OnTop() If $Toggle = 0 Then $Toggle = 1 Set() Else $Toggle = 0 Unset() EndIf EndFunc ;==>OnTop Func Set() $WinTitle = WinGetTitle("[active]") WinSetOnTop($WinTitle, "", 1) WinSetTrans($WinTitle, "", $Transparency) EndFunc ;==>Set Func Unset() $WinTitle = WinGetTitle("[active]") WinSetOnTop($WinTitle, "", 0) WinSetTrans($WinTitle, "", 255) EndFunc ;==>Unset Func ExitScript() Exit EndFunc ;==>ExitScript My apologies.
XiaolinDraconis Posted June 23, 2014 Author Posted June 23, 2014 I think I need to start over, get a fresh look at what's in my head. See how I really want this to work, as it is I went for something simple and kept tweaking.
JohnOne Posted June 23, 2014 Posted June 23, 2014 I thought you solved, the thread is marked as answered. AutoIt Absolute Beginners Require a serial Pause Script Video Tutorials by Morthawt ipify Monkey's are, like, natures humans.
XiaolinDraconis Posted June 24, 2014 Author Posted June 24, 2014 I thought you solved, the thread is marked as answered. Well yeah, but one problem leads to another, and then I got new ideas for it while fixing those.
Recommended Posts
Create an account or sign in to comment
You need to be a member in order to leave a comment
Create an account
Sign up for a new account in our community. It's easy!
Register a new accountSign in
Already have an account? Sign in here.
Sign In Now