Что нового

Расширенные установки поиска окна: использование более 2-х переменных в св-вах

PACHOM

Новичок
Сообщения
99
Репутация
0
Здравствуйте!

Не получается сделать согласно инструкции:
Одно или несколько свойств используются в качестве параметра title в функциях работы с окнами в следующем формате:
Код:
WinWaitActive("[TITLE:My Window; CLASS:My Class]", "")


Что делаю.
В начале кода устанавливаю
Код:
Opt("WinTitleMatchMode", 4)


двум переменным присваиваю Title и Class:
sCellsTitle = "My Window"
sCellsClass = "My Class"

Далее использую в коде код:
Код:
WinWait("[TITLE:sCellsTitle ; CLASS:sCellsClass ]", "")


Но код не находи нужного окна, хотя оно открыто и вполне нормально обрабатывается, если использовать обычный код:
Код:
WinWait(sCellsTitle, "", 2)



Возможно переменные не обрабатываются должным образом и берутся как текстовые значения. А как это исправить?

С уважением,
ПАХОМ
 

---Zak---

Скриптер
Сообщения
455
Репутация
120
Проверка на "блокноте"...
Код:
Opt("WinTitleMatchMode", 4)

$sCellsTitle = "Безымянный - Блокнот"
$sCellsClass = "Notepad"

WinWait("[TITLE:"&$sCellsTitle&"; CLASS:"&$sCellsClass&"]", "")
ConsoleWrite('Готово'&@CRLF)


У тебя здесь пробелы есть... + "sCellsTitle" ты указываешь не как переменную, а как обычный текст.
Код:
WinWait("[TITLE:sCellsTitle ; CLASS:sCellsClass ]", "")
 

---Zak---

Скриптер
Сообщения
455
Репутация
120
2 PACHOM

Код AutoIt старайся выделять через эту кнопку:
autoit.gif


ЗЫ: на самом деле удобная кнопочка - в ней активируется справка по функциям. Т.е. если ниже кликнешь на "Opt", то можешь почитать о самой функции "неотходя от кассы"
Код:
Opt


:IL_AutoIt_1: удачи ))))
 
Автор
P

PACHOM

Новичок
Сообщения
99
Репутация
0
Вас понял!


Добавлено:
Сообщение автоматически объединено:

Перестал работать скрипт ...
Код:
Opt("WinTitleMatchMode", 4)

$sCellsTitle = "Безымянный — Блокнот"
$sCellsClass = "Notepad"

WinWait("[TITLE:"&$sCellsTitle&";CLASS:"&$sCellsClass&"]", "")
ConsoleWrite('Готово'&@CRLF)


А в чём может быть причина?
 

InnI

AutoIT Гуру
Сообщения
4,912
Репутация
1,429
PACHOM [?]
в чём может быть причина?
В заголовке окна блокнота. В WinXP используется "минус", а в Win7 "длинное тире".
Кстати, опция в начале скрипта не обязательна:
Код:
$sCellsTitle = "Безымянный"
$sCellsClass = "Notepad"

WinWait("[TITLE:"&$sCellsTitle&";CLASS:"&$sCellsClass&"]", "")
ConsoleWrite('Готово'&@CRLF)
 
Автор
P

PACHOM

Новичок
Сообщения
99
Репутация
0
Доброго вечера!

Я выкладываю пример с файлами. Проблема в активации окна. Уже всё перепробовал: и "минус" и "тире" ... один фиг. На Win7 всё работает, а вот на Win98 не пашет. Прошу помощи, гуру :smile:
Код:
#include <Date.au3>
#include <GUIConstants.au3>
#include <ExcelCOM_UDF.au3>
#include <Array.au3>

Opt("WinTitleMatchMode", 1)

Global $Paused

HotKeySet("{ESC}", "Terminate")

Func Terminate()
	Exit 0
EndFunc

