Что нового

[Окна, Диалоги] Функция Win* для окон с изменяющимся названием.

Math

Новичок
Сообщения
85
Репутация
1
К примеру, есть:

Код:
WinWaitActive ($NameVideo & $WinMPC)
;где
;$WinMPC = " - Media Player Classic Homecinema - v1.3.1249.0"
;$NameVideo = "Forsagh-5.mkv"


Но, если сделать так, то скрипт не реагирует на активизацию окна с именем Forsagh-5.mkv - Media Player Classic Homecinema - v1.3.1249.0.
Как сделать так, что бы реагировал?

При этом, просто
Код:
WinWaitActive ($WinMPC)

В данном случае не подойдёт.
 

madmasles

Модератор
Глобальный модератор
Сообщения
7,790
Репутация
2,321
Math [?]
Как сделать так, что бы реагировал?
Код:
#include <Array.au3>

$aListMPC = WinList('[Class:MediaPlayerClassicW]')
_ArrayDisplay($aListMPC)
И дальше обращайтесь к окну по Handle.
 
Автор
M

Math

Новичок
Сообщения
85
Репутация
1
madmasles, не совсем понял, что происходит при этом.
Можете привести пример с моими переменными?
 

gregaz

AutoIT Гуру
Сообщения
1,166
Репутация
299
Если я правильно понял вопрос, то так можно:
Код:
Opt('WinTitleMatchMode',2); 2 = Соответствие любой подстроке в заголовке

[email protected] & "\MPlayer Classic\mplayerc.exe"

ShellExecute($sWinMPC)

$hWnd= WinWait ( "Media Player Classic") 

ConsoleWrite ("$hWnd = " & $hWnd & @LF)
 

Zaramot

I ♥ AutoIt
Сообщения
1,160
Репутация
660
Узнаём заголовок окна по его процесу:
Код:
Func _Process2Win($pid)
    if isstring($pid) then $pid = processexists($pid)
    if $pid = 0 then return -1
    $list = WinList()
    for $i = 1 to $list[0][0]
        if $list[$i][0] <> "" AND BitAnd(WinGetState($list[$i][1]),2) then
            $wpid = WinGetProcess($list[$i][0])
            if $wpid = $pid then return $list[$i][0]
        EndIf
    next
    return -1
endfunc
 
Автор
M

Math

Новичок
Сообщения
85
Репутация
1
gregaz, Zaramot, это в данном случае не подойдёт.

Опишу подробнее.

Cначала окно "Media Player Classic Homecinema - v1.3.1249.0" активно.
Затем открывается файл, и заголовок окна изменяется на "Forsagh-5.mkv - Media Player Classic Homecinema - v1.3.1249.0".
Нужно, что бы при изменении заголовка окна с "Media Player Classic Homecinema - v1.3.1249.0" на "Forsagh-5.mkv - Media Player Classic Homecinema - v1.3.1249.0" скрипт реагировал, и выполнял следующие действия. А в конце закрывал окно "Forsagh-5.mkv - Media Player Classic Homecinema - v1.3.1249.0".

При этом, всё выполняется в цикле for, и значение переменной $NameVideo с каждым разом меняется.
 

gregaz

AutoIT Гуру
Сообщения
1,166
Репутация
299
Мне кажется ты просто забываешь о наличии в заголовке : " - "
Код:
$hWnd= WinWait ( $NameVideo & " - " & $WinMPC, '', 3)



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

Ты нам задаешь задачу "на пальцах".
Тебе отвечают также на "на пальцах".
Так можно до утра играться.
Как в анекдоте про двух глухих...

OffTopic:

Встречаются две глухие старушкки.
Одна спрашивает : " Ты, что из бани ?"
Другая отвечает : " Нет, я из бани.
Ей в ответ : " А я думала , ты из бани.


Не проще ли привести готовый короткий пример (пусть не работающий).
Тебе бы его давно поправили.
 

madmasles

Модератор
Глобальный модератор
Сообщения
7,790
Репутация
2,321
Math,
Код:
Global $hWinMPC

