Jump to content

Recommended Posts

Hi all,

Can anyone tell me please, how to make my GUI stop moving/resizing elements that lays below $hInput (editbox) when I am trying to change the window size?

The problem is that when I try to initialize my GUI 23px high I dont even get the buttons drawn, and if I try to redraw the window to smaller one, all elements get stuck together.

All I want to do is to have a simple GUI, initialized with edit box only, and to have a window slowly expand if user type: add %s (command).

#Region - INCLUDES
#include <EditConstants.au3>
#include <GUIConstantsEx.au3>
#include <WindowsConstants.au3>
#include <Misc.au3>
#include <Array.au3>
#include <WinAPI.au3>

#Region - OPTIONS
Opt("GUIOnEventMode", 1)
Opt("GUIEventOptions", 1) ;0=default, 1=just notification, 2=GUICtrlRead tab index


Global Enum $Title, $Handle, $X, $Y, $Width, $Height, $isVisible, $isActive
Global Enum $Short, $Long
Global Enum $Len=0, $Client, $Order, $Year

Global $hGUI

Global $AI[7], $HP[8]

$AI[$Title] = "Illustrator"

$HP[$Title] = "Helper"
$HP[$Handle] = $hGUI
$HP[$isVisible] = True
$HP[$isActive] = True
$HP[$Y] = 2
$HP[$Width] = 160
$HP[$Height] = 23

Global $aClient[][] = [ ["SHORT", "LONG"], ["1st", "First client"], ["2nd", "Second client"] ]

Global $tAutoExit = TimerInit()

#Region - GUI
$hGUI = GUICreate("Helper", 160, 110, Default, 2, $WS_POPUP, BitOR($WS_EX_TOOLWINDOW,$WS_EX_TOPMOST,$WS_EX_TRANSPARENT))
;~ GUISetBkColor(0x3399FF)
$hInput = GUICtrlCreateInput("", 0, 0, 160, 23)
GUICtrlSetOnEvent($hInput, "InputHandler")
$Button1 = GUICtrlCreateButton("File", 8, 28, 145, 22)
$Button2 = GUICtrlCreateButton("Folder", 8, 50, 145, 22)
$Button3 = GUICtrlCreateButton("Win Search", 8, 72, 145, 22)
WinMove($HP[$Title], "", Default, Default, Default, 23, 3)
#EndRegion GUI

#Region - MAIN LOOP
While 1

Func AutoExit($iSeconds)
    If TimerDiff($tAutoExit) > $iSeconds*1000 Then Exit

Func CheckForRequest($vObject)
    If $vObject[$isActive] And _IsPressed("1B") Then Fade($HP)
    If (_IsPressed("12") And _IsPressed("C0")) Then Fade($HP)

Func InputHandler()
    Local $sMsg = GUICtrlRead(@GUI_CtrlId)
    ConsoleWrite("+ Command: " & $sMsg & @CRLF)

    Switch $sMsg
        Case "bye"
            ConsoleWrite("> Exiting... " & @CRLF)
        Case "ai"
            ConsoleWrite("> " & $AI[$Title] & @CRLF)
        Case "hp"
            ConsoleWrite("> " & $HP[$Title] & @CRLF)
        Case StringInStr($sMsg, " ") <> False
        Case Else


Func GetArgs($sMsg)
    Local $aMsg = StringSplit($sMsg, " ")

    Switch $aMsg[0]
        Case 2 To 3

Func isNewCommand($aArgs)
    If $aArgs < 2 Then Return -1

    Switch $aArgs[1]
        Case "add"
        Case "del"

Func CommandAdd($vVar)
    Local $t = 0
    ConsoleWrite("-> Adding new command..." & @CRLF)
    WinMove($HP[$Title], "", Default, Default, Default, 140, 1)
    GUICtrlSetState($Button1, $GUI_SHOW)

    While $t < 4
        $t += 1

Func CommandDel($vVar)
    ConsoleWrite("-> Removing existing command..." & @CRLF)

Func isClientFolder($aArgs)
    Local $aSearch = _ArraySearch($aClient, $aArgs[$Client])
    Local $hSearch, $sFileName = ""
    Local $aOrderNo, $sOrderNo, $sOrderName, $nOrder=1
    Local $sPath = "D:\"
    Local $iYear = "2015"

    ; Check if user is looking for client folder
    If $aSearch=-1 Then Return -1

    ; Check if user have specified the year
    If ($aArgs[$Len]=3 And ($aArgs[3]>11 And $aArgs[3]<15)) Then
        $iYear = "20" & $aArgs[$Year]

    ; Set up new working path
    $sPath &= $iYear & "\"
    $sPath &= $aClient[$aSearch][$Long] & "\"

    ; Reorder?
    $aOrder = StringSplit($aArgs[$Order], ".")
    $sOrderNo = $iYear

    ; Deep search
        $sOrderNo &= "."& $aOrder[$nOrder]

        $hSearch = FileFindFirstFile($sOrderNo &"*")
        $sFileName = FileFindNextFile($hSearch)


        If $sFileName = "" Then
            Return -1
            $sPath &= "\" & $sFileName &"\"

        $nOrder += 1
    Until $nOrder > $aOrder[$Len]

    ShellExecute($sPath, "", "", "open")


