Valnurat

Exit GUICtrlCreateInput with a TAB

15 posts in this topic

#1 ·  Posted (edited)

I want to lookup in our AD when I exit a GUICtrlCreateInput don't have focus anymore. I know how to do the lookup in AD, but how to activate something when you exit the GUICtrlCreateInput with a TAB or a mouseclick, so the GUICtrlCreateInput don't have focus anymore, I do not know.

It is the $idInput2 that I need to check if there is a focus or not.

Can someone please help.

Func Main()
    Local $sOU, $sDescription, $dDate
    ; Loop until the user exits.
    While 1
        Switch GUIGetMsg()
            Case $GUI_EVENT_CLOSE
                ExitLoop
            Case $idOKay
                For $id = $idInput1 to $idInput11
                    if GUICtrlRead($id) = '' Then
                        MsgBox(64, "Info", "At least one input is empty.",0,$hGUI)
                        ContinueLoop 2
                    EndIf
                Next
                $sFirst = GUICtrlRead($idInput1)
                $sShort = GUICtrlRead($idInput2)
                $sCountrySite = Stringleft($sShort,4)
                $sOU = Stringleft($sShort,4)
                $sOU = "OU=Consultants,OU=" & StringRight($sOU,2) & ",OU=" & StringLeft($sOU,2) & ",OU=company,DC=AD,DC=company,DC=ORG"
                $sLast = GUICtrlRead($idInput3)
                $sDisp = GUICtrlRead($idInput4)
                For $id = $idRadio1 To $idRadio2
                    If GUICtrlRead($id) = $GUI_CHECKED Then
                        $sDescription = GUICtrlRead($id, $GUI_READ_EXTENDED)
                    EndIf
                Next
                $sEmail = GUICtrlRead($idInput5)
                $sDepart = GUICtrlRead($idInput6)
                $sOffice = GUICtrlRead($idInput7)
                $sManager = GUICtrlRead($idInput8)
                $sMisalCode = GUICtrlRead($idInput9)
                $sTicketNo = GUICtrlRead($idInput10)
                $sCostNo = GUICtrlRead($idInput11)
                $sExtCompe = GUICtrlRead($idInput12)
                $sExtEmail = GUICtrlRead($idInput13)
                If GUICtrlRead($idCheckBox) = $GUI_CHECKED Then
                    $dDate = GUICtrlRead($idDate)
                Else
                    $dDate = _DateAdd('Y',1,_NowCalcDate())
                EndIf
            Case $idCheckBox
                If _IsChecked($idCheckbox) Then
                    GUICtrlSetState($idDate,$gui_enable)
                Else
                    GUICtrlSetState($idDate,$gui_disable)
                EndIf
        EndSwitch
    WEnd
EndFunc

 

Edited by Valnurat

Yours sincerely

Kenneth.

Share this post


Link to post
Share on other sites



#3 ·  Posted (edited)

Should I understand that the link you sent is for detecting of focus? I would like to find out when a input do not have focus anymore. I would like to do at lookup in out Active Directory.

Edited by Valnurat

Yours sincerely

Kenneth.

Share this post


Link to post
Share on other sites

#5 ·  Posted (edited)

But the links in that link shows when a control get the focus, as I understand it.

The Link JohnOne is pointing to is to google.

 

JohnOne.JPG

 

InunoTaishou  - might point to the correct solution, but I don't know if that exists in AutoIT.

Edited by Valnurat

Yours sincerely

Kenneth.

Share this post


Link to post
Share on other sites

when a other control gets focus the old control has lost focus, correct me if i am wrong!

Share this post


Link to post
Share on other sites

True.

I'm not saying that the link is not true. I can't not see the light and maybe it is bad experience of coding.

 


Yours sincerely

Kenneth.

Share this post


Link to post
Share on other sites

Make a small runable reproducer without AD.

Share this post


Link to post
Share on other sites

#9 ·  Posted (edited)

I don't know how to make non focus thing, but this should work.

Hopefully.

