Valnurat

Mainform is set to "Hide"

13 posts in this topic

I have a mainform with a listview and a button. If I press the button a childform is showed.

If I press the [X] in the childform, childform is deleted, but the mainform set to "BringsToBack" or is getting "hide" back of the other applications that's running on my computer.

I hope you understand what I mean. :)

How can I avoid that for happing?

#include <GuiListView.au3>
#include <GUIConstantsEx.au3>


Global $idListview, $idOKay, $hMainForm, $idNewEntry, $idEditEntry, $aMsg, $hNewEntry, $idNewOKay, $idNewCancel


_MainFormCreate()
_Main()


Func _MainFormCreate()
    ; Create GUI
    $hMainForm = GUICreate("Computer Asset", 1027, 400)
    $idListview = GUICtrlCreateListView("", 2, 2, 1024, 268,BitOR($LVS_SHOWSELALWAYS, $LVS_REPORT))

    ; Add columns
    _GUICtrlListView_AddColumn($idListview, "Computername", 100,2)
    _GUICtrlListView_AddColumn($idListview, "Tkt No.", 100,2)
    _GUICtrlListView_AddColumn($idListview, "Req No.", 100,2)
    _GUICtrlListView_AddColumn($idListview, "Order Date", 100,2)
    _GUICtrlListView_AddColumn($idListview, "Costcenter", 100,2)
    _GUICtrlListView_AddColumn($idListview, "Username", 100,2)
    _GUICtrlListView_AddColumn($idListview, "Model", 100,2)
    _GUICtrlListView_AddColumn($idListview, "Current Location", 100,2)
    _GUICtrlListView_AddColumn($idListview, "Option", 100,2)
    _GUICtrlListView_AddColumn($idListview, "Shipdate", 100,2)
    $idNewEntry = GUICtrlCreateButton("New", 310, 290, 85, 25)
    GUISetState()
EndFunc

Func _NewFormCreate()
    $hNewEntry = GUICreate("Create New", 500, 500, -1, -1,-1,-1,$hMainForm)
    $idNewOKay = GUICtrlCreateButton("Ok", 110, 290, 85, 25)
    $idNewCancel = GUICtrlCreateButton("Cancel", 310, 290, 85, 25)
    GUISetState()
EndFunc

Func _Main()
    While 1
        $aMsg = GUIGetMsg(1)
        Switch $aMsg[1]
            Case $hMainForm
                Switch $aMsg[0]
                    Case $GUI_EVENT_CLOSE
                        ExitLoop
                    Case $idNewEntry
                        _NewFormCreate()
                        GUISetState(@SW_DISABLE,$hMainForm)
                    Case $idListview
                        MsgBox($MB_SYSTEMMODAL, "listview", "clicked=" & GUICtrlGetState($idListview), 2)
                EndSwitch
            Case $hNewEntry
                Switch $aMsg[0]
                    Case $GUI_EVENT_CLOSE
                        GUIDelete($hNewEntry)
                        GUISetState(@SW_ENABLE, $hMainForm)
                EndSwitch
        EndSwitch
    WEnd
    GUIDelete()
EndFunc

 


Yours sincerely

Kenneth.

Share this post


Link to post
Share on other sites

I did think about that too, but is it necessary to use that kind of trix?


Yours sincerely

Kenneth.

Share this post


Link to post
Share on other sites

#4 ·  Posted (edited)

1 hour ago, Valnurat said:

I did think about that too, but is it necessary to use that kind of trix?

It's one way to do it, give the window focus. Another way would be instead if disabling the mainform, you could hide it then show it after. You can just change the GUISetState parameters you already use

#include <GuiListView.au3>
#include <GUIConstantsEx.au3>


Global $idListview, $idOKay, $hMainForm, $idNewEntry, $idEditEntry, $aMsg, $hNewEntry, $idNewOKay, $idNewCancel


_MainFormCreate()
_Main()