HotKeySet('{Esc}', '_Exit');выход
HotKeySet('{F11}', '_My_Func');посмотреть заголовок
HotKeySet('{F10}', '_My_Func_1');свернуть-развернуть

$aListMPC = WinList('[Class:MediaPlayerClassicW]')
If Not $aListMPC[0][0] Then
	MsgBox(16, 'Error', 'Нет окна MPC')
	Exit
ElseIf $aListMPC[0][0] > 1 Then
	MsgBox(16, 'Error', 'Оставьте одно окно MPC и перезапустите скрипт')
	Exit
EndIf
$hWinMPC = $aListMPC[1][1]
$aListMPC = 0

While WinExists($hWinMPC)
	Sleep(50)
WEnd

Func _My_Func()
	MsgBox(64, 'Title:', WinGetTitle($hWinMPC))
EndFunc   ;==>_My_Func

Func _My_Func_1()
	If BitAND(WinGetState($hWinMPC), 16) Then
		WinSetState($hWinMPC, '', @SW_RESTORE)
	Else
		WinSetState($hWinMPC, '', @SW_MINIMIZE)
	EndIf
EndFunc   ;==>_My_Func_1

Func _Exit()
	If WinExists($hWinMPC) Then WinClose($hWinMPC)
	Exit
EndFunc   ;==>_Exit
 

gregaz

AutoIT Гуру
Сообщения
1,166
Репутация
299
В результате madmasles"у пришлось составлять пример.
И еще не факт,что тебя он устроит
 

AZJIO

Меценат
Меценат
Сообщения
2,805
Репутация
1,168
Math
Попробуйте разобраться в таком варианте:

Код:
$WinMPC=WinList("[REGEXPTITLE:.*Media Player Classic Home Cinema.*]")
MsgBox(0, 'Message', $WinMPC[1][0])
WinWaitActive($WinMPC[1][0])


Но всё же лучше использовать Class как показал madmasles.

не совсем понял, что происходит при этом
Возвращает массив в котором указано заголовок окна и его дескриптор. А так как этот плеер не позволяет запустить более одного окна, то в результате будет один элемент в массиве, которое далее подставлять в свои функции.
 

AZJIO

Меценат
Меценат
Сообщения
2,805
Репутация
1,168
gregaz
Ну да, если запуск с ярлыка, но обычно клик по файлу и открывает в том же окне взамен предыдущего.
Кстати пример поправил.
 
Автор
M

Math

Новичок
Сообщения
85
Репутация
1
Разобрался. Всем спасибо за помощь. :smile:
 

gregaz

AutoIT Гуру
Сообщения
1,166
Репутация
299
Math [?]

Так ты бы рассказал все же как решил проблему.

Для завершения темы желательно показать правильное решение, или хотя бы сказать в чем была ошибка.

Чтобы в будущем этот вопрос не возникал удругих.
 

Garrett

Модератор
Локальный модератор
Сообщения
3,999
Репутация
965
gregaz [?]
Так ты бы рассказал все же как решил проблему.
Да там нечего решать, вы сами ответили уже на тривиальный вопрос, человек просто не мог грамотно (с тех. стороны) задать вопрос :smile:
Код:
Opt('WinTitleMatchMode', 2)
$sFile = "The_Bourne_supremacy.avi"
$sMPC = " - Media Player Classic Homecinema"
WinActivate($sFile & $sMPC)
 

madmasles

Модератор
Глобальный модератор
Сообщения
7,790
Репутация
2,321
Garrett
У меня не такой заголовок.
 

madmasles

Модератор
Глобальный модератор
Сообщения
7,790
Репутация
2,321
Garrett [?]
Это наверно зависит от версии
MPC HC обновляется довольно часто, не могу проверить, но, класс окна не должен меняться, а принцип изменения заголовка, похоже, меняется. ИМХО, лучше к нему обращаться по классу.
 

Garrett

Модератор
Локальный модератор
Сообщения
3,999
Репутация
965
madmasles [?]
ИМХО, лучше к нему обращаться по классу.
Согласен, но как я понял автор хочет переключаться между несколькими плеерами. IMHO тогда лучше по PID обращаться.
 
Верх