Kyou

Minimized to Tray Button

7 posts in this topic

I have a working code here. 

#include <GUIConstants.au3>
#include <Constants.au3>

Opt("GUIOnEventMode",1)

$title = "WINDOW"
$text=""
$fullTest = WinExistsExact($title, $text)
$PASSWORD = "PASS"
$retryCount = 0
$stop = 1  ;<<<<<<<<<<<<<<<<<<<<<<<<<

While 1
    if $retryCount > 0 then Exit
    $input = InputBox("Password Protected", "Enter the password to continue", "", "*")
    If @error Or $input <> $PASSWORD Then
        MsgBox(4096,"Error", "Incorrect Password")
        $retryCount = $retryCount + 1
    Else
        ;MsgBox(4096,"Success", "Password Accepted")
        ExitLoop
    EndIf
 Wend

If $fullTest = 1 Then
    ;MsgBox(0, "WINDOW", "Press Ok to continue")
    GUICreate("WINDOW", 241, 78)
    ;$label = GUICtrlCreateInput ("test", 10, 10, 50, 20)
    GuiSetOnEvent($GUI_EVENT_CLOSE,"Quit")
    $button = GUICtrlCreateButton ("Start",  18, 31, 100, 25)
    $button1 = GUICtrlCreateButton ("Hide",  128, 31, 91, 25) ; <----- THIS IS THE BUTTON
    GuiCtrlSetOnEvent($button,"DoScript")
    GUISetState (@SW_SHOW)
    GUIRegisterMsg($WM_COMMAND, "_WM_COMMAND")  ;<<<<<<<<<<<<<<<<<<<<<
Else
    MsgBox(0, "WINDOW", "You need to run WINDOW client first.")
 EndIf

While 1
   Sleep(10)
Wend

Func _WM_COMMAND($hWnd, $Msg, $wParam, $lParam)
     If BitAND($wParam, 0x0000FFFF) =  $button Then
          $stop = not $stop
          If $stop = 0 Then GUICtrlSetData($button, "Stop")
          If $stop = 1 Then GUICtrlSetData($button, "Start")
     EndIf
     Return $GUI_RUNDEFMSG
EndFunc

Func WinExistsExact($title, $text)
    AutoItSetOption( "WinTitleMatchMode", $OPT_MATCHEXACT )
    $res = WinExists($title, $text)
    AutoItSetOption( "WinTitleMatchMode", $OPT_MATCHSTART )
    Return $res
EndFunc

Func DoScript()
   While 1
    For $i = 1 to 300
        Sleep (10)
        If $stop = 1 Then Return
       ; GuiCtrlSetData($label, $i)
    Next
    ControlSend ( $title, "", 0, "{F12}")
    $a = Random(300, 900, 1)
    For $i = 1 to $a
        Sleep (10)
        If $stop = 1 Then Return
    Next
    ControlSend ( $title, "", 0, "{Del}")
    $a = Random(100, 500, 1)
    For $i = 1 to $a
        Sleep (10)
        If $stop = 1 Then Return
        Next
   WEnd
EndFunc

Func Quit()
    Exit
 EndFunc

What I wanted to do is to make the 'Hide' button minimized the entire window when clicked and while it is on tray, there will be a menu if a user right clicked on it. Exactly what the code below should do.

#NoTrayIcon
#include <guiconstantsex.au3>
#include <constants.au3>
Opt("TrayOnEventMode", 1)
Opt("TrayMenuMode", 3)
; Create tray menu items and set the events
$About = TrayCreateItem("About")
TrayItemSetOnEvent($About, "_About")
TrayCreateItem("") ; Create a separator line.
$Exit = TrayCreateItem("Exit")
TrayItemSetOnEvent($Exit, "_Exit")
; Set the action if you left click on the tray icon
TraySetOnEvent($TRAY_EVENT_PRIMARYUP, "SpecialEvent")
; Show the menu if the icon is right clicked
TraySetClick(8)
Global $MainGui = GUICreate("TestGUI", 392, 316, -1, -1)
GUISetState()
;Test()
While 1
    Switch GUIGetMsg()
        Case $GUI_EVENT_MINIMIZE
            ; Hide the GUI
            GUISetState(@SW_HIDE)
            ; Show the icon
   TraySetState(1)
        Case $GUI_EVENT_CLOSE
            ExitLoop
    EndSwitch
