kiboost Posted September 25, 2011 Share Posted September 25, 2011 (edited) Hi, I have a script that runs everydays (task sheduler). It happens at 7:00 when all workstations are locked. In this script, it kill a process that has a systray icon (another autoit script) and restart it after some stuff. I have put a few lines to find systray coordinates and a mousemove to refresh the systray (removing the tray icon of the process I killed). All works nice when the session is open. But every morning when unlocking sessions to start working, I see the mousemove didn't worked. So is there a solution to refresh the systray when the session is locked ? (win7 pro x64) here is my mousemove tricks : $TrayPos = WinGetPos("[class:Shell_TrayWnd]") $MousePos = MouseGetPos() MouseMove($TrayPos[2], $TrayPos[1]+($TrayPos[3]/2), 0) MouseMove($TrayPos[2]-400, $TrayPos[1]+$TrayPos[3]/2, 20) MouseMove($MousePos[0], $MousePos[1], 0) sleep(50) Thanks Edited September 25, 2011 by kiboost Win7 pro x64. scripts compiled to x64. - Autoit v3.3.6.1 | Scite 1.79 Link to comment Share on other sites More sharing options...
Ramzes Posted September 25, 2011 Share Posted September 25, 2011 (edited) Maybe "#NoTrayIcon" will better for you? Edited September 25, 2011 by Ramzes Sorry for my bad English but nobody is perfect. [font=arial, helvetica, sans-serif]Ramzes[/font] Link to comment Share on other sites More sharing options...
kiboost Posted September 25, 2011 Author Share Posted September 25, 2011 (edited) Well, this process I need to kill/refresh is another autoit script which is precisely a tray menu to directly access a lot of things internally. It is only a tray menu. Nearly all my autoit scripts have notrayicon. Edited September 25, 2011 by kiboost Win7 pro x64. scripts compiled to x64. - Autoit v3.3.6.1 | Scite 1.79 Link to comment Share on other sites More sharing options...
Ramzes Posted September 25, 2011 Share Posted September 25, 2011 (edited) To kill process you can use ProcessClose. To run ShellExecute. Example:ShellExecute("test.au3", "", @ScriptDir) ProcessClose("test.exe") Edited September 25, 2011 by Ramzes Sorry for my bad English but nobody is perfect. [font=arial, helvetica, sans-serif]Ramzes[/font] Link to comment Share on other sites More sharing options...
kiboost Posted September 25, 2011 Author Share Posted September 25, 2011 Yes that's exactly what I do. But processclose doesn't remove tray icon of the killed process. Win7 pro x64. scripts compiled to x64. - Autoit v3.3.6.1 | Scite 1.79 Link to comment Share on other sites More sharing options...
JohnOne Posted September 25, 2011 Share Posted September 25, 2011 (edited) Try a ControlClick(), maybe 2. EDIT: Something like this maybe. $hWnd = WinGetHandle("[class:Shell_TrayWnd]") ControlClick($hWnd,"","[CLASS:ToolbarWindow32; INSTANCE:1]") Sleep(1000) ControlClick($hWnd,"","[CLASS:MSTaskListWClass; INSTANCE:1]") Edited September 25, 2011 by JohnOne AutoIt Absolute Beginners  Require a serial  Pause Script  Video Tutorials by Morthawt  ipify Monkey's are, like, natures humans. Link to comment Share on other sites More sharing options...
kiboost Posted September 25, 2011 Author Share Posted September 25, 2011 Hi John, sorry but it doesn't work. Your script work but it doesn't remove old icon from tray. I will try with systray udf to list all tray icon, find my process, and controlclick on it. Win7 pro x64. scripts compiled to x64. - Autoit v3.3.6.1 | Scite 1.79 Link to comment Share on other sites More sharing options...
JohnOne Posted September 25, 2011 Share Posted September 25, 2011 Try this #Include <WinAPI.au3> $hWnd = WinGetHandle("[class:Shell_TrayWnd]") _WinAPI_RedrawWindow($hWnd) AutoIt Absolute Beginners  Require a serial  Pause Script  Video Tutorials by Morthawt  ipify Monkey's are, like, natures humans. Link to comment Share on other sites More sharing options...
kiboost Posted September 25, 2011 Author Share Posted September 25, 2011 Doesn't work either. it works anyway with systray udf : #include <UDF/SysTray_UDF.au3> $iTitles = _SysTrayIconTitles () $iProcesses = _SysTrayIconProcesses () For $i = 0 To UBound($iTitles) - 1 If $iProcesses[$i] = "" Then _SysTrayIconRemove($i) Next I've tested with sleep giving me time to lock the session, and it works ! Thanks for your help, you pointed me in good direction :-) Win7 pro x64. scripts compiled to x64. - Autoit v3.3.6.1 | Scite 1.79 Link to comment Share on other sites More sharing options...
rover Posted September 26, 2011 Share Posted September 26, 2011 Well, this process I need to kill/refresh is another autoit script which is precisely a tray menu to directly access a lot of things internally. It is only a tray menu. Nearly all my autoit scripts have notrayicon. If the script you're closing only has a tray menu (no gui to WinClose), then close it by the hidden AutoIt v3 class gui that every script has. If a blocking function is run (MsgBox), WinClose won't work, but a processing intensive function such as DirGetSize won't block WinClose. OnAutoItExitRegister functions will run except if blocked. Exiting does not rely on a scripts message loop or on-event exit. (i.e. script will still close even if processing and gui is unreponsive) No need to refresh the icons in the notification area/systray. Local $iPID = ProcessExists("GUISetOnEvent.exe"), $aWin, $iTmp If $iPID = 0 Then Exit $aWin = WinList("[CLASS:AutoIt v3]") ;get all running autoit scripts If $aWin[0][0] = 0 Then Exit ;If UBound($aWin) = 1 Then Exit For $i = 1 To $aWin[0][0] $iTmp = WinGetProcess($aWin[$i][1]) ;get owner process for AutoIt v3 class hidden gui If $iTmp = -1 Or $iTmp = @AutoItPID Then ContinueLoop If $iTmp = $iPID Then ;found target scripts hidden gui handle WinClose($aWin[$i][1]) If WinWaitClose($aWin[$i][1], "", 5) = 0 Then WinKill($aWin[$i][1]) If WinWaitClose($aWin[$i][1], "", 5) = 0 Then ProcessClose($iPID) EndIf ExitLoop EndIf Next I see fascists... 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