Jump to content
Valnurat

Exit GUICtrlCreateInput with a TAB

Recommended Posts

Valnurat

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
Valnurat

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
Valnurat

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
AutoBert

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
Valnurat

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
AutoBert

Make a small runable reproducer without AD.

Share this post


Link to post
Share on other sites
Valnurat

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
kylomas

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
Valnurat

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
AutoBert

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
Valnurat

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
AutoBert

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
Valnurat

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

    • DynamicRookie
      By DynamicRookie
      Hey there!
       
      Is there a way to detect movement only for 1 specific window?

      HWnd is not really working, it still detects movement in all the windows within the region

      This is my script:
       
      ;Checksum actual HotKeySet("{f2}", 'exit_') MsgBox(0, '', '0') Beep(500, 2000) $Hwnd = WinActive('') while 1 $Checksum = PixelChecksum(211, 650, 1094, 914, 1, $Hwnd) If PixelChecksum(211, 650, 1094, 914, 1, $Hwnd) <> $Checksum Then For $i = 1 To 100 Beep(1000, 50) Next MsgBox(0, '', 'New message!', 1) EndIf WEnd Func exit_() Beep(500, 1000) Exit 0 EndFunc I just want to check whenever a message comes because the app i use doesn't give notifications properly.

      Any help is really appreciated!
    • PramodR
      By PramodR
      Can you please see whats wrong im doing in the below code? i can read few registry entry but not all for eg, i am able to get value of "Shell" Key from the registry path  but not AutoAdminLogon which has the value of "1", is there any change i have to do to read numeric values?
       Global  $shello = RegRead ("HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Winlogon","Shell" )
       ConsoleWrite("This is Hello"& $shello)
      above command returns proper value , but same command with AutoAdminLogon returns null as shown in below ? infact registry has the value of 1.
       Global  $shello = RegRead ("HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Winlogon","AutoAdminLogon" )
       ConsoleWrite("This is Hello"& $shello)
    • Eminence
      By Eminence
      Hello,
      I've been searching on how to select the first row in my database which includes a time column based on the latest start_time date for today's date.
      This is my current code:
      Local $iCurrentDate = _Now() Local $sqlHandle = _dbOpen($sDbPath) Local $aResult, $iRows, $iCols _SQLite_GetTable2d($sqlHandle, "SELECT start_time FROM " & $srawDb & " ORDER BY datetime(start_time) DESC LIMIT 1", $aResult, $iRows, $iCols) _ArrayDisplay($aResult) _dbClose($sDbpath) What it does is it gets the first row entry in the database however it does not select the latest start_time entry in the database, it always select the first row. I've tried changing DESC to ASC to see if that will do it but the issue still remains. Any thoughts on this? Thanks in advance.
       
      *EDIT
      The date format in the database is by MM/DD/YYYY HH:MM:SS.
    • Trisha
      By Trisha
      Hello,
      I Have clicked on save as option to save a file, while doing that I need to rename a file appending with sysdate. I have searched in google find the below one line of code:
      FileMove("C:\somefile.txt", "C:\somefile1.txt"), When I am trying to append with sysdate. It is not happening. Please help me out  with the small issue.
    • TrashBoat
      By TrashBoat
      hey i would like to know if its possible to take a string like this
      $string = "onethousandninehundredeightyfive" and convert it into:
      $string = "one thousand nine hundred eighty five" i have something going on here but its no use
      $string = "onethousandninehundredeightyfive" Global $array[9] = ['one', 'two', 'three', 'four', 'five', 'six', 'seven', 'eight', 'nine'] Global $array1[19] = ['onethousand', 'twothousand', 'threethousand', 'fourthousand', 'fivethousand', 'sixthousand', 'seventhousand', 'eightthousand', 'ninethousand','tenthousand','hundred', 'twohundred', 'threehundred', 'fourhundred', 'fivehundred', 'sixhundred', 'sevenhundred', 'eighthundred', 'ninehundred'] MsgBox(0, 0, AddSpaces($string)) Func AddSpaces($string) Local $finalStr $length = StringLen($string) For $x = 0 To $length Local $trim = StringTrimRight($string, $x) For $h = 0 To 18 If $trim = $array1[$h] Then $finalStr = $finalStr & " " & $trim $string = StringTrimLeft($string, $h) $length = StringLen($string) EndIf Next For $z = 0 To 8 If $trim = $array[$z] Then $finalStr = $finalStr & " " & $trim $string = StringTrimLeft($string, $z) $length = StringLen($string) EndIf Next Next Return $finalStr EndFunc ;==>AddSpaces  
×

Important Information

We have placed cookies on your device to help make this website better. You can adjust your cookie settings, otherwise we'll assume you're okay to continue.