#Region ;**** Directives created by AutoIt3Wrapper_GUI ****
#AutoIt3Wrapper_Outfile=test Focus.Exe
#EndRegion ;**** Directives created by AutoIt3Wrapper_GUI ****
#include <GUIConstantsEx.au3>

Global $hGUI, $idInput1, $idInput2

FormCreate()
Main()

Func Main()
    ; Loop until the user exits.
    While 1
        Switch GUIGetMsg()
            Case $GUI_EVENT_CLOSE
                ExitLoop
        EndSwitch
    WEnd
EndFunc


Func FormCreate()
; Create a GUI with various controls.
    $hGUI = GUICreate("Create Consultant")
    GUICtrlCreateLabel("First name:", 10, 13)
    GUICtrlCreateLabel("Shortname:", 245, 13)
    $idInput1 = GUICtrlCreateInput("", 90, 10, 150, 20)     ; First
    $idInput2 = GUICtrlCreateInput("", 300, 10, 90, 20)     ; Shortname
    GUISetState(@SW_SHOW, $hGUI)
EndFunc

 

Edited by Valnurat

Yours sincerely

Kenneth.

Share this post


Link to post
Share on other sites

Valnurat,

This may help...

; *** Start added by AutoIt3Wrapper ***
#include <EditConstants.au3>
#include <WindowsConstants.au3>
; *** End added by AutoIt3Wrapper ***

#Region ;**** Directives created by AutoIt3Wrapper_GUI ****
#AutoIt3Wrapper_Outfile=test Focus.Exe
#EndRegion ;**** Directives created by AutoIt3Wrapper_GUI ****
#include <GUIConstantsEx.au3>

#AutoIt3Wrapper_Add_Constants=n


Global $hGUI, $idInput1, $idInput2
GUIRegisterMsg($WM_COMMAND, 'WM_COMMAND')   ; <--- Monitor "command" type messages

FormCreate()
Main()

Func Main()
    ; Loop until the user exits.
    While 1
        Switch GUIGetMsg()
            Case $GUI_EVENT_CLOSE
                ExitLoop
        EndSwitch
    WEnd
EndFunc   ;==>Main


Func FormCreate()
    ; Create a GUI with various controls.
    $hGUI = GUICreate("Create Consultant")
    GUICtrlCreateLabel("First name:", 10, 13)
    GUICtrlCreateLabel("Shortname:", 245, 13)
    $idInput1 = GUICtrlCreateInput("", 90, 10, 150, 20) ; First
    $idInput2 = GUICtrlCreateInput("", 300, 10, 90, 20) ; Shortname
    GUISetState(@SW_SHOW, $hGUI)

EndFunc   ;==>FormCreate

; this routine will monitor edit notifications.  EN_KILLFOCUS is sent to the parent window every time
; an edit control loses focus.

Func WM_COMMAND($hWnd, $iMsg, $wParam, $lParam)

    Local $iCtl = BitAND($wParam, 0xFFFF)
    Local $iCode = BitShift($wParam, 16)

    Switch $iCtl
        Case $idInput2
            Switch $iCode
                Case $EN_killfocus
                    ConsoleWrite('$idinput2 just lost focus and it''s value is ' & GUICtrlRead($iCtl) & @CRLF)
            EndSwitch
    EndSwitch

    Return $GUI_RUNDEFMSG

EndFunc   ;==>WM_COMMAND

MSDN - https://msdn.microsoft.com/en-us/library/windows/desktop/bb761682(v=vs.85).aspx

kylomas


Forum Rules         Procedure for posting code

"I like pigs.  Dogs look up to us.  Cats look down on us.  Pigs treat us as equals."

- Sir Winston Churchill

Share this post


Link to post
Share on other sites

I get some warnings on this.

I tried to declear it and I could compile it, but I don't get any messages in the console.

Capture.JPG


Yours sincerely

Kenneth.

Share this post


Link to post
Share on other sites

Original script from @kylomas is working. The error sounds like you have forgotten a include file.

Share this post


Link to post
Share on other sites

I did a little search and I found a solution.