Func _MainFormCreate()
    ; Create GUI
    $hMainForm = GUICreate("Computer Asset", 1027, 400)
    $idListview = GUICtrlCreateListView("", 2, 2, 1024, 268,BitOR($LVS_SHOWSELALWAYS, $LVS_REPORT))

    ; Add columns
    _GUICtrlListView_AddColumn($idListview, "Computername", 100,2)
    _GUICtrlListView_AddColumn($idListview, "Tkt No.", 100,2)
    _GUICtrlListView_AddColumn($idListview, "Req No.", 100,2)
    _GUICtrlListView_AddColumn($idListview, "Order Date", 100,2)
    _GUICtrlListView_AddColumn($idListview, "Costcenter", 100,2)
    _GUICtrlListView_AddColumn($idListview, "Username", 100,2)
    _GUICtrlListView_AddColumn($idListview, "Model", 100,2)
    _GUICtrlListView_AddColumn($idListview, "Current Location", 100,2)
    _GUICtrlListView_AddColumn($idListview, "Option", 100,2)
    _GUICtrlListView_AddColumn($idListview, "Shipdate", 100,2)
    $idNewEntry = GUICtrlCreateButton("New", 310, 290, 85, 25)
    GUISetState()
EndFunc

Func _NewFormCreate()
    $hNewEntry = GUICreate("Create New", 500, 500, -1, -1,-1,-1,$hMainForm)
    $idNewOKay = GUICtrlCreateButton("Ok", 110, 290, 85, 25)
    $idNewCancel = GUICtrlCreateButton("Cancel", 310, 290, 85, 25)
    GUISetState()
EndFunc

Func _Main()
    While 1
        $aMsg = GUIGetMsg(1)
        Switch $aMsg[1]
            Case $hMainForm
                Switch $aMsg[0]
                    Case $GUI_EVENT_CLOSE
                        ExitLoop
                    Case $idNewEntry
                        _NewFormCreate()
;~                         GUISetState(@SW_DISABLE,$hMainForm)
                        GUISetState(@SW_HIDE,$hMainForm)
                    Case $idListview
                        MsgBox($MB_SYSTEMMODAL, "listview", "clicked=" & GUICtrlGetState($idListview), 2)
                EndSwitch
            Case $hNewEntry
                Switch $aMsg[0]
                    Case $GUI_EVENT_CLOSE
                        GUIDelete($hNewEntry)
;~                         GUISetState(@SW_ENABLE, $hMainForm)
                        GUISetState(@SW_SHOW, $hMainForm)
                EndSwitch
        EndSwitch
    WEnd
    GUIDelete()
EndFunc

 

Edited by benners

Share this post


Link to post
Share on other sites

#5 ·  Posted (edited)

Ok. I see your point. Thank you. :)

I hope I can ask another question that's off topic.

If I add this:

Func _MainFormCreate()
    ; Create GUI
    $hMainForm = GUICreate("Computer Asset", 1027, 400)
    $idListview = GUICtrlCreateListView("", 2, 2, 1024, 268,BitOR($LVS_SHOWSELALWAYS, $LVS_REPORT))

    ; Add columns
    _GUICtrlListView_AddColumn($idListview, "Computername", 100,2)
    _GUICtrlListView_AddColumn($idListview, "Tkt No.", 100,2)
    _GUICtrlListView_AddColumn($idListview, "Req No.", 100,2)
    _GUICtrlListView_AddColumn($idListview, "Order Date", 100,2)
    _GUICtrlListView_AddColumn($idListview, "Costcenter", 100,2)
    _GUICtrlListView_AddColumn($idListview, "Username", 100,2)
    _GUICtrlListView_AddColumn($idListview, "Model", 100,2)
    _GUICtrlListView_AddColumn($idListview, "Current Location", 100,2)
    _GUICtrlListView_AddColumn($idListview, "Option", 100,2)
    _GUICtrlListView_AddColumn($idListview, "Shipdate", 100,2)
    $idNewEntry = GUICtrlCreateButton("New", 310, 290, 85, 25)
    $idEditEntry = GUICtrlCreateButton("Edit", 410, 290, 85, 25)        ;<------- This 
    GUISetState(@SW_SHOW,$hMainForm)
EndFunc
Case $hNewEntry
                Switch $aMsg[0]
                    Case $GUI_EVENT_CLOSE
                        GUIDelete($hNewEntry)
                        GUISetState(@SW_ENABLE, $hMainForm)
                        WinActivate($hMainForm)
                    Case $idNewCancel                   ;<----------------------- And this
                        msgbox(0,"","test")             ;<----------------------- and this
                EndSwitch