WEnd
Func SpecialEvent()
    ; Show the GUI
    GUISetState(@SW_SHOW)
    GUISetState(@SW_RESTORE)
    ; Hide the icon
    TraySetState(2)
EndFunc   ;==>SpecialEvent
Func _About()
    MsgBox(0,0,"Test")
EndFunc
Func _Exit()
    Exit
EndFunc

My problem is I cannot integrate this code to the one I have. Can anyone help me with this? I would be very much thankful as I am just starting to learn.

Share this post


Link to post
Share on other sites



Hello
This can Help :

#include <GUIConstantsEx.au3>
#include <WindowsConstants.au3>
HotKeySet("{ESC}","_Exit")
$hWnd = GUICreate("", 400, 300, -1, -1, BitOR($WS_POPUPWINDOW,$WS_CLIPCHILDREN, $WS_CLIPSIBLINGS))
$Bt = GUICtrlCreateButton("Exit", 280, 250, 90, 30)
GUISetState(@SW_SHOW)
While 1
    $msg = GUIGetMsg()

        Switch $msg
            Case $Bt
                Exit
        EndSwitch

WEnd
Func _Exit()
    Exit
    EndFunc

 

Share this post


Link to post
Share on other sites

 

 

Share this post


Link to post
Share on other sites

Hello
This can Help :

#include <GUIConstantsEx.au3>
#include <WindowsConstants.au3>
HotKeySet("{ESC}","_Exit")
$hWnd = GUICreate("", 400, 300, -1, -1, BitOR($WS_POPUPWINDOW,$WS_CLIPCHILDREN, $WS_CLIPSIBLINGS))
$Bt = GUICtrlCreateButton("Exit", 280, 250, 90, 30)
GUISetState(@SW_SHOW)
While 1
    $msg = GUIGetMsg()

        Switch $msg
            Case $Bt
                Exit
        EndSwitch

WEnd
Func _Exit()
    Exit
    EndFunc

 

Actually no but thanks for trying to help.

Share this post


Link to post
Share on other sites

Kyou,

Take a look at this:

#include <GUIConstantsEx.au3>

; Prevent standard Windows events
Opt("GUIEventOptions", 1)

; Remove standard tray menu items
Opt("TrayOnEventMode", 1)
Opt("TrayMenuMode", 3)

; Create tray menu
Global $cTray_Show = TrayCreateItem("Show")
TrayItemSetOnEvent($cTray_Show, "_Show_GUI")
TrayCreateItem("")
Global $cTray_Exit = TrayCreateItem("Exit")
TrayItemSetOnEvent(-1, "_Exit")

; Get handle of hidden AutoIt GUI
$iParent_Win = WinGetHandle(AutoItWinGetTitle())

; Create GUI as child of Autoit GUI - no task bar icon
$hGUI = GUICreate("Test", 500, 500, Default, Default, Default, Default, $iParent_Win)
GUISetState()

While 1
    Switch GUIGetMsg()
        ; These events are just reported - not actioned

        Case $GUI_EVENT_CLOSE, $GUI_EVENT_MINIMIZE
            ; Hide GUI
            GUISetState(@SW_HIDE, $hGUI)
    EndSwitch

WEnd



Func _Show_GUI()
    GUISetState(@SW_SHOW, $hGUI)
EndFunc



Func _Exit()
    Exit
EndFunc

Any use?

M23


Any of my own code posted anywhere on the forum is available for use by others without any restriction of any kind._______My UDFs:

Spoiler

ArrayMultiColSort ---- Sort arrays on multiple columns
ChooseFileFolder ---- Single and multiple selections from specified path treeview listing
Date_Time_Convert -- Easily convert date/time formats, including the language used
ExtMsgBox --------- A highly customisable replacement for MsgBox
GUIExtender -------- Extend and retract multiple sections within a GUI
GUIFrame ---------- Subdivide GUIs into many adjustable frames
GUIListViewEx ------- Insert, delete, move, drag, sort, edit and colour ListView items
GUITreeViewEx ------ Check/clear parent and child checkboxes in a TreeView
Marquee ----------- Scrolling tickertape GUIs
NoFocusLines ------- Remove the dotted focus lines from buttons, sliders, radios and checkboxes
Notify ------------- Small notifications on the edge of the display
Scrollbars ----------Automatically sized scrollbars with a single command
StringSize ---------- Automatically size controls to fit text
Toast -------------- Small GUIs which pop out of the notification area

 

Share this post


Link to post
Share on other sites

Kyou,

Take a look at this:

#include <GUIConstantsEx.au3>

; Prevent standard Windows events
Opt("GUIEventOptions", 1)

; Remove standard tray menu items
Opt("TrayOnEventMode", 1)
Opt("TrayMenuMode", 3)

; Create tray menu
Global $cTray_Show = TrayCreateItem("Show")
TrayItemSetOnEvent($cTray_Show, "_Show_GUI")
TrayCreateItem("")
Global $cTray_Exit = TrayCreateItem("Exit")
TrayItemSetOnEvent(-1, "_Exit")

; Get handle of hidden AutoIt GUI
$iParent_Win = WinGetHandle(AutoItWinGetTitle())

; Create GUI as child of Autoit GUI - no task bar icon
$hGUI = GUICreate("Test", 500, 500, Default, Default, Default, Default, $iParent_Win)
GUISetState()

While 1
    Switch GUIGetMsg()
        ; These events are just reported - not actioned

        Case $GUI_EVENT_CLOSE, $GUI_EVENT_MINIMIZE
            ; Hide GUI
            GUISetState(@SW_HIDE, $hGUI)
    EndSwitch

WEnd



Func _Show_GUI()
    GUISetState(@SW_SHOW, $hGUI)
EndFunc



Func _Exit()
    Exit
EndFunc

Any use?

M23

This is exactly what I wanted but how can I use "Hide" button here instead of the actual minimize button?

#include <GUIConstants.au3>
#include <Constants.au3>

Opt("GUIOnEventMode",1)

$title = "WINDOW"
$text=""
$fullTest = WinExistsExact($title, $text)
$PASSWORD = "PASS"
$retryCount = 0
$stop = 1  ;<<<<<<<<<<<<<<<<<<<<<<<<<

While 1
    if $retryCount > 0 then Exit
    $input = InputBox("Password Protected", "Enter the password to continue", "", "*")
    If @error Or $input <> $PASSWORD Then
        MsgBox(4096,"Error", "Incorrect Password")
        $retryCount = $retryCount + 1
    Else
        ;MsgBox(4096,"Success", "Password Accepted")
        ExitLoop
    EndIf
 Wend

If $fullTest = 1 Then
    ;MsgBox(0, "WINDOW", "Press Ok to continue")
    GUICreate("WINDOW", 241, 78)
    ;$label = GUICtrlCreateInput ("test", 10, 10, 50, 20)
    GuiSetOnEvent($GUI_EVENT_CLOSE,"Quit")
    $button = GUICtrlCreateButton ("Start",  18, 31, 100, 25)
    $button1 = GUICtrlCreateButton ("Hide",  128, 31, 91, 25) ; <----- THIS IS THE BUTTON
    GuiCtrlSetOnEvent($button,"DoScript")
    GUISetState (@SW_SHOW)
    GUIRegisterMsg($WM_COMMAND, "_WM_COMMAND")  ;<<<<<<<<<<<<<<<<<<<<<
