I've looked through the documentation, but can't seem to figure out how to do the following:
Can someone please post an example of using FindAllBy and then iterating through the results looking for a GetCurrentPos of a specific dimension?
In a related post, can anyone figure out why no tooltip EVER prints after "tooltip, trying.... xxxxx" ? Almost like it's hung?
#NoEnv ; Recommended for performance and compatibility with future AutoHotkey releases.
; #Warn ; Enable warnings to assist with detecting common errors.
SendMode Input ; Recommended for new scripts due to its superior speed and reliability.
SetWorkingDir %A_ScriptDir% ; Ensures a consistent starting directory.
Code: Select all
#Include %A_ScriptDir%\WinHook.ahk
#include %A_ScriptDir%\UIA_Interface.ahk
lastGoodHwnd := ""
lastGoodCapture := ""
lastGoodExe := ""
UIA := UIA_Interface()
WinHook.Shell.Add("Created",,, ,1)
Return
Created(Win_Hwnd, Win_Title, Win_Class, Win_Exe, Win_Event)
{
global lastGoodCapture, lastGoodExe, lastGoodHwnd
WinGetTitle, currentTitle, ahk_id %Win_Hwnd%
tooltip, %currentTitle%
If (currentTitle != "")
{
WinGetClass, currentClass, ahk_id %Win_Hwnd%
; WinGet, currentHwnd, ID, ahk_id %Win_Hwnd%
WinGet, currentExe, ProcessName, ahk_id %Win_Hwnd%
; tooltip, % currentClass "-" currentExe "-" lastGoodCapture
If ( WinExist(ahk_id %Win_Hwnd%)
&& (currentClass != "tooltips_class32")
&& (currentClass != "ApplicationManager_DesktopShellWindow" )
&& (currentClass != "TaskListThumbnailWnd" )
&& (currentClass != "MSO_BORDEREFFECT_WINDOW_CLASS" )
&& (currentClass != "MultitaskingViewFrame" )
&& (currentClass != "#32768" )
&& (currentClass != "#32770" )
&& (currentClass != "Shell_TrayWnd")
&& (currentClass != "WorkerW" ))
{
lastGoodHwnd := Format("{:#x}", Win_Hwnd)
lastGoodCapture := currentClass
lastGoodExe := currentExe
GoSub, ButCaptureCached
}
}
}
ButCaptureCached:
Critical
sleep 200
If (!PrintButton && lastGoodExe && lastGoodCapture)
{
mWinIdbc2 = ahk_id %lastGoodHwnd%
try {
prevCached := False
for shwnds, c in scannedAhkIds
{
If (mWinIdbc2 == shwnds)
{
prevCached := True
break
}
}
; tooltip, 00
If !prevCached
{
}
Else
{
Tooltip, exiting!
Return
}
; tooltip, 0
If (true)
{
tooltip, trying.... %mWinIdbc2% %lastGoodCapture% %lastGoodExe%
If !prevCached
npEl := UIA.ElementFromHandle(mWinIdbc2) ; Get element and also build the cache
regexMin := "Name=Minimize AND ControlType=button AND ClassName=NetUIAppFrameHelper)"
regexMax := "Name=Maximize AND ControlType=button AND ClassName=NetUIAppFrameHelper)"
regexClo := "Name=Close AND (ControlType=button OR ControlType=ListItem) AND ClassName=NetUIAppFrameHelper"
minimizeElAr := npEl.FindAllBy(regexMin, 0x4, 2, False)
maximizeElAr := npEl.FindAllBy(regexMax, 0x4, 2, False)
closeElAr := npEl.FindAllBy(regexClo, 0x4, 2, False)
for result in minimizeElAr
{
If (result.GetCurrentPos().w > 10)
{
minimizeEl := result
break
}
}
for result in maximizeElAr
{
If (result.GetCurrentPos().w > 10)
{
maximizeEl := result
break
}
}
for result in closeElAr
{
If (result.GetCurrentPos().w > 10)
{
closeEl := result
break
}
}
tooltip, done1!
}
; tooltip, 1
If (!minimizeEl && !maximizeEl && !closeEl)
{
regexMin := "Name=Minimize AND ControlType=button AND (AutomationId=Minimize OR AutomationId=view_2)"
regexMax := "Name=Maximize AND ControlType=button AND (AutomationId=Maximize OR AutomationId=view_2)"
regexClo := "Name=Close AND (ControlType=button OR ControlType=ListItem) AND (AutomationId=Close OR AutomationId=view_2)"
minimizeElAr := npEl.FindAllBy(regexMin, 0x4, 2, False)
maximizeElAr := npEl.FindAllBy(regexMax, 0x4, 2, False)
closeElAr := npEl.FindAllBy(regexClo, 0x4, 2, False)
for result in minimizeElAr
{
If (result.GetCurrentPos().w > 10)
{
minimizeEl := result
break
}
}
for result in maximizeElAr
{
If (result.GetCurrentPos().w > 10)
{
maximizeEl := result
break
}
}
for result in closeElAr
{
If (result.GetCurrentPos().w > 10)
{
closeEl := result
break
}
}
tooltip, done2!
}
Else If (!minimizeEl && !maximizeEl && !closeEl)
{
regexMin := "Name=Minimize AND ControlType=button"
regexMax := "Name=Maximize AND ControlType=button"
regexClo := "Name=Close AND (ControlType=button OR ControlType=ListItem)"
minimizeElAr := npEl.FindAllBy(regexMin, 0x4, 2, False)
maximizeElAr := npEl.FindAllBy(regexMax, 0x4, 2, False)
closeElAr := npEl.FindAllBy(regexClo, 0x4, 2, False)
for result in minimizeElAr
{
If (result.GetCurrentPos().w > 10)
{
minimizeEl := result
break
}
}
for result in maximizeElAr
{
If (result.GetCurrentPos().w > 10)
{
maximizeEl := result
break
}
}
for result in closeElAr
{
If (result.GetCurrentPos().w > 10)
{
closeEl := result
break
}
}
tooltip, done3!
}
; tooltip, 2
If (!minimizeEl && !maximizeEl && !closeEl)
{
tooltip, dammit! %lastGoodCapture% %lastGoodExe%
FileAppend, % npEl.DumpAll() "`n", C:\Users\vmb11\Desktop\log2.txt
scannedAhkIds.remove(mWinIdbc2)
}
Else
{
minimizePos := minimizeEl.GetCurrentPos()
maximizePos := maximizeEl.GetCurrentPos()
closePos := closeEl.GetCurrentPos()
minX := minimizePos.x
minXW := minimizePos.x+minimizePos.w
minY := minimizePos.y
minYH := minimizePos.y+minimizePos.h
maxX := maximizePos.x
maxXW := maximizePos.x+maximizePos.w
maxY := maximizePos.y
maxYH := maximizePos.y+maximizePos.h
closeX := closePos.x
closeXW := closePos.x+closePos.w
closeY := closePos.y
closeYH := closePos.y+closePos.h
tooltip, % minX "-" minXW "-" minY "-" minYH
scannedAhkIds[mWinIdbc2] := 1
Array := {"X": minX, "XW": minXW, "Y": minY, "YH": minYH}
minDimsAhkId[mWinIdbc2] := Array
Array := {"X": maxX, "XW": maxXW, "Y": maxY, "YH": maxYH}
maxDimsAhkId[mWinIdbc2] := Array
Array := {"X": closeX, "XW": closeXW, "Y": closeY, "YH": closeYH}
closeDimsAhkId[mWinIdbc2] := Array
minimizeEl := {}
maximizeEl := {}
closeEl := {}
tooltip, stored!
}
} catch e {
}
}
Return