Func _NewFormCreate()
    $hNewEntry = GUICreate("Create New", 500, 500, -1, -1,-1,-1,$hMainForm)
    $idNewOKay = GUICtrlCreateButton("Ok", 110, 290, 85, 25)
    $idNewCancel = GUICtrlCreateButton("Cancel", 310, 290, 85, 25)          ;<--- and this
    GUISetState(@SW_SHOW, $hNewEntry)
EndFunc

 

and I run it. It shows me the msgbox as the 1st thing on top of my mainform.

No matter if a press the ok button on the msgbox it still show me the msgbox.

How can that be?

Edited by Valnurat

Yours sincerely

Kenneth.

Share this post


Link to post
Share on other sites

During the while loop, GUIGetMsg is polled to see if any actions have happened. The values in aMsg do change (not sure why, maybe in built sleep returns something?) and one of the changes is the window handle the event is from returns 0, this triggers the switch case to check for controls matching that value. When you initialize the Global variables there are no values for the variables. The default it used, which is 0. As $hNewEntry is 0, it matches in the loop and fires events based on the control. The buttons are also 0 which then fires the msgbox. If you add a msgbox to the $idNewOKay button this will fire before the test msgbox.

To stop this from happening set $hNewEntry to non zero, like 999 this will stop the event firing, when the gui is created in _NewFormCreate a handle will be returned which will replaced the 999.

Global $idListview, $idOKay, $hMainForm, $idNewEntry, $idEditEntry, $aMsg, $hNewEntry = 999, $idNewOKay, $idNewCancel

 

Share this post


Link to post
Share on other sites

So you are telling me that this is a commen and known error?


Yours sincerely

Kenneth.

Share this post


Link to post
Share on other sites

#8 ·  Posted (edited)

No it's not an error. Looking at the help file if no event has occurred GUIGetMsg returns $GUI_EVENT_NONE whose value is 0, (all the values in the array are 0). As your second GUI hasn't been created and you don't assign it a value it is given one  ($hNewEntry = 0). The switch value is then 0 which matches Case $hNewEntry. The next Switch value is 0 so matches the first control who's value is 0

#include <GuiListView.au3>
#include <GUIConstantsEx.au3>
#include <array.au3>

Global $idListview, $idOKay, $hMainForm, $idNewEntry, $idEditEntry, $aMsg, $hNewEntry, $idNewOKay, $idNewCancel
;~ Global $idListview, $idOKay, $hMainForm, $idNewEntry, $idEditEntry, $aMsg, $hNewEntry = 999, $idNewOKay, $idNewCancel
_MainFormCreate()
_Main()

Func _MainFormCreate()
    ; Create GUI
    $hMainForm = GUICreate("Computer Asset", 1027, 400)
    $idListview = GUICtrlCreateListView("", 2, 2, 1024, 268, BitOR($LVS_SHOWSELALWAYS, $LVS_REPORT))

    ; Add columns
    _GUICtrlListView_AddColumn($idListview, "Computername", 100, 2)
    _GUICtrlListView_AddColumn($idListview, "Tkt No.", 100, 2)
    _GUICtrlListView_AddColumn($idListview, "Req No.", 100, 2)
    _GUICtrlListView_AddColumn($idListview, "Order Date", 100, 2)
    _GUICtrlListView_AddColumn($idListview, "Costcenter", 100, 2)
    _GUICtrlListView_AddColumn($idListview, "Username", 100, 2)
    _GUICtrlListView_AddColumn($idListview, "Model", 100, 2)
    _GUICtrlListView_AddColumn($idListview, "Current Location", 100, 2)
    _GUICtrlListView_AddColumn($idListview, "Option", 100, 2)
    _GUICtrlListView_AddColumn($idListview, "Shipdate", 100, 2)
    $idNewEntry = GUICtrlCreateButton("New", 310, 290, 85, 25)
    $idEditEntry = GUICtrlCreateButton("Edit", 410, 290, 85, 25)
    GUISetState()
EndFunc   ;==>_MainFormCreate

Func _NewFormCreate()
    $hNewEntry = GUICreate("Create New", 500, 500, -1, -1, -1, -1, $hMainForm)
    $idNewOKay = GUICtrlCreateButton("Ok", 110, 290, 85, 25)
    $idNewCancel = GUICtrlCreateButton("Cancel", 310, 290, 85, 25) ;<--- and this
    GUISetState()
