I'm trying to fill a ListView with all normal viewable windows to act with them.
First I tried with WinList:
Local $aWinList = WinList("[REGEXPTITLE:(?i)(.+)]") Local $aTmp, $iID ;~ _ArrayDisplay($aWinList) For $i = $aWinList To 1 Step -1 ; going backwards not disturbing the index while cycling through and deleting some If StringStripWS( $aWinList[$i], 3) == "" Or _ Not BitAND(WinGetState($aWinList[$i]), $WIN_STATE_VISIBLE) Or _ BitAND(WinGetState($aWinList[$i]), $WIN_STATE_MINIMIZED ) Then _ArrayDelete($aWinList, $i) Else ; Window has a Title and is "visible" $aTmp = WinGetPos($aWinList[$i]) If $aTmp < -1000 Or $aTmp < -1000 Then ; Window is minimized or tray icon _ArrayDelete($aWinList, $i) EndIf EndIf Next $aWinList = UBound($aWinList)-1 ; getting actual # of windows ; Each row is now [ID]=> [Title], [hWnd] But it keeps getting Windows which are definitely not there at least not visible:
Those windows "Rechner", "Einstellungen", "Netflix", "Microsoft Store", ... are not there!?!
It should list only the first three windows, which are real.
I even tried it with _WinAPI_ UDF:
$hWnd = _WinAPI_GetForegroundWindow() ; Add items _GUICtrlListView_BeginUpdate($idListview) If $hWnd <> 0 Then $iI = 0 Do If _WinAPI_IsWindow($hWnd) And _WinAPI_IsWindowVisible Then _GUICtrlListView_AddItem($idListview, WinGetTitle($hWnd)) _GUICtrlListView_AddSubItem($idListview, $iI, $hWnd, 1) $iI += 1 $hWnd = _WinAPI_GetWindow($hWnd, $GW_HWNDNEXT) EndIf Until $hWnd = 0 EndIf But it is the same...
How can i distinguish those invisible windows from normal ones?
PS: I'm using Windows 10, maybe it is important to know?
I am currently using Autoit's "WinList" function in an Autoit script, I fully understand it.
Autoit provides a nice Library for Word VBA so that Some of Autoit's functions can be used within a MSWord VBA script, some of which I am using.
I have a use for Autoit's "WinList" function which has been provided by AutoIt in their Library for MSWord VBA scripting. The WinList function Creates an array when run. MSWord VBA does not seem to allow this. To create an array in VBA you have to first DIM it, and this does not seem to work for the WinList function.
Dim AutoIt As New AutoItX3Lib.AutoItX3
MyArray= Autoit(WinList) produces an error, whether I dim the array or not.
It seems that AutoIt has provided a function for VBA that cant be used ??
Can someone figure out a way to use WinList within Word VBA?
So the code I use is as follows:
Local $InstancesList = WinList("[REGEXPTITLE:(?i)(.*Paint.*|.*WinAmp.*)]")
And then if this number changes, I do something. But once in a while I SEE a new window paint being opened but nothing happens.
So I added logs and printed the InstancesList and saw it did not pick up the new paint.
Now I also added a WinList with Class to doublecheck, but still now and then it fails. So I was wondering if this is a known problem, and whether there are alternatives of workarounds.
Hi, I use winlist to count the amount of instances of a specific window (in combination with a reg expression). Over multiple runs, it seems that it fails 1 in a hundred times more or less. Any idea how/why? And are there alternatives to use as a backup/check?
I get a database result back as sometimes as single array and sometimes multi array (I understand that is bad practice in general and I am trying to fix that, because there are some errors in my database)
but how can I error handle the best way or determine when something is single or multi array without making my script to break?
I am very poor at @error handling in such cases
for example $ncatid = $array
(because it is the answer i got back from database is multi array, that is because the item is unfortunate stored double which i am trying to fix in proper manner)
I get the error of, Array variable has incorrect number of subscripts or subscript dimension range exceeded