Kurtferro Posted October 30, 2007 Share Posted October 30, 2007 (edited) i post a simple script for exemple, to make you understand my problem starts this script and follow my directions. 1 press "go to tray" button. 2 use tray menu and press on "start do ..". (will appear a message box "rundo start, stop with tray menu or ctrl+alt+s") wait 6 second or clik ok and do loop will stat with a useless pixelgetcolor, after.. 3 use again tray menu and press on "stop do .." or "exit" u will see the tray is like frozen, but if i use the hot key ctrl+alt+s it will be stoped (after all you have pressed on traymenu first will do), so the hotkey (than use the same function like a traymenu) it work always without problem. But the problem is more complex in reality, the traymenu not freezed when the loop is active but only when the loop is started with from there, because if I start the loop with the hotkey ctrl+alt+s and then go in the traymenu it work until the loop not start from there. expandcollapse popup#NoTrayIcon #include <GuiConstants.au3> #include <Constants.au3> #include <string.au3> ; Option Opt("WinTitleMatchMode", 4) Opt("TrayMenuMode",1) Opt("TrayOnEventMode",1) Opt("GUIOnEventMode", 1) Opt("SendKeyDelay", 200) ; HotKey HotKeySet("^!\", "Terminate");ctrl+alt+\ HotKeySet("^!s", "RunStopDo");ctrl+alt+s Dim $stopdo = 1 ; GUI GuiCreate("Test Gui and Tray event with do function", 360, 100) GUISetOnEvent($GUI_EVENT_CLOSE, "Terminate") $StartBut1 = GuiCtrlCreateButton("GO TO TRAY", 100, 35, 160, 30) GUICtrlSetOnEvent(-1, "GoToTray") GuiSetState() ; IDLE While 1 sleep(50) WEnd ;---------GUI END ---------- Func GoToTray() WinSetState("Test Gui and Tray event with do function", "", @SW_HIDE) TraySetToolTip("Click for the menu") $tray1 = TrayCreateItem("Run do (Ctrl+Alt+s)") TrayItemSetOnEvent(-1,"RunStopDo") $tray01 = TrayCreateItem("") $tray2 = TrayCreateItem("Exit (Ctrl+Alt+\)") TrayItemSetOnEvent(-1,"Terminate") $tray02 = TrayCreateItem("") TraySetState() sleep(100) EndFunc Func RunStopDo() If BitAnd(WinGetState("Test Gui and Tray event with do function", ""), 2) Then Return if $stopdo = 0 Then $stopdo = 1 TrayItemSetText($tray1, "Start do or ctrl+alt+s") Else $stopdo = 0 sleep(200) RunDo() EndIf EndFunc Func RunDo() TrayItemSetText($tray1, "Stop do or ctrl+alt+s") MsgBox(4096, "", "rundo start, stop with tray menu or ctrl+alt+s", 6) Do sleep(1000) $color = PixelGetColor(200,200) Until $stopdo = 1 MsgBox(4096, "", "rundo stoped pixel color= " & $color) Return EndFunc Func Terminate() Exit 0 EndFunc Edited October 30, 2007 by Kurtferro Link to comment Share on other sites More sharing options...
Kurtferro Posted October 30, 2007 Author Share Posted October 30, 2007 it's a bug or i wrong something? Link to comment Share on other sites More sharing options...
Siao Posted October 31, 2007 Share Posted October 31, 2007 (edited) Understand that gui/tray events do not interrupt the flow of custom loops and program flow in general (although HotKey does). Once you're in this: Do sleep(1000) $color = PixelGetColor(200,200) Until $stopdo = 1oÝ÷ Û*.q©÷öض!ü¨»§¶Ú!j÷«zÊhȯz¢þÚÚË*.².ÚeiDz¢êêº]¢Ê&zËn}øiùZ+,zÚ®¢×(u觲'^¶¦j)âvW¥¢ZºÚ"µÍY ÌÍÜÝÜÈ ÉÝÈH[ ÌÍØÛÛÜH^[Ù]ÛÛÜ HÛY L Edited October 31, 2007 by Siao "be smart, drink your wine" Link to comment Share on other sites More sharing options...
Kurtferro Posted October 31, 2007 Author Share Posted October 31, 2007 u mean? Do If $stopdo <> 1 Then $color = PixelGetColor(200,200) sleep(1000) Until $stopdo = 1 Link to comment Share on other sites More sharing options...
Kurtferro Posted October 31, 2007 Author Share Posted October 31, 2007 dont work, all tray menu are frozen, but only if i start RunStopDo() from traymenu, if i start from hotkey after the traymenu work and stop the do running. Link to comment Share on other sites More sharing options...
Siao Posted October 31, 2007 Share Posted October 31, 2007 I said the MAIN LOOP. ; IDLE While 1 sleep(50) WEnd to ; IDLE While 1 If $stopdo <> 1 Then $color = PixelGetColor(200,200) Sleep(1000) WEnd Then Func RunStopDo() If BitAnd(WinGetState("Test Gui and Tray event with do function", ""), 2) Then Return if $stopdo = 0 Then $stopdo = 1 TrayItemSetText($tray1, "Start do or ctrl+alt+s") MsgBox(4096, "", "rundo stoped pixel color= " & $color) Else $stopdo = 0 TrayItemSetText($tray1, "Stop do or ctrl+alt+s") MsgBox(4096, "", "rundo start, stop with tray menu or ctrl+alt+s", 6) ;~ sleep(200) ;~ RunDo() EndIf EndFunc And you also need Global $tray1, $tray2, $color at the top of your script. "be smart, drink your wine" Link to comment Share on other sites More sharing options...
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