EndFunc   ;==>_NewFormCreate

Func _Main()
    While 1
        $aMsg = GUIGetMsg(1) ; has anything happened?

        Switch $aMsg[1] ; no so $aMsg[1] = 0

            Case $hMainForm ; I have been created so I have a handle and it isn't 0
                Switch $aMsg[0]
                    Case $GUI_EVENT_CLOSE
                        ExitLoop
                    Case $idNewEntry
                        _NewFormCreate()
                        GUISetState(@SW_HIDE, $hMainForm)
                    Case $idListview
                        MsgBox($MB_SYSTEMMODAL, "listview", "clicked=" & GUICtrlGetState($idListview), 2)
                EndSwitch
            Case $hNewEntry ; I haven't been created so no handle, and I haven't been assigned a non zero value. So I match $aMsg[1]
                Switch $aMsg[0] ; I am zero
                    Case $GUI_EVENT_CLOSE ; I am -3 so I don't match the switch value
                        GUIDelete($hNewEntry)

                        GUISetState(@SW_SHOW, $hMainForm)
                    case $idNewOKay ; I am 0 as I haven't been created so no ID and I haven't been assigned a non zero value when declared (Global $hNewEntry). So I match $aMsg[0]
                        MsgBox(0,'ok', 'ok')
                    Case $idNewCancel  ; I am 0 as I haven't been created so no ID and I haven't been assigned a non zero value So I match $aMsg[0]
                        MsgBox(0, "", "cancel")
                EndSwitch
        EndSwitch
    WEnd

    GUIDelete()
EndFunc   ;==>_Main

This is as I understand it. Hopefully I have explained it correctly.

Edited by benners

Share this post


Link to post
Share on other sites

So you are telling me that everyone that is using more forms than 1 and as child, are setting the variables to non zero, for this not to happen?

 


Yours sincerely

Kenneth.

Share this post


Link to post
Share on other sites

This is working, but do I really have to do this?

#include <GuiListView.au3>
#include <GUIConstantsEx.au3>


Global $idListview, $aMsg
Global $hMainForm, $idNewEntry, $idEditEntry
Global $hEditForm = 999, $idEditCancel, $idEditOKay
Global $hNewForm = 999, $idNewOKay, $idNewCancel


_MainFormCreate()
_Main()


Func _MainFormCreate()
    ; Create GUI
    $hMainForm = GUICreate("Computer Asset", 1027, 400)
    $idNewEntry = GUICtrlCreateButton("New", 310, 290, 85, 25)
    $idEditEntry = GUICtrlCreateButton("Edit", 410, 290, 85, 25)
    GUISetState(@SW_SHOW,$hMainForm)
EndFunc

Func _NewFormCreate()
    $hNewForm = GUICreate("Create New", 500, 500, -1, -1,-1,-1,$hMainForm)
    $idNewOKay = GUICtrlCreateButton("Ok", 110, 290, 85, 25)
    $idNewCancel = GUICtrlCreateButton("Cancel", 310, 290, 85, 25)
    GUISetState(@SW_SHOW, $hNewForm)
EndFunc

Func _EditFormCreate()
    $hEditForm = GUICreate("Edit", 500, 500, -1, -1,-1,-1,$hMainForm)
    $idEditOKay = GUICtrlCreateButton("Ok", 110, 290, 85, 25)
    $idEditCancel = GUICtrlCreateButton("Cancel", 310, 290, 85, 25)
    GUISetState(@SW_SHOW, $hEditForm)
EndFunc

