Что нового

Не удается обратиться к заголовку окна из-за наличия знаков "[" и "]"

MrGep

Новичок
Сообщения
74
Репутация
1
Версия AutoIt: 3.3.8.1

Описание:

По служебным обязанностям мне досталось следить за "Сервером". Стоит не 1С, говорю сразу, а старенькая, написанная на коленке программа. По этой причине серверная часть представляет собой очень много приложений, т.е. рабочий стол и панель задач забиты, программа, помимо прочего, вылетает каждые день - два. И мне понадобился скрипт, которые будет контролировать эти окошки(Прошу прощения за кривость выражения).
Начал я его делать по простейшей идее - Если есть нужный нам заголовок, то у меня отображается зеленый огонек, а само окошко сворачивается, чтобы не мешало.

Код:
While 1
	$nMsg = GUIGetMsg()
	Switch $nMsg
		Case $GUI_EVENT_CLOSE
			Exit
EndSwitch

          If WinExists( "[c:\Bu___-13\_box_]") Then
                   GUICtrlSetImage($Pic1, 'C:\Loaded.jpg')

          Else
	           GUICtrlSetImage($Pic1, 'C:\NotLoaded.jpg')
           EndIf
WEnd


Но! Приложение имеет заголовок примерно такого типа [box title=TitleBox][c:\Bu___-13\_box_][/box]
и моё творение радостно светит красным цветом(Стоит сменить на другой заголовок, браузера, к примеру - то все отлично работает.


Теперь вопросы к знатокам
1) Как обратиться в этом случае к заголовкам?
2) Окон много, есть ли возможность обращаться к переменным "$Pic1,2...etc" через массив. Или как это верно. Если моя логика верна, то надо создать 2 массива - Массив переменных, которые содержат картинку, а второй массив с заголовками. И на соответствующий элемент массива заголовков будет своя переменная. Или есть путь легче? (Скопировать 60 раз одно и тоже и прописать имя и картинку - это не легче)



Примечания: Заранее спасибо)))
 

InnI

AutoIT Гуру
Сообщения
4,912
Репутация
1,429
MrGep [?]
Как обратиться в этом случае к заголовкам?
Вот три способа - выбирайте
Код:
ConsoleWrite(WinExists("[c:\Bu___-13\_box_") & @LF) ; не указывать закрывающую скобку

ConsoleWrite(WinExists("[TITLE:[c:\Bu___-13\_box_]]") & @LF) ; использовать указание TITLE

Opt("WinTitleMatchMode", 2) ; включить опцию поиска части строки заголовка
ConsoleWrite(WinExists("c:\Bu___-13\_box_") & @LF) ; и не указывать скобки
 

sngr

AutoIT Гуру
Сообщения
1,010
Репутация
408
Путей решения проблемы море - можно определять заголовок с рег выражениями, получить handle всех окон програмы и тыкать в них и т д.
 

InnI

AutoIT Гуру
Сообщения
4,912
Репутация
1,429
MrGep [?]
Массив переменных, которые содержат картинку, а второй массив с заголовками
Я бы сделал один двумерный: нулевой элемент - ID картинки, первый - заголовок (или наоборот). Вот пример для четырёх заранее известных заголовков. Можете проверить на калькуляторе.
Код:
#include <ScreenCapture.au3>

_ScreenCapture_Capture(@ScriptDir & "\Loaded.jpg", 1, 1, 50, 50, False)
_ScreenCapture_Capture(@ScriptDir & "\NotLoaded.jpg", 1, 51, 50, 100, False)

Global $Titles[4][2] = [["","Калькулятор"], _
                        ["","[c:\Bu___-13\_box_"], _
                        ["","[c:\Bu___-12\_box_"], _
                        ["","[c:\Bu___-11\_box_"]]

$gui = GUICreate("Test", 200, 50)
For $i = 0 To UBound($Titles, 1) - 1
  $Titles[$i][0] = GUICtrlCreatePic(@ScriptDir & "\NotLoaded.jpg", $i * 50, 0, 50, 50)
Next
GUISetState()

Do
  For $i = 0 To UBound($Titles, 1) - 1
    If WinExists($Titles[$i][1]) Then
      GUICtrlSetImage($Titles[$i][0], @ScriptDir & "\Loaded.jpg")
    Else
      GUICtrlSetImage($Titles[$i][0], @ScriptDir & "\NotLoaded.jpg")
    EndIf
  Next
Until GUIGetMsg() = -3
 
Автор
M

MrGep

Новичок
Сообщения
74
Репутация
1
Огромное спасибо всем))) Я воспользовался способом InnI, добавил опцию по поиску части заголовка, хотел использовать как временный вариант, пока не сделаю нормально, в виде массивов. Но, к сожалению, возникла проблема - часть приложений и некоторые батники перестали запускаться. Даже не проявляются. Пара кликов - курсор отображает загрузку несколько секунд - все, вылет. Я поискал, но, возможно, не умею пользоваться поиском, так как ничего не нашел. Кто - нибудь сталкивался с подобной проблемой?

P.S. На программе нет систем защиты, так что тут что - то другое
 
Верх