Jump to content

Close GUIs with X button on bar


 Share

Recommended Posts

Hi all guys,

I have several GUIs and the classic

$nMsg = GUIGetMsg()
    Switch $nMsg
        Case $GUI_EVENT_CLOSE
            Exit

in my While cycle.

How can I "just" close (i.e. hide) the GUI i'm focusing and not exiting?

I know I can use Guiswitch() but sometimes I have many GUIs opened and I just would like to close the one I'm focusing.

To clarify. I developed a tool to monitor stocks. Whenever I select one it opens a graph (i.e. a GUI containing the graph).

So I could have up to 15 graphs. Let's say I want to close the 3rd. How can I give focus  (I mean not just clicking on it) and "x" to close?

Thanks,

Marco 

 

Link to comment
Share on other sites

@Loc thanks, but it's not clear to me.

I  mean, Guisetstate() can let me change the state (show/hide for example)

If I press [X] on GUI1 (thus I'm obviously focusing it) and 

$GUI_EVENT_CLOSE

it's a general check, how can AutoIt knows i'm on that GUI? maybe I should first check which GUI is focused then kill/hide/delete that one

 

EDIT: Hmmm... If Winactive() then [...] maybe this is the solution

Edited by marko001
Link to comment
Share on other sites

  • 1 month later...
On 10/20/2021 at 11:52 AM, marko001 said:

Hi all guys,

I have several GUIs and the classic

$nMsg = GUIGetMsg()
    Switch $nMsg
        Case $GUI_EVENT_CLOSE
            Exit

in my While cycle.

How can I "just" close (i.e. hide) the GUI i'm focusing and not exiting?

I know I can use Guiswitch() but sometimes I have many GUIs opened and I just would like to close the one I'm focusing.

To clarify. I developed a tool to monitor stocks. Whenever I select one it opens a graph (i.e. a GUI containing the graph).

So I could have up to 15 graphs. Let's say I want to close the 3rd. How can I give focus  (I mean not just clicking on it) and "x" to close?

Thanks,

Marco 

 

i hope this help's:☺️

#include <GUIConstantsEx.au3>
#include <GuiListBox.au3>
#include <Misc.au3>
#RequireAdmin
Example()
Func Example()
   Global $check2 = ""
    Local $sItems, $aItems, $idListBox;;;;
   $Form1 = GUICreate("Form1", 401, 297, 324, 233)
   $Input1 = GUICtrlCreateInput("Untitled - Notepad", 120, 256, 121, 21)
   $Button1 = GUICtrlCreateButton("Refresh", 8, 256, 75, 25)
   $Checkbox1 = GUICtrlCreateCheckbox("long Focus", 272, 256, 97, 17)
$idListBox = GUICtrlCreateList("", 0, 0, 385, 240, BitOR($LBS_STANDARD, $LBS_EXTENDEDSEL))
    GUISetState(@SW_SHOW)
    _GUICtrlListBox_BeginUpdate($idListBox)
       Global $Array = WinList(GUICtrlRead($Input1))
    For $i = 1 To $Array[0][0] Step 1
        _GUICtrlListBox_AddString($idListBox, StringFormat("F1:Focus||    F2:Close    "&$Array[$i][0]&"-"&WinGetHandle($Array[$i][1]), Random(1, 100, 1)))
        Sleep(10)
    Next
    _GUICtrlListBox_EndUpdate($idListBox)
    Do
        If _IsChecked($Checkbox1 ) Then
        If  $check2 = "loop" Then
   _WinAPI_SetFocus(0x&StringSplit($sItems,"-0",$STR_ENTIRESPLIT)[2]);;0x00000
           EndIf
          EndIf
      $nMsg = GUIGetMsg()
    Switch $nMsg

    Case $Button1
       MsgBox(0,"Fwindow","Updated")
       for $i = 0 To $Array[0][0] Step 1
         _GUICtrlListBox_DeleteString($idListBox,0)
         Next
Sleep(100)
Global $Array = WinList(GUICtrlRead($Input1))
    For $i = 1 To $Array[0][0] Step 1
        _GUICtrlListBox_AddString($idListBox, StringFormat("F1:Focus||    F2:Close    "&$Array[$i][0]&"-"&WinGetHandle($Array[$i][1]), Random(1, 100, 1)))
        Sleep(10)
    Next
          EndSwitch
          $aItems = _GUICtrlListBox_GetSelItemsText($idListBox)
    For $iI = 1 To $aItems[0]
        $sItems = $aItems[$iI]
     Next
    if StringLeft($sItems,1)Then
        if _IsPressed("2D",DllOpen("user32.dll")) Then;;;F1 Key
           $check = "loop"
                   _WinAPI_SetFocus(0x&StringSplit($sItems,"-0",$STR_ENTIRESPLIT)[2]);;0x00000
                   EndIf
                EndIf
                if _IsPressed("71",DllOpen("user32.dll")) Then;F2 Key
                   WinKill(HWnd(0x&StringSplit($sItems,"-0",$STR_ENTIRESPLIT)[2]))
                   EndIf
    Until GUIGetMsg() = $GUI_EVENT_CLOSE
    GUIDelete()
EndFunc   ;==>Example

Func _IsChecked($idControlID)
    Return BitAND(GUICtrlRead($idControlID), $GUI_CHECKED) = $GUI_CHECKED
EndFunc   ;==>_IsChecked

 

Edited by ad777

iam ِAutoit programmer.

best thing in life is to use your Brain to

Achieve

everything you want.

Link to comment
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
 Share

  • Recently Browsing   0 members

    • No registered users viewing this page.
×
×
  • Create New...