Func _Main()
    While 1
        $aMsg = GUIGetMsg(1)
        Switch $aMsg[1]
            Case $hMainForm
                Switch $aMsg[0]
                    Case $GUI_EVENT_CLOSE
                        ExitLoop
                    Case $idNewEntry
                        msgbox(0,"NewEntry",$aMsg[1] & @CRLF & $aMsg[0])
                        GUISetState(@SW_DISABLE, $hMainForm)
                        _NewFormCreate()
                    Case $idEditEntry
                        msgbox(0,"EditEntry",$aMsg[1] & @CRLF & $aMsg[0])
                        GUISetState(@SW_DISABLE, $hMainForm)
                        _EditFormCreate()
                EndSwitch
            Case $hEditForm
                Switch $aMsg[0]
                    Case $GUI_EVENT_CLOSE
                        msgbox(0,"GUI_EVENT_CLOSE",$aMsg[0] & @CRLF & $aMsg[1])
                        GUIDelete($hEditForm)
                        GUISetState(@SW_ENABLE, $hMainForm)
                        WinActivate($hMainForm)
                    Case $idEditCancel
                        msgbox(0,"EditCancel",$aMsg[0] & @CRLF & $aMsg[1])
                        GUIDelete($hEditForm)
                        GUISetState(@SW_ENABLE, $hMainForm)
                        WinActivate($hMainForm)
                    Case $idEditOKay
                        msgbox(0,"EditOKay",$aMsg[0] & @CRLF & $aMsg[1])
                EndSwitch
            Case $hNewForm
                Switch $aMsg[0]
                    Case $GUI_EVENT_CLOSE
                        msgbox(0,"GUI_EVENT_CLOSE",$aMsg[0] & @CRLF & $aMsg[1])
                        GUIDelete($hNewForm)
                        GUISetState(@SW_ENABLE, $hMainForm)
                        WinActivate($hMainForm)
                    Case $idNewCancel
                        msgbox(0,"NC",$aMsg[0] & @CRLF & $aMsg[1])
                        GUIDelete($hNewForm)
                        GUISetState(@SW_ENABLE, $hMainForm)
                        WinActivate($hMainForm)
                    Case $idNewOKay
                        msgbox(0,"NewOKay",$aMsg[0] & @CRLF & $aMsg[1])
                EndSwitch
        EndSwitch
    WEnd
    GUIDelete()
EndFunc

 


Yours sincerely

Kenneth.

Share this post


Link to post
Share on other sites
On 03/03/2017 at 11:22 AM, Valnurat said:

This is working, but do I really have to do this?

Unless you want the the msgboxes popping up all the time. You don't have to use 999, any non zero  positive number should work.

You could also draw the forms $hEditForm etc and hide them until needed. When the GUI is created it will assign a handle to the $hEditForm variable and this will also stop the msgbox code (or any other) from running

Share this post


Link to post
Share on other sites

#12 ·  Posted (edited)

I personally think the best way to do a multi GUI script is to build out the entire GUI first and then just show/hide windows as you need them, but barring that, you could simply handle the $GUI_EVENT_NONE value before the others and have it skip the loop, then it will bypass even checking those uninitialized variables.

#include <GUIConstantsEx.au3>

Global $id_Uninitialized

GUICreate('', 300, 200)
GUISetState()

While 1
    Switch GUIGetMsg()
        Case $GUI_EVENT_NONE
            ContinueLoop
        Case $id_Uninitialized
            MsgBox(0, '', 'This will never happen, until the variable is non-zero.')
        Case $GUI_EVENT_CLOSE
            ExitLoop
    EndSwitch
WEnd

 

*** And just to provide an example of prebuilding the whole GUI, I whipped this up:

#include <GuiListView.au3>
#include <GUIConstantsEx.au3>

Global $idListview, $aMsg
Global $hMainForm, $idNewEntry, $idEditEntry
Global $hEditForm, $idEditCancel, $idEditOKay
Global $hNewForm, $idNewOKay, $idNewCancel

_Main()

