Компьютерный форум OSzone.net  

Компьютерный форум OSzone.net (http://forum.oszone.net/index.php)
-   AutoIt (http://forum.oszone.net/forumdisplay.php?f=103)
-   -   Class вместо Title (http://forum.oszone.net/showthread.php?t=133123)

DmitryOlenin 25-02-2009 17:43 1048454

Class вместо Title
 
Вроде поиском не нашёл решения вопроса.

Ситуация такая:
Есть окно, название которого я, условно говоря, не знаю (система может быть на разных языках).
В мануале написано, что при Opt("WinTitleMatchMode",4) можно использовать вместо Title окна его Class.

Например так:
Код:

Opt("WinTitleMatchMode",4)
Run ("RUNDLL32.EXE shell32.dll,Control_RunDLL sysdm.cpl,,2")
Sleep(2000)
WinActivate("[CLASS:#32770]", "")
Sleep(2000)
WinClose("[CLASS:#32770]", "")

Не работает... При этом по Title всё без проблем активируется.
Класс этот я достал при помощи WindowInfo. Пробовал без знака # - не помогло.

Подскажите, в чём собака порылась?

beve 25-02-2009 18:37 1048507

Как я понимаю этот класс не указывает напрямую на это системное окно, если запущены другие системные окна. Вот после этого твоего кода, но с MsgBoxом о названии окна по классе, я сначала выключил одно окно стороннее, потом другое, а на третий раз msgBox выдал название Свойства системы и соответственно только тогда окно закрылось.
Код:

Opt("WinTitleMatchMode",4)
Run ("RUNDLL32.EXE shell32.dll,Control_RunDLL sysdm.cpl,,2")
Sleep(2000)
$a=WinGetTitle("[CLASS:#32770]", "")
MsgBox(0,"",$a)
WinActivate("[CLASS:#32770]", "")
Sleep(200)
WinClose("[CLASS:#32770]", "")

Если бы в других окнах, каких то программ, то наверно прокатило бы...

DmitryOlenin 25-02-2009 19:52 1048577

Удивлён :) Хитрая штука эти окна виндовых свойств...
А есть ли всё же способ найти именно то самое, искомое окно в данном случае?

beve 25-02-2009 20:38 1048655

Вот нашел на сайте здешнего гуру по Autoit библиотеку WinGetTitleEx.au3 и вот ссылка, по которой можна скачать http://creator-lab.ucoz.ru/load/3-1-0-19
и вод код с использованием этой библиотеки:
Код:

#Include <WinGetTitleEx.au3>
$Pid_okna=Run ("RUNDLL32.EXE shell32.dll,Control_RunDLL sysdm.cpl,,2")
Sleep(2000)
$title_okna=
_WinGetTitleByPID($Pid_okna)
;MsgBox(0,"проба",$title_okna)
WinActivate
($title_okna, "")
Sleep(2000)
WinClose($title_okna, "")


Creat0R 25-02-2009 23:59 1048858

Цитата:

Цитата DmitryOlenin
В мануале написано, что при Opt("WinTitleMatchMode",4) можно использовать вместо Title окна его Class »

Во-первых манул старый, эта опция уже не нужна.
А во-вторых, «#32770» это класс многих системных диалогов, они могут быть скрыты, и функция обратиться к ним. Нужно использовать ещё и параметр $Text для более точного поиска окна.

И ещё, попробуй так (перед использованием «WinGetTitleEx.au3»):

Код:

Run("RUNDLL32.EXE shell32.dll,Control_RunDLL sysdm.cpl,,2")

WinWait("[CLASS:#32770]", "Update")
WinActivate("[CLASS:#32770]", "Update")
WinWaitActive("[CLASS:#32770]", "Update")

WinClose("[CLASS:#32770]", "Update")



Время: 08:27.

Время: 08:27.
© OSzone.net 2001-