Что нового

Поиск окна

winstan

Эксплотатор)
Сообщения
406
Репутация
78
Здраствуйте!
Как можна заствить скрип найти необходимое окно?
дело в том что загаловок окна может быть разный в зависимости от настроик.В часности: в моём случаи игра часто запускается не стем разрешением которое было раньше.
В имени окна при этом изменяется только последние несколько цифор.
У меня есть 3 теории как можна решить мою проблему.
1.Задать поиск окна по маске.
2.Проверить наличия всех возможных имён.
3.Поиск окна по процессу (у процесса только одно окно).
Подскажите какой способ можно применить и как его реализовать.
 

Luke

Знающий
Сообщения
64
Репутация
14
По умолчанию ищет по первым совпавшим буквам, просто пиши часть имени окна, посмотри в справке опцию WinTitleMatchMode.
Или можешь добавить в скрипт строку Opt("WinTitleMatchMode", 2) - сопоставление с произвольным фрагментом
 

CreatoR

Must AutoIt!
Команда форума
Администратор
Сообщения
8 471
Репутация
2 401
Автор
winstan

winstan

Эксплотатор)
Сообщения
406
Репутация
78
r35p3ct сказал(а):
всёравно не могу понять что делать у меня слишком мало опыта в этом скриптовом языке чтобы решать проблемы даже малой сложности


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

Наверно нада было писать в стол заказов но надеюсь всётаки не придётся открывать новую темку.
вот код который у меня применяется
Код:
$hWnd1 = WinGetHandle('название игры (разрешение)')

While 1 = 1

ControlSend($hWnd1, "","", "{TAB}")
$Random = (Random(-100, 100, 0))
Sleep(200+$Random)
ControlSend($hWnd1, "","", "{5}")
$Random = (Random(-100, 100, 0))
Sleep(1000+$Random)

Wend
но у меня таких 4 файла с разным разрешением.
имя процеса Nksp.exe
 

CreatoR

Must AutoIt!
Команда форума
Администратор
Сообщения
8 471
Репутация
2 401
winstan [?]
всёравно не могу понять
Потому что не ProcessList нужен, а ProcessExists.

имя процеса Nksp.exe
Код:
$hWnd1 = _ProcessGetWindow("Nksp.exe")

While 1
	ControlSend($hWnd1, "","", "{TAB}")
	$Random = Random(-100, 100, 0)
	Sleep(200+$Random)
	ControlSend($hWnd1, "","", "{5}")
	$Random = Random(-100, 100, 0)
	Sleep(1000+$Random)
Wend

Func _ProcessGetWindow($iPID, $iRet=1)
    Local $aWinList = WinList()
    Local $aRet[2]
	
    If IsString($iPID) Then
		$iPID = ProcessExists($iPID)
	EndIf
	
    For $i = 1 To UBound($aWinList)-1
        If WinGetProcess($aWinList[$i][1]) = $iPID Then
            $aRet[0] = $aWinList[$i][0] ;Title
            $aRet[1] = $aWinList[$i][1] ;WinHandle
			
            If $iRet = 0 Then
				Return $aRet[0]
			EndIf
			
            If $iRet = 1 Then
				Return $aRet[1]
			EndIf
			
            Return $aRet
        EndIf
    Next
	
    Return SetError(1, 0, $aRet)
EndFunc


или метод с поиском заголовка по регулярному выражению:
Код:
$hWnd1 = WinGetHandle("[REGEXPTITLE:название игры \(.*\)]")
 
Автор
winstan

winstan

Эксплотатор)
Сообщения
406
Репутация
78
появилась ещё одна прозьба можете в данный код добавить (паузу/старт) по нажатию клавиши Insert?


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

всё уже ненада сам получше поиска и всё нашёл
 
Верх