$sFilePath = @ScriptDir & "\База.xls" ;Существующая рабочая книга Excel
$oExcel = _ExcelBookOpen($sFilePath)
If @error = 1 Then
    MsgBox(16+4096, "Ошибка!", "Ошибка OLE\COM")
    Exit
ElseIf @error = 2 Then
    MsgBox(16+4096, "Ошибка!", "Файл Excel не существует или имеет неправильный формат!")
    Exit
EndIf


$sCellMin = $oExcel.WorkSheets("Настройка").Cells(1, 2).Value 	;с какой ячейки начинаем цикл 							; лист не обязательно активный, координаты ячеек
$sCellMax = $oExcel.WorkSheets("Настройка").Cells(2, 2).Value 	;максимальное кол-во данных, которое нужно обработать 	; лист не обязательно активный, координаты ячеек
$sCellSleep = $oExcel.WorkSheets("Настройка").Cells(3, 2).Value ;время приостановки скрипта при вводе данных 			; лист не обязательно активный, координаты ячеек
$sCellStep = $oExcel.WorkSheets("Настройка").Cells(4, 2).Value  ;способ перехода к следующей ячейке 					; лист не обязательно активный, координаты ячеек

_ExcelSheetActivate($oExcel, "Данные") 							;активируем лист содержащий данные


$aArray1 = _ExcelReadArray($oExcel, $sCellMin, 1, $sCellMax-1, 1) ;Этот метод при указанных параметрах, получает значения 5 ячеек в массив смещаясь вертикально(вниз) относительно целевых координат: строка=1,столбец=1
If @error Then
    _ExcelBookClose($o_Excel)
    MsgBox(16, 'Error', @error)
    Exit
EndIf

_ArrayDisplay($aArray1, "$aArray1...") ; Отображаем значения массива в окне сообщений

;Ожидание 2 секунд до появление окна 
$hWnd = WinWait("Текстовый документ", "", 3)
If Not $hWnd Then
    MsgBox(16+4096, 'Сообщение', 'Окно не найдено, завершаем работу скрипта.')
	_ExcelBookClose($oExcel, 0, 1) ;Этот метод при указанных параметрах закрывает рабочую книгу, если в ней были сделаны изменения - вызывается стандартный запрос Excel на сохранение изменений
    Exit
EndIf
WinActivate($hWnd) ;заход в окно програмы


For $i In $aArray1								;пробег по солбцу
	Send($i,1) 										;вставить прочтенное из эксель
	Send("{" & $sCellStep & "}") 							;переходим к следующему полю в форме
	Sleep($sCellSleep) 										;Приостановка скрипта на 1 секунду (если ставим 1000)
next

_ExcelBookSave($oExcel) 			;это метод при текущих параметрах сохраняет рабочую книгу без каких либо запросов Excel
_ExcelBookClose($oExcel, 1, 0) 		;Этот метод при указанных параметрах закрывает рабочую книгу, сохраняет изменения без каких либо запросов Excel

MsgBox(64+4096, 'Сообщение', 'Обработка завершена')
 

firex

AutoIT Гуру
Сообщения
943
Репутация
208
PACHOM
У самого нет доступа к Win98.
Попробуй вот что сделай:

Код:
#Include <Array.au3>

$_aList = WinList()
_ArrayDisplay( $_aList )

И посмотри как называется твое окно.

Или как вариант можешь сделать вот так:
Код:
#Include <WinAPIEx.au3>

$_iPID = Run( 'notepad.exe' ) ;Запускаем блокнот
MsgBox( 64, '', 'Жмешь ОК когда блокнот загрузится')

$_aList =_WinAPI_EnumProcessWindows( $_iPID )
WinActivate( $_aList[1][0] ) ;$_aList[1][0] - Твое окно.
 

---Zak---

Скриптер
Сообщения
455
Репутация
120
Автор
P

PACHOM

Новичок
Сообщения
99
Репутация
0
Добрый вечер!

Благодарю за помощь!
Всё работает :smile:

С уважением,
Василий.
 
Верх