Else
    MsgBox(0, "WINDOW", "You need to run WINDOW client first.")
 EndIf

While 1
   Sleep(10)
Wend

Func _WM_COMMAND($hWnd, $Msg, $wParam, $lParam)
     If BitAND($wParam, 0x0000FFFF) =  $button Then
          $stop = not $stop
          If $stop = 0 Then GUICtrlSetData($button, "Stop")
          If $stop = 1 Then GUICtrlSetData($button, "Start")
     EndIf
     Return $GUI_RUNDEFMSG
EndFunc

Func WinExistsExact($title, $text)
    AutoItSetOption( "WinTitleMatchMode", $OPT_MATCHEXACT )
    $res = WinExists($title, $text)
    AutoItSetOption( "WinTitleMatchMode", $OPT_MATCHSTART )
    Return $res
EndFunc

Func DoScript()
   While 1
    For $i = 1 to 300
        Sleep (10)
        If $stop = 1 Then Return
       ; GuiCtrlSetData($label, $i)
    Next
    ControlSend ( $title, "", 0, "{F12}")
    $a = Random(300, 900, 1)
    For $i = 1 to $a
        Sleep (10)
        If $stop = 1 Then Return
    Next
    ControlSend ( $title, "", 0, "{Del}")
    $a = Random(100, 500, 1)
    For $i = 1 to $a
        Sleep (10)
        If $stop = 1 Then Return
        Next
   WEnd
EndFunc

Func Quit()
    Exit
 EndFunc

The minimize button should minimize the window in the task bar while the Hide button should minimize the window to tray.

Thanks in advance!

Share this post


Link to post
Share on other sites

Kyou,

Firstly, when you reply, please use the "Reply to this topic" button at the top of the thread or the "Reply to this topic" editor at the bottom rather than the "Quote" button - I know what I wrote and it just pads the thread unnecessarily.

Just ad a "Hide" button to the GUI and then add its ControlID to the list of events in the Switch structure which will hide the GUI.

M23

 


Any of my own code posted anywhere on the forum is available for use by others without any restriction of any kind._______My UDFs:

Spoiler