Func _Main()
    $hMainForm = GUICreate("Computer Asset", 1027, 400)
    $idNewEntry = GUICtrlCreateButton("New", 310, 290, 85, 25)
    $idEditEntry = GUICtrlCreateButton("Edit", 410, 290, 85, 25)
    GUISetState(@SW_SHOW,$hMainForm)

    $hNewForm = GUICreate("Create New", 500, 500, -1, -1,-1,-1,$hMainForm)
    $idNewOKay = GUICtrlCreateButton("Ok", 110, 290, 85, 25)
    $idNewCancel = GUICtrlCreateButton("Cancel", 310, 290, 85, 25)

    $hEditForm = GUICreate("Edit", 500, 500, -1, -1,-1,-1,$hMainForm)
    $idEditOKay = GUICtrlCreateButton("Ok", 110, 290, 85, 25)
    $idEditCancel = GUICtrlCreateButton("Cancel", 310, 290, 85, 25)

    While 1
        $aMsg = GUIGetMsg(1)
        Switch $aMsg[1]
            Case $hMainForm
                Switch $aMsg[0]
                    Case $GUI_EVENT_CLOSE
                        ExitLoop
                    Case $idNewEntry
                        msgbox(0,"NewEntry",$aMsg[1] & @CRLF & $aMsg[0])
                        GUISetState(@SW_DISABLE, $hMainForm)
                        GUISetState(@SW_SHOW, $hNewForm)
                    Case $idEditEntry
                        msgbox(0,"EditEntry",$aMsg[1] & @CRLF & $aMsg[0])
                        GUISetState(@SW_DISABLE, $hMainForm)
                        GUISetState(@SW_SHOW, $hEditForm)
                EndSwitch
            Case $hEditForm
                Switch $aMsg[0]
                    Case $GUI_EVENT_CLOSE
                        msgbox(0,"GUI_EVENT_CLOSE",$aMsg[0] & @CRLF & $aMsg[1])
                        GUISetState(@SW_HIDE, $hEditForm)
                        GUISetState(@SW_ENABLE, $hMainForm)
                        WinActivate($hMainForm)
                    Case $idEditCancel
                        msgbox(0,"EditCancel",$aMsg[0] & @CRLF & $aMsg[1])
                        GUISetState(@SW_HIDE, $hEditForm)
                        GUISetState(@SW_ENABLE, $hMainForm)
                        WinActivate($hMainForm)
                    Case $idEditOKay
                        msgbox(0,"EditOKay",$aMsg[0] & @CRLF & $aMsg[1])
                EndSwitch
            Case $hNewForm
                Switch $aMsg[0]
                    Case $GUI_EVENT_CLOSE
                        msgbox(0,"GUI_EVENT_CLOSE",$aMsg[0] & @CRLF & $aMsg[1])
                        GUISetState(@SW_HIDE, $hNewForm)
                        GUISetState(@SW_ENABLE, $hMainForm)
                        WinActivate($hMainForm)
                    Case $idNewCancel
                        msgbox(0,"NC",$aMsg[0] & @CRLF & $aMsg[1])
                        GUISetState(@SW_HIDE, $hNewForm)
                        GUISetState(@SW_ENABLE, $hMainForm)
                        WinActivate($hMainForm)
                    Case $idNewOKay
                        msgbox(0,"NewOKay",$aMsg[0] & @CRLF & $aMsg[1])
                EndSwitch
        EndSwitch
    WEnd
    GUIDelete()
EndFunc

 

Edited by therks

Share this post


Link to post
Share on other sites
1 hour ago, therks said:

I personally think the best way to do a multi GUI script is to build out the entire GUI first and then just show/hide windows as you need them, but barring that, you could simply handle the $GUI_EVENT_NONE value before the others and have it skip the loop, then it will bypass even checking those uninitialized variables

That's how I normally do multiple GUI's if it is going to be frequently used. If not, then I'll draw it when needed.