#Region ;**** Directives created by AutoIt3Wrapper_GUI ****
#AutoIt3Wrapper_Outfile=test Focus.Exe
#EndRegion ;**** Directives created by AutoIt3Wrapper_GUI ****
#include <GUIConstantsEx.au3>
#include <GUIConstants.au3>

Global Const $DebugIt = 1
Global $hGUI, $idInput1, $idInput2, $idInput3

GUIRegisterMsg($WM_COMMAND, 'MY_WM_COMMAND')   ; <--- Monitor "command" type messages


FormCreate()
Main()

Func Main()
    ; Loop until the user exits.
    While 1
        Switch GUIGetMsg()
            Case $GUI_EVENT_CLOSE
                ExitLoop
        EndSwitch
    WEnd
EndFunc


Func FormCreate()
; Create a GUI with various controls.
    $hGUI = GUICreate("Create Consultant")
    GUICtrlCreateLabel("First name:", 10, 13)
    GUICtrlCreateLabel("Last name:", 245, 13)
    GUICtrlCreateLabel("Display name:", 10, 53)
    $idInput1 = GUICtrlCreateInput("", 90, 10, 150, 20)
    $idInput2 = GUICtrlCreateInput("", 300, 10, 90, 20)
    $idInput3 = GUICtrlCreateInput("", 90, 50, 200, 20)
    GUISetState(@SW_SHOW, $hGUI)
EndFunc

Func MY_WM_COMMAND($hWnd, $msg, $wParam, $lParam)
   ; gaFrost for monitoring inputfield change
    Local $nNotifyCode = BitShift($wParam, 16)
    Local $nID = BitAND($wParam, 0xFFFF)
    Local $hCtrl = $lParam

    Switch $nID
        Case $idInput1
            Switch $nNotifyCode
                Case $EN_CHANGE
                    If $DebugIt Then ConsoleWrite(_DebugHeader("Input1 Changed"))
                    GUICtrlSetData($idInput3,GUICtrlRead($idInput1))
                Case $EN_SETFOCUS
                    If $DebugIt Then ConsoleWrite(_DebugHeader("Input1 Setfocus"))
                Case $EN_KILLFOCUS
                    If $DebugIt Then ConsoleWrite(_DebugHeader("Input1 Killfocus"))
            EndSwitch
        Case $idInput2
            Switch $nNotifyCode
                Case $EN_CHANGE
                    If $DebugIt Then ConsoleWrite(_DebugHeader("Input2 Changed"))
                    GUICtrlSetData($idInput3,GUICtrlRead($idInput2))
                Case $EN_SETFOCUS
                    If $DebugIt Then ConsoleWrite(_DebugHeader("Input2 Setfocus"))
                Case $EN_KILLFOCUS
                    If $DebugIt Then ConsoleWrite(_DebugHeader("Input2 Killfocus"))
            EndSwitch
        Case $idInput3
            Switch $nNotifyCode
                Case $EN_CHANGE
                    If $DebugIt Then ConsoleWrite(_DebugHeader("Input1 Changed"))
                Case $EN_SETFOCUS
                    If $DebugIt Then ConsoleWrite(_DebugHeader("Input1 Setfocus"))
                Case $EN_KILLFOCUS
                    If $DebugIt Then ConsoleWrite(_DebugHeader("Input1 Killfocus"))
            EndSwitch
    EndSwitch
   ; Proceed the default Autoit3 internal message commands.
   ; You also can complete let the line out.
   ; !!! But only 'Return' (without any value) will not proceed
   ; the default Autoit3-message in the future !!!
    Return $GUI_RUNDEFMSG
EndFunc  ;==>MY_WM_COMMAND

;===============================================================================
; Function Name:    _DebugHeader
; Description:        Gary's console debug header.
; Parameter(s):            $s_text         - IN -
;
; Requirement(s):
; Return Value(s):
; User CallTip:
; Author(s):
; Note(s):
;===============================================================================
Func _DebugHeader($s_text)
    Return _
            "!===========================================================" & @LF & _
            "+===========================================================" & @LF & _
            "-->" & $s_text & @LF & _
            "+===========================================================" & @LF
