Что нового

Окна, Диалоги Почему функция WinGetTitle() не всегда возвращает заголовок окна?

Oki

Продвинутый
Сообщения
452
Репутация
62
Опытным путём выделены три текста заголовка, которые не всегда функция возвращает.
Код:
#include <Array.au3>
$aList = WinList()
Dim $aShortList[100][3]
$iCounter = 1
$iCounterShort = 0
Do
    If $aList[$iCounter][0] == "Default IME" Or $aList[$iCounter][0] == "Settings" Or $aList[$iCounter][0] == "Calculator" Then
        $aShortList[$iCounterShort][0] = $aList[$iCounter][1]
        $aShortList[$iCounterShort][1] = $aList[$iCounter][0]
        $aShortList[$iCounterShort][2] = WinGetTitle($aList[$iCounter][1])
        $iCounterShort += 1
    EndIf
    $iCounter += 1
Until $iCounter > $aList[0][0]
_ArrayDisplay($aShortList)
Из 63 полученных строк массива в 5 ячейках третьей колонки пусто. Ошибка у меня или в работе функций?
 
Последнее редактирование:

joiner

Модератор
Локальный модератор
Сообщения
3,556
Репутация
628
Не все окна имеют заголовок
 
Автор
Oki

Oki

Продвинутый
Сообщения
452
Репутация
62
Не все окна имеют заголовок
Если внимательно ознакомиться со скриптом, то видно, что речь идёт именно о тех окнах, для которых функция Winlist() возвращает заголовки, тогда как функция WinGetTitle() с этим же не справляется.
 

joiner

Модератор
Локальный модератор
Сообщения
3,556
Репутация
628
Код:
#include <WinAPISysWin.au3>
.......................
$aShortList[$iCounterShort][2] = _WinAPI_GetWindowText($aList[$iCounter][1])
........................
 
  • Like
Реакции: Oki
Автор
Oki

Oki

Продвинутый
Сообщения
452
Репутация
62
Код:
_WinAPI_GetWindowText($aList[$iCounter][1])
Спасибо, через эту функцию получается искомый результат в выделенных случаях. Надеюсь, что и в остальных тоже. Правда, вопрос о том, почему не сработало в первоначальном варианте, остался непрояснённым.

А для наглядности демонстрации сформулированного изначально вопроса имеет смысл добавить ещё одну колонку с предложенным решением сразу же за колонкой, которая спорадически не срабатывает.
Код:
#include <WinAPISysWin.au3>
#include <Array.au3>
$aList = WinList()
Dim $aShortList[100][4]
$iCounterShort = 0
For $iCounter = 1 To $aList[0][0] ; Здесь уместнее цикл For...To...Next, изначально цикл был другим, так как из скрипта выброшена нерелевантная для вопроса часть, а организация цикла в спешке осталась прежней.
    If $aList[$iCounter][0] == "Default IME" Or $aList[$iCounter][0] == "Settings" Or $aList[$iCounter][0] == "Calculator" Then
        $aShortList[$iCounterShort][0] = $aList[$iCounter][1]
        $aShortList[$iCounterShort][1] = $aList[$iCounter][0]
        $aShortList[$iCounterShort][2] = WinGetTitle($aList[$iCounter][1])
        $aShortList[$iCounterShort][3] = _WinAPI_GetWindowText($aList[$iCounter][1])
        $iCounterShort += 1
    EndIf
Next
_ArrayDisplay($aShortList)
 
Последнее редактирование:

joiner

Модератор
Локальный модератор
Сообщения
3,556
Репутация
628
На оффоруме написано, что ошибка известна, но так и не исправлено. Как я понял
 
  • Like
Реакции: Oki
Верх