Jump to content
Sign in to follow this  
Hyflex

System Tray / Notification double click option + multiple process handling?

Recommended Posts

Hyflex

Hey AutoIt Forums,

I'm looking for some help creating a system tray minimiser...

Currently my code is the following...

If Not ProcessExists("fix1.exe") Then
    Run("fix1.exe")
End If

If ProcessExists("fix1.exe") Then
    $State = WinGetState(ink)")

    If $State = 23 Then
        WinSetState("ink)", "", @SW_HIDE)
    ElseIf $State = 21 Then
        WinSetState("ink)", "", @SW_SHOW)
        WinActivate("ink")
    EndIf
Else
    Exit
EndIf
I need help with the following:

On launch: If the program does not exist, run it. (Done)

On launch: If the minimiser is already running then kill the older running minimiser...

On launch: If the program exists and is minimised then it will hide it and make a system tray icon appear... (Partly done)

On launch: If the program exists and is hidden then it will unhide it and remove the. (Partly done)

On double click (when system tray is active): Unhide and activate the window

On right click (when system tray is active): Give option to unhide + exit minimiser (also processcloses the program)

Anyone able to help me achieve this?

Thanks

- Hyflex

EDIT: Anyone know why state 23 and 21 are different to what the docs say?

Edited by Hyflex

Share this post


Link to post
Share on other sites
somdcomputerguy

You need an EndIf statement for the second If loop, and the WinGetState line (in that loop) is missing the opening double quote (").

 

Just FYI, if an If loop has only one execute line, the whole loop can be on one line, and it doesn't need an EndIf. Here's an example:

If Not ProcessExists("fix1.exe") Then
     Run("fix1.exe")
EndIf
 
; can be like this instead
 
If Not ProcessExists("fix1.exe") Then Run("fix1.exe")
Edited by somdcomputerguy

- Bruce /*somdcomputerguy */  If you change the way you look at things, the things you look at change.

Share this post


Link to post
Share on other sites
Hyflex

Sorry yeah, that was an error in my example. I have a really basic minimiser working but none working with the icon part :/

Share this post


Link to post
Share on other sites
Hyflex

This is as far as I can get with the process closing part for older process...

$ProcessList = ProcessList("mad.exe")

For $i = 1 To $ProcessList[0][0]
    If $ProcessList[$i][1] <> @AutoItPID Then
        ProcessClose(@AutoItPID)
    EndIf
Next
Seems to be working fine in my examples...

Share this post


Link to post
Share on other sites
Hyflex

Eventually after hours and hours of trying I got there...

Someone else might find use for this too: 

#include <Constants.au3>

Opt("TrayOnEventMode", 1)
Opt("TrayMenuMode", 1)

TraySetClick(8)

TraySetIcon("\icon.ico")
TraySetToolTip("Minimiser")

$Exit   = TrayCreateItem("Exit")
    TrayItemSetOnEvent(-1, '_Exit')
TraySetState()

TraySetOnEvent($TRAY_EVENT_PRIMARYDOUBLE, "Double")

If Not ProcessExists("fix1.exe") Then
    Run("C:\fix1.exe")
    ProcessWait("fix1.exe")
EndIf

$ProcessList = ProcessList("Minimiser.exe")

For $i = 1 To $ProcessList[0][0]
    If $ProcessList[$i][1] <> @AutoItPID Then
        ProcessClose($ProcessList[$i][1])
    EndIf
Next

If ProcessExists("fix1.exe") Then
    $State = WinGetState("ink")
    TraySetState(2)
    WinSetState("ink", "", @SW_SHOW)
    WinActivate("ink")
Else
    Exit
EndIf

While 1
    Sleep(200)
    If ProcessExists("fix1.exe") Then
        $State = WinGetState("ink")

        If $State = 23 Then
            WinSetState("ink", "", @SW_HIDE)
            TraySetState(1)
        EndIf
    Else
        Exit
    EndIf
WEnd

Func Double()
    If ProcessExists("fix1.exe") Then
        $State = WinGetState("ink")

        If $State = 23 Then
            WinSetState("ink", "", @SW_HIDE)
            TraySetState(1)
        ElseIf $State = 21 Then
            TraySetState(2)
            WinSetState("ink", "", @SW_SHOW)
            WinActivate("ink")
        EndIf
    Else
        Exit
    EndIf
EndFunc

Func _Exit()
    WinSetState("ink", "", @SW_SHOW)
    WinClose("ink")
    Exit
EndFunc

Thanks :)

Share this post


Link to post
Share on other sites

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 account

Sign in

Already have an account? Sign in here.

Sign In Now
Sign in to follow this  

×