EndFunc  ;==>_DebugHeader

Func _GUIEvents()
    Select
        Case @GUI_CtrlId = $GUI_EVENT_CLOSE
            Terminate()
    EndSelect
EndFunc  ;==>_GUIEvents

Func OnAutoItExit()
    ConsoleWrite('CLOSED via Exit'&@CRLF)
EndFunc

Func Terminate()
    ConsoleWrite('CLOSED via Terminate'&@CRLF)
    Exit
EndFunc

 

I do now have another small request.

In this exampel I have 3 Inputs. I would like to have input 3 fill out what I type in Input 1 and input 2. Input1 is Firstname and Input3 is Lastname.

I tried to GUICtrlSetData($idInput3,GUICtrlRead($idInput1)) for "Firstname" and that seems to ok. I have the same GUICtrlSetData($idInput3,GUICtrlRead($idInput2)) for "Lastname", but then it will just overwrite what that is already in Input3.

 

I can't see the light in this one, please help.


Yours sincerely

Kenneth.

Share this post


Link to post
Share on other sites

Something like this:

#Region ;**** Directives created by AutoIt3Wrapper_GUI ****
#AutoIt3Wrapper_Outfile=test Focus.Exe
#EndRegion ;**** Directives created by AutoIt3Wrapper_GUI ****
#include <GUIConstantsEx.au3>
#include <GUIConstants.au3>

FormCreate()


Func FormCreate()
    ; Create a GUI with various controls.
    Local $hGUI = GUICreate("Create Consultant")
    GUICtrlCreateLabel("First name:", 10, 13)
    GUICtrlCreateLabel("Last name:", 245, 13)
    GUICtrlCreateLabel("Display name:", 10, 53)
    Local $idInput1 = GUICtrlCreateInput("", 90, 10, 150, 20)
    Local $idInput2 = GUICtrlCreateInput("", 300, 10, 90, 20)
    Local $idInput3 = GUICtrlCreateInput("", 90, 50, 200, 20)
    GUISetState(@SW_SHOW, $hGUI)
    Local $Old3
    ; Loop until the user exits.
    While 1
        $nMsg = GUIGetMsg()
        Switch $nMsg
            Case $GUI_EVENT_CLOSE
                ExitLoop
            Case $idInput1, $idInput2
                $Old3 = GUICtrlRead($idInput1) & ' ' & GUICtrlRead($idInput2)
                If $Old3 <> GUICtrlRead($idInput3) Then GUICtrlSetData($idInput3, $Old3)
        EndSwitch
    WEnd
EndFunc   ;==>FormCreate

 

Share this post


Link to post
Share on other sites

Yes, like that, but can it be done on the fly in the $EN_CHANGE?


Yours sincerely