ArrayMultiColSort ---- Sort arrays on multiple columns
ChooseFileFolder ---- Single and multiple selections from specified path treeview listing
Date_Time_Convert -- Easily convert date/time formats, including the language used
ExtMsgBox --------- A highly customisable replacement for MsgBox
GUIExtender -------- Extend and retract multiple sections within a GUI
GUIFrame ---------- Subdivide GUIs into many adjustable frames
GUIListViewEx ------- Insert, delete, move, drag, sort, edit and colour ListView items
GUITreeViewEx ------ Check/clear parent and child checkboxes in a TreeView
Marquee ----------- Scrolling tickertape GUIs
NoFocusLines ------- Remove the dotted focus lines from buttons, sliders, radios and checkboxes
Notify ------------- Small notifications on the edge of the display
Scrollbars ----------Automatically sized scrollbars with a single command
StringSize ---------- Automatically size controls to fit text
Toast -------------- Small GUIs which pop out of the notification area

 

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

  • Similar Content

    • jpujut
      By jpujut
      I have a script that gets a list of visible windows and makes a tray item of each in the tray menu. I'd also want it to update every time I want to access that menu again, in case new windows have appeared or some would have been closed. I'm using TrayOnEventMode option and trying to get the update going with TraySetOnEvent($TRAY_EVENT_PRIMARYDOWN...) as in the snippet below. However, the list doesn't update until after the tray menu has been closed again. I think I could work around this by having the script update the list constantly in the background, but that feels like it'd take up unnecessary amount of resources since the script might be used rarely by the user anyway. I tried using TraySetOnEvent($TRAY_EVENT_MOUSEOVER...), and that kind of does it, but it actually still calls my function many times (since the mouse cursor moves quite a bit on the icon) before the tray menu is opened. I could put another menuitem to call the update function, but I'd much rather have just the minimal amount of user actions. Similarly I could have tray menu open with a double click (with TraySetClick()) and have the first click just call the update function, but can anyone tell me if there's a way to call the update once and then have the menu open without these gimmicks?
       
      Opt("TrayOnEventMode", 1) TraySetOnEvent($TRAY_EVENT_PRIMARYDOWN, "UpdateWindowsList")  
    • WoodGrain
      By WoodGrain
      Hi All,
      I have a custom icon for the tray menu icon, which was working until I copied in the example code for a custom menu when clicking on the tray icon, now it just displays the default AutoIt tray icon. The menu works fine, but the tray icon initiates as the AutoIt default icon and the icon won't change on event.
      Can anyone advise what I need to do to use my custom icon while retaining the tray custom menu?
      Thanks!
      Also, the While 1 ... WEnd makes me nervous, how does this not lock up the system? If anyone would like to comment on that - thanks.
      Opt("TrayMenuMode", 3) #include <TrayConstants.au3> Local $idAbout = TrayCreateItem("About") Local $idExit = TrayCreateItem("Exit") TraySetState($TRAY_ICONSTATE_SHOW) While 1 Switch TrayGetMsg() Case $idAbout MsgBox(1,"test","test msg") Case $idExit Exit EndSwitch WEnd If Not FileExists (@TempDir & "\MyIcons") Then DirCreate(@TempDir & "\MyIcons") FileInstall(".\Grey-1.ico", @TempDir & "\MyIcons\Grey-1.ico", 1) FileInstall(".\Yellow-1.ico", @TempDir & "\MyIcons\Yellow-1.ico", 1) TraySetIcon(@TempDir & "\MyIcons\Grey-1.ico");Change icon to grey initially ; If X happens then change tray icon to yellow ; If Y happens then change tray icon to grey  

    • zvvyt
      By zvvyt
      Hello ya'll!
      My problem is split in two, so I'll start with the first one:
      What I'm having is my script with dynamically created GUIs with similar / identical names. I would like to have that undepending on how many windows I have open to only have one "window" down at the taskbar.
      I guess all I need is the correct GUI style, but I can't find which one I need.
      Which brings me to problem part 2 (which I also find to be the easy part):
      Windows will open and close on random, so there's no set order in which they'll get closed. But I still need one "window" at the taskbar to work with as long as there's at least one window open.
      In the action of one of these windows getting minimized/restored all of the windows will act simultaneously.
      This will be solved with something similar: 

      case $GUI_EVENT_MINIMIZE          for $1 = 1 to Ubound($ActiveWindows) step +1                 WinSetState($ActiveWindows[$1], @SW_MINIMIZE)         Next And vice versa for restore.
      So .. Mainly prob #1 that I need some help with, and a thought about the "always one window at taskbar"-issue.
      Just point me in the right direction and I'll hopefully solve it myself ^__^'
      Thanks, and have a great weekend!
      zvvyt
    • RedShade
      By RedShade
      Hi! Please, give me script that would hide all tray icons which appear when the script is working.
    • FireFox
      By FireFox
      Hi,
      Here is an UDF to create, delete, set the icon and state, tooltip and tip for your notify icons.

      The main advantage is that you can handle mouse events as you want, there is no default events.
      You can create fully customised notifyicons/tooltips.

      Thanks to Holger Kotsch for his ModernMenu UDF.
       
      Note :
      Breaking changes ! Please use the 1.2+ version.

      Functions :




      Attachments :
      Example + UDF :
      AutoIt v3.3.10.0+ NotifyIcon_1.2.zip
      TrayIconEx_1.1.zip
      AutoIt v3.3.8.0+ TrayIconEx.zip & Requirements : >WinAPIEx UDF.

      As usual, enjoy !