Jump to content
Sign in to follow this  
hunsabre

Winwait for any window

Recommended Posts

I need a resource friendly solution to wait for a window poping up from one of two applications.

I don't know all the possible titles. I need to interpret the window from its title and its text and takes further actions upon it.

I can not explicitly wait for a specific window with specific title.

May some regexp should be used?

Share this post


Link to post
Share on other sites

Have a look at AU3Info to determine the Windows details/info and then look in the Help File for WinWait() or WinWaitActive()


UDF List:

 
_AdapterConnections()_AlwaysRun()_AppMon()_AppMonEx()_ArrayFilter/_ArrayReduce_BinaryBin()_CheckMsgBox()_CmdLineRaw()_ContextMenu()_ConvertLHWebColor()/_ConvertSHWebColor()_DesktopDimensions()_DisplayPassword()_DotNet_Load()/_DotNet_Unload()_Fibonacci()_FileCompare()_FileCompareContents()_FileNameByHandle()_FilePrefix/SRE()_FindInFile()_GetBackgroundColor()/_SetBackgroundColor()_GetConrolID()_GetCtrlClass()_GetDirectoryFormat()_GetDriveMediaType()_GetFilename()/_GetFilenameExt()_GetHardwareID()_GetIP()_GetIP_Country()_GetOSLanguage()_GetSavedSource()_GetStringSize()_GetSystemPaths()_GetURLImage()_GIFImage()_GoogleWeather()_GUICtrlCreateGroup()_GUICtrlListBox_CreateArray()_GUICtrlListView_CreateArray()_GUICtrlListView_SaveCSV()_GUICtrlListView_SaveHTML()_GUICtrlListView_SaveTxt()_GUICtrlListView_SaveXML()_GUICtrlMenu_Recent()_GUICtrlMenu_SetItemImage()_GUICtrlTreeView_CreateArray()_GUIDisable()_GUIImageList_SetIconFromHandle()_GUIRegisterMsg()_GUISetIcon()_Icon_Clear()/_Icon_Set()_IdleTime()_InetGet()_InetGetGUI()_InetGetProgress()_IPDetails()_IsFileOlder()_IsGUID()_IsHex()_IsPalindrome()_IsRegKey()_IsStringRegExp()_IsSystemDrive()_IsUPX()_IsValidType()_IsWebColor()_Language()_Log()_MicrosoftInternetConnectivity()_MSDNDataType()_PathFull/GetRelative/Split()_PathSplitEx()_PrintFromArray()_ProgressSetMarquee()_ReDim()_RockPaperScissors()/_RockPaperScissorsLizardSpock()_ScrollingCredits_SelfDelete()_SelfRename()_SelfUpdate()_SendTo()_ShellAll()_ShellFile()_ShellFolder()_SingletonHWID()_SingletonPID()_Startup()_StringCompact()_StringIsValid()_StringRegExpMetaCharacters()_StringReplaceWholeWord()_StringStripChars()_Temperature()_TrialPeriod()_UKToUSDate()/_USToUKDate()_WinAPI_Create_CTL_CODE()_WinAPI_CreateGUID()_WMIDateStringToDate()/_DateToWMIDateString()Au3 script parsingAutoIt SearchAutoIt3 PortableAutoIt3WrapperToPragmaAutoItWinGetTitle()/AutoItWinSetTitle()CodingDirToHTML5FileInstallrFileReadLastChars()GeoIP databaseGUI - Only Close ButtonGUI ExamplesGUICtrlDeleteImage()GUICtrlGetBkColor()GUICtrlGetStyle()GUIEventsGUIGetBkColor()Int_Parse() & Int_TryParse()IsISBN()LockFile()Mapping CtrlIDsOOP in AutoItParseHeadersToSciTE()PasswordValidPasteBinPosts Per DayPreExpandProtect GlobalsQueue()Resource UpdateResourcesExSciTE JumpSettings INISHELLHOOKShunting-YardSignature CreatorStack()Stopwatch()StringAddLF()/StringStripLF()StringEOLToCRLF()VSCROLLWM_COPYDATAMore Examples...

Updated: 22/04/2018

Share this post


Link to post
Share on other sites

No. in runtime, I have no chance to check AU3Info.

The script have to pause and have to analyze the next window content. Depend on the content makes several actions.

i dont want to use a winlist comparisation in a while....end cycle to wait for the changed winlist status (new window appeared), because in consumes much more resource.

Share this post


Link to post
Share on other sites

This one can manage the proble, but I not prefer such an infinite kidda loops:

$var = WinList()

$win1=$var[0][0]

while $var[0][0]=$win1

$var = WinList()

sleep(500)

WEnd

$last_tiltle=WinGetTitle("[ACTIVE]")

msgbox(0, "Window opened", $last_tiltle)

the sleep(500) can reduce the near 50% processor load to ~1% during the running while...wend loop.

the 500 msec still can be considered a real time apps.

Share this post


Link to post
Share on other sites

your posts are rather confusing me...

but this waits till a visible window of a specified process-name exists and then returns the winHandle you should use in your scripts.

$test = waitforWin('notepad.exe')
MsgBox(64, 'Window found', 'wHnd = ' & $test & @LF & 'wTitle = ' & WinGetTitle($test))

Func waitforWin($processName)
    Local $pid, $lWin, $i
    While 1
        $pid = ProcessExists($processName)
        If $pid <> 0 Then
            $lWin = WinList()
            For $i = 1 To $lWin[0][0]
                ; If Process of the window is same as the process your looking for AND window is vicible then return winHandle
                If WinGetProcess($lWin[$i][1]) = $pid And BitAND(WinGetState($lWin[$i][1]), 2) Then Return $lWin[$i][1]
            Next
        EndIf
        Sleep(50)
    WEnd
EndFunc   ;==>waitforWin

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
Sign in to follow this  

  • Recently Browsing   0 members

    No registered users viewing this page.

×
×
  • Create New...