Kenneth.

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

    • Skysnake
      By Skysnake
      Scite comes up occasional, almost incidentally, in some support topics.  I have not found a "Scite" topic in the forums, so this is where I will start.  I have recently been using Scite intensively, specifically with a large project and I have certain issues.  I know that Scite is not an AutoIt product, but it is so closely integrated to the core release that it makes sense to raise issues and request support here.  If this is not the right please refer me to the right forum.
      Thx
       
      Skysnake
    • P3rsp3ctiv3
      By P3rsp3ctiv3
      Hello how can I send a {Enter} into the edit window ($cmd)? I tried it first with:
      GUICtrlSetData($cmd, "Line 1" + "{ENTER}")
      but it doesn´t work. Can someone help me please?
      #include <ButtonConstants.au3> #include <EditConstants.au3> #include <GUIConstantsEx.au3> #include <StaticConstants.au3> #include <WindowsConstants.au3> #include <GUIConstants.au3> $Admin = GUICreate("Admin", 234, 168, 192, 229, $GUI_SS_DEFAULT_GUI, BitOR($WS_EX_OVERLAPPEDWINDOW,$WS_EX_TRANSPARENT,$WS_EX_WINDOWEDGE)) GUISetBkColor(0xB4B4B4) $exit = GUICtrlCreateButton("Close", 160, 136, 65, 25) $cmd = GUICtrlCreateEdit("",0, 0, 225, 137, $ES_AUTOVSCROLL + $WS_VSCROLL) GUICtrlSetData(-1, "") GUICtrlSetFont(-1, 10, 400, 0, "Candara") GUICtrlSetBkColor(-1, 0xE3E3E3) $cmd_clear = GUICtrlCreateButton("Clear", 9, 136, 65, 25) GUISetState(@SW_SHOW) HotKeySet("{f1}", CMD_1) HotKeySet("{f2}", CMD_2) While 1 $msg = GUIGetMsg(1) Switch $msg[0] Case $GUI_EVENT_CLOSE Exit Case $exit GUIDelete($Admin) Exit EndSwitch WEnd Func CMD_1(); GUICtrlSetData($cmd, "Line 1" & "{ENTER}") GUICtrlSetData($cmd, "Line 2" & "{ENTER}") EndFunc Func CMD_2(); GUICtrlSetData($cmd, "Line 3" & "{ENTER}") GUICtrlSetData($cmd, "Line 4" & "{ENTER}") EndFunc
    • nacerbaaziz
      By nacerbaaziz
      hello
      please i need to link a progress bar with a time can you help me?
      e.g
      i want to set a progress bar for 10 sec
      am waiting for your answers
      thank you.
    • AdminC
      By AdminC
      #RequireAdmin
      #include <SendMessage.au3>
      #include <WinAPI.au3>
      #include <WindowsConstants.au3>
      #include <GDIPlus.au3>
      #include <GUIConstantsEx.au3>
      #include <WinAPIGdi.au3>
      #include <Array.au3>
      #include <WinAPIDiag.au3>
      $Imglocation = @ScriptDir&"\Image\testimg.bmp"
      _GDIPlus_Startup()
      Local $Bitmap = _GDIPlus_BitmapCreateFromFile($Imglocation)
      Local $hBitmap = _GDIPlus_BitmapCreateHBITMAPFromBitmap($Bitmap)
      Local $imgSize = _WinAPI_GetBitmapDimension($hBitmap)
      Local $imgBits = DllStructCreate('dword[' & ($imgSize.X * $imgSize.Y) & ']')
      _WinAPI_GetBitmapBits($hBitmap, DllStructGetSize($imgBits), DllStructGetPtr($imgBits))
      _WinAPI_DisplayStruct($imgBits)
      MsgBox(0, "", DllStructGetData($imgBits, 1, 1)) 
      _GDIPlus_Shutdown()
      DllstructGetData can't get data color B, G, R value. Who's know that? teach me plz
       
    • Miliardsto
      By Miliardsto
      Hello. Im trying to make my scripts safe - unnable to decompile. I search for obfuscators and other security methods but the search has come to nothing.
      Then one guy gave that idea below. If I rightly understood this idea lets we talk about example program with this secutiy method.
      Program have two parts, first is only login gui and the second part is the main program Second part (main program) is uploaded on ftp server lets say that on http://xxx/autoit/main_program.au3 So we have the first gui with login, we put correctly login and pass and this is the moment when code from http://xxx/autoit/main_program.au3 will be downloaded and executed Finally main program will be appear This is the similiar way like new games are protected by cracking.
      I have few questions in this moment about this:
      Is something like that even possible to do with the autoit? First part of program (login gui) must have somewhere given that link to download the rest of code - http://xxx/autoit/main_program.au3 to make it execute. As we know this first part of program is easy able to hack and retrieve this web url http://xxx/autoit/main_program.au3 where located is main part of program. Is the way to encrypt or secure it? If only code will be stored in .php we know it cannot be previewed. So it could for example get code from .php file instead of .au3 I know that methods works in other languages (I dont know exactly how) thats becouse I only speculates, maybe something may looks different in these solution? Other way would be compiling second part of code on web server (there are available web autoit servers) maybe this way is possible? Tell me anything U know about this ideas and if its even possible to achieve.
      Thanks for ur any response, advice or thoughts