Func Fade(ByRef $vObject)
    If $HP[$isVisible] Then
        For $i=255 To 0 Step -1
            WinSetTrans($vObject[$Title], "", $i)
            If IsInt($i/10) Then Sleep(2)
        GUICtrlSetData($hInput, "")
        For $i=0 To 255 Step 1
            WinSetTrans($vObject[$Title], "", $i)
            If IsInt($i/10) Then Sleep(2)

    $vObject[$isVisible] = Not $vObject[$isVisible]
    $vObject[$isActive] = Not $vObject[$isActive]


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
  • Recently Browsing   0 members

    No registered users viewing this page.

  • Similar Content

    • By Viszna
      Why does Windows 10 "AutoIt Window Info" give the wrong window position?
      WinMove() moves the window to a different point than parameters? -look script

      The test script moves the notepad.exe window to 0, 0, the real window coordinates are 8, 0
      Modified script add WinGetPos() and MouseMove() and MouseGetPos()
      #include <ScreenCapture.au3> Local $iPID = Run("notepad.exe", "") WinWait("[CLASS:Notepad]", "", 10); Wait 10 seconds for the Notepad window to appear. WinMove ("[CLASS:Notepad]", "", 0, 0, 600, 400) WinActivate("[CLASS:Notepad]") Send("WinMove ('[CLASS:Notepad]', "", 0, 0, 600, 400){ENTER}") Send("@DesktopWidth: " & @DesktopWidth & "{ENTER}") Send("@DesktopHeight: " & @DesktopHeight & "{ENTER}") Send("@DesktopDepth: " & @DesktopDepth & "{ENTER}") Send("@OSArch: " & @OSArch & "{ENTER}") Send("@OSBuild: " & @OSBuild & "{ENTER}") Send("@OSServicePack: " & @OSServicePack & "{ENTER}") Send("@OSType: " & @OSType & "{ENTER}") Send("@OSVersion: " & @OSVersion & "{ENTER}") Send(WinGetPos("[CLASS:Notepad]") & "{ENTER}") Send("X: " & WinGetPos("[CLASS:Notepad]")[0] & "{ENTER}") Send("Y: " & WinGetPos("[CLASS:Notepad]")[1] & "{ENTER}") Send("Width: " & WinGetPos("[CLASS:Notepad]")[2] & "{ENTER}") Send("Height: " & WinGetPos("[CLASS:Notepad]")[3] & "{ENTER}") MouseMove(0,400) Send("MouseMove(0,400){ENTER}") Send("MouseGetPos() X: " & MouseGetPos()[0] & "Y: " & MouseGetPos()[1]) Sleep(100) _ScreenCapture_Capture('C:\temp\screen.bmp',0,0,800,600) MsgBox(0,"Info","Save screen to C:\temp\screen.bmp" & @CRLF & "Click OK to view the bitmap") Run("explorer.exe C:\temp\screen.bmp") Is ALWAYS such a difference 8px (in every Windows 7, 8, Server)?
    • By therks
      Has anybody else noticed that Windows 7 reacts ignorantly when you use the Windows key + arrow key shortcuts on a GUI with GUIEventMode set to 1? I discovered this recently when I was working on an app where I wanted complete control over the maximize/minimize buttons.
      Just give it a spin:
      #include <GUIConstants.au3> Opt('GUIEventOptions', 1) $hGUI = GUICreate('', 300, 200, Default, Default, BitOR($GUI_SS_DEFAULT_GUI, $WS_MAXIMIZEBOX)) GUISetState() While 1 Switch GUIGetMsg() Case $GUI_EVENT_MAXIMIZE ToolTip('Maximized') Case $GUI_EVENT_MINIMIZE ToolTip('Minimized') Case $GUI_EVENT_RESTORE ToolTip('Restored') Case $GUI_EVENT_CLOSE Exit EndSwitch WEnd Run that, then hit Win+Up or Win+Down. None of those events get triggered, and it still maximizes/minimizes. Although I can't get it to restore down from a maximize unless the window is also resizable ($WS_THICKFRAME in the style).
      Is there a way to stop Windows from doing what it wants or is the only option to check with WinGetState() and then change it back?
      Windows 10 seems to respect my settings, and I don't have any other versions to test on.
    • By keelaji
      first of all i searched in the forum but i didn't found any solution to my problem.
      I am using windows 10.
      I made a script that is supposed to change the title to the active window, resize it to the smallest size possible (should be around 800 x 600) and move to (0, 0).
      I can change the title but i fail to do the other 2 tasks.
      i use wingettitle [active] copied from the F1 help tool (and this works), i i put the title in a variable and than i use
      winsettitle ($variable, "one") (this works too)
      winmove ("one", 0, 0, 800, 600) (doesn't do anything)
      i also tried
      local $x = winget ( "one")
      msgbox (0, "", $x) (i get a completely white box so i suppose winget can't have any data about my window ??)
      any suggestion ?
    • By WoodGrain
      Hi guys,
      I'm trying to move and resize a program call CPUID HWMonitor (http://www.cpuid.com/softwares/hwmonitor.html) but WinMove() doesn't work. Can someone tell me how to get this to work for this program? I've successfully moved other programs using WinMove(), and I've used WinGetTitle ("[ACTIVE]") to confirm the title is correct. WinActivate("CPUID HWMonitor") does work.
      If I run the following code nothing happens, doesn't move or resize, but AutoIt doesn't complain about the code either:
      WinMove("CPUID HWMonitor", 0, 0, 475, 715) The class changes every time the program opens (and I've nevery had a lot of success with classes tbh, bit hit and miss for me).
      Thanks all!
    • By Leo1906
      Hey guys, I could need your help aggain ..
      Is there a way to clip GUIs together (child GUIs - in one script). So if I use WinMove with speed set to one of those GUIs, the others follow at the same speed like they where one block?
      I can't think of an option to do this in pure Autoit. Creating an adlib for each GUI won't help I'm afraid, because adlibs are paused on GUI-move?
      And using this type of function didn't help either: 

      I can't imagine any other way of achieving multiple GUI moves at once using Autoit, because Autoit waits for the WinMove command to finish ..
      Any thoughts? Maybe a build in windows function for clipping GUIs together?
      Thanks for your help
  • Create New...