Didn't even cross my mind to handle the $GUI_EVENT_NONE :doh: Bad Dobby!

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

    • Ascer
      By Ascer
      1. Description
      Anti-bot system to avoid spam. Vector graphic style generates 4 random numbers from 0-9 and create a picture. 2. Requirements
      .NET Framework 1.1 - 4.5 (on this version Microsoft destroy old rules) 3. Possibilities.

      4. Downloads.
      Source package Capatcha.rar
    • Valnurat
      By Valnurat
      How can I get combobox value by using  the ENTER key?
    • vyperhand
      By vyperhand
      I'm struggling to launch a VBS file via autoit using RunWait.  Due to the nature of the deployment tool I am using for said script, I only know that the .vbs files will be in the same directory as my AutoIt-generated .exe, but not what that path will be.  The path will look something like this:
      c:\programdata\vendor\lots\of\folders\randomnumber
      This is generated during deployment and I have no way of predicting the path - therefore, I am not sure how to call back to "same directory" in order to successfully launch the .vbs.
      This line is as close as I have gotten - this fires off the cmd window, but it closes immediately with out information, and the .vbs is not launched.
      RunWait (@ComSpec & " /c" & 'cscript.exe WORKPLEASE.vbs ALL /Q /NoCancel') I thought /c might be the problem, but leaving out the /c element causes me not to even see the momentary CMD window flash by.  Any help will be greatly appreciated, and thanks in advance.
    • Valnurat
      By Valnurat
      I have a ComboBox and I want, when I start writting in it, that it will show me what is the first in the list.
      Like, is I start writting:
      "pe" it  should show me "peter" if that is the first in the list.
      How can I do that?
       
      While 1 Switch GUIGetMsg() Case $GUI_EVENT_CLOSE, $idClos ExitLoop Case $idComboBox $sComboRead = GUICtrlRead($idComboBox) Local $iIdx = _ArraySearch($aResult,$sComboRead,0,0,0,0,1,1) Local $aComputerOwner = _AD_GetObjectsInOU("OU=al,DC=AD,DC=AL,DC=ORG","(&(objectclass=computer)(managedby=" & $aResult[$iIdx][0] & "))",Default,"cn") _ArrayDelete($aComputerOwner,0) _GUICtrlListView_SetItemCount($idMylist,UBound($aComputerOwner)) If IsArray($aComputerOwner) Then For $i = 0 To UBound($aComputerOwner) - 1 GUICtrlCreateListViewItem($aComputerOwner[$i], $idMylist) Next Else GUICtrlSetData($idMylist, "No computer|") EndIf EndSwitch WEnd  
    • Valnurat
      By Valnurat
      Hi.
      I'm trying to add an array to my gui listview, but it fails with
      "C:\Program Files (x86)\AutoIt3\Include\GuiListView.au3" (473) : ==> Array variable has incorrect number of subscripts or subscript dimension range exceeded.: DllStructSetData($tBuffer, "Text", $aItems[$iI][0]) DllStructSetData($tBuffer, "Text", ^ ERROR My code is:
      #cs ---------------------------------------------------------------------------- AutoIt Version: 3.3.14.2 Author: myName Script Function: Template AutoIt script. #ce ---------------------------------------------------------------------------- ; Script Start - Add your code below here #include <WindowsConstants.au3> #include <ComboConstants.au3> #include <GuiComboBox.au3> #include <GUIConstantsEx.au3> #include <GuiListView.au3> #include <MsgBoxConstants.au3> #Include <AD.au3> #include <Array.au3> Opt('MustDeclareVars', 1) Global $aResult[0][2] Local $aNames[4] = ["DKSO","DKKO","SELU","SEES"] Local Const $iWidth = 300, $iHeight = 250, $iW = 85, $iH = 25 Local $hGUI = GUICreate("Find Computer Owner", $iWidth, $iHeight) ; Create a combobox control. Local $idComboBox = GUICtrlCreateCombo("", 2, 2, 296, 20, BitOR($CBS_DROPDOWN, $CBS_AUTOHSCROLL, $WS_VSCROLL, $CBS_SORT)) ;$WS_VSCROLL Local $idMylist = GUICtrlCreateListView("", 2, 114, 296, 100) Local $idClos = GUICtrlCreateButton("Close", ($iWidth - $iW) / 2, ($iHeight - $iH) - 7 , $iW, $iH) _AD_Open() Local $sFill = "" For $i = 0 to UBound($aNames) -1 Local $aUserInfo = _AD_GetObjectsInOU("OU=Al,DC=ad,DC=al,DC=org","(&(objectCategory=Person)(objectclass=user)(sAMAccountName=" & $aNames[$i] & "*))","","distinguishedName,cn") if @error Then MsgBox(0,@error,@extended) Exit EndIf For $x = $aUserInfo[0][0] To 1 Step -1 If $aUserInfo[$x][0] = "" Or StringInStr($aUserInfo[$x][0], "Resources") > 0 Or StringInStr($aUserInfo[$x][0], "Leavers") > 0 Or StringInStr($aUserInfo[$x][0], "Administration") > 0 Then _ArrayDelete($aUserInfo, $x) EndIf Next _ArrayConcatenate($aResult, $aUserInfo, 1) Next for $i = 0 To UBound($aResult) -1 If $aResult[$i][0] <> "" Then $sFill &= $aResult[$i][1] & "|" EndIf Next _ArrayDisplay($aResult, 'AD ' & UBound($aResult)) $sFill = StringTrimRight($sFill, 1) _GUICtrlComboBox_BeginUpdate($idComboBox) GUICtrlSetData($idComboBox, $sFill, "") _GUICtrlComboBox_EndUpdate($idComboBox) GUISetState(@SW_SHOW, $hGUI) GUIRegisterMsg($WM_NOTIFY, "WM_NOTIFY") _GUICtrlListView_AddColumn($idMylist, "Computername", 296) Local $sComboRead = "" ; Loop until the user exits. While 1 Switch GUIGetMsg() Case $GUI_EVENT_CLOSE, $idClos ExitLoop Case $idComboBox $sComboRead = GUICtrlRead($idComboBox) Local $iIdx = _ArraySearch($aResult,$sComboRead,0,0,0,0,1,1) Local $aComputerOwner = _AD_GetObjectsInOU("OU=al,DC=AD,DC=AL,DC=ORG","(&(objectclass=computer)(managedby=" & $aResult[$iIdx][0] & "))",Default,"cn") _ArrayDelete($aComputerOwner,0) _ArrayDisplay($aComputerOwner) _GUICtrlListView_SetItemCount($idMylist,UBound($aComputerOwner)) If IsArray($aComputerOwner) Then MsgBox(0,"Test",$sComboRead) _GUICtrlListView_AddArray($idMylist, $aComputerOwner) ; <---- it fails Else GUICtrlSetData($idMylist, "No computer|") EndIf EndSwitch WEnd _AD_Close() ; Delete the previous GUI and all controls. GUIDelete($hGUI) Func WM_NOTIFY($hWnd, $iMsg, $wParam, $lParam) #forceref $hWnd, $iMsg, $wParam Local $hWndFrom, $iIDFrom, $iCode, $tNMHDR, $hWndListView, $tInfo ; Local $tBuffer $hWndListView = $idMylist If Not IsHWnd($idMylist) Then $hWndListView = GUICtrlGetHandle($idMylist) $tNMHDR = DllStructCreate($tagNMHDR, $lParam) $hWndFrom = HWnd(DllStructGetData($tNMHDR, "hWndFrom")) $iIDFrom = DllStructGetData($tNMHDR, "IDFrom") $iCode = DllStructGetData($tNMHDR, "Code") Switch $hWndFrom Case $hWndListView Switch $iCode Case $NM_DBLCLK ; Sent by a list-view control when the user double-clicks an item with the left mouse button $tInfo = DllStructCreate($tagNMITEMACTIVATE, $lParam) _DebugPrint("$NM_DBLCLK" & @CRLF & "--> hWndFrom:" & @TAB & $hWndFrom & @CRLF & _ "-->IDFrom:" & @TAB & $iIDFrom & @CRLF & _ "-->Code:" & @TAB & $iCode & @CRLF & _ "-->Index:" & @TAB & DllStructGetData($tInfo, "Index") & @CRLF & _ "-->SubItem:" & @TAB & DllStructGetData($tInfo, "SubItem") & @CRLF & _ "-->NewState:" & @TAB & DllStructGetData($tInfo, "NewState") & @CRLF & _ "-->OldState:" & @TAB & DllStructGetData($tInfo, "OldState") & @CRLF & _ "-->Changed:" & @TAB & DllStructGetData($tInfo, "Changed") & @CRLF & _ "-->ActionX:" & @TAB & DllStructGetData($tInfo, "ActionX") & @CRLF & _ "-->ActionY:" & @TAB & DllStructGetData($tInfo, "ActionY") & @CRLF & _ "-->lParam:" & @TAB & DllStructGetData($tInfo, "lParam") & @CRLF & _ "-->KeyFlags:" & @TAB & DllStructGetData($tInfo, "KeyFlags")) ; No return value EndSwitch EndSwitch Return $GUI_RUNDEFMSG EndFunc ;==>WM_NOTIFY Func _DebugPrint($s_Text, $sLine = @ScriptLineNumber) ConsoleWrite( _ "!===========================================================" & @CRLF & _ "+======================================================" & @CRLF & _ "-->Line(" & StringFormat("%04d", $sLine) & "):" & @TAB & $s_Text & @CRLF & _ "+======================================================" & @CRLF) EndFunc ;==>_DebugPrint Do I do it wrong?
       
      Thank you in advanced.