Войти

Показать полную графическую версию : [Архив - Часть 3] AutoIt скрипты .:[общие вопросы]:.


Страниц : 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 [73] 74 75 76 77 78

SAOPP
05-01-2009, 23:46
Тогда я не приложу ума, в чём может быть причина такого поведения, может быть из-за того, что заголовок содержит не толь SoulSeek?

AutoIt может путаться из-за двух экранов?

Creat0R
05-01-2009, 23:57
SAOPP,
А если так:

Sleep(5000)

$sTitle = "SoulSeek"

WinActivate($sTitle)
WinWaitActive($sTitle, "", 5)

If WinActive($sTitle) Then
$iLeft_Min_Button = 70 ;Указывает отступ кнопки сворачивания с правой стороны у окна
$aWin_Pos = WinGetPos($sTitle)

;$iOld_Opt_MCM = Opt("MouseCoordMode", 0)
$aMouse_Pos = MouseGetPos()

MouseClick("Main", $aWin_Pos[0]+$aWin_Pos[2]-$iLeft_Min_Button, $aWin_Pos[1]+10, 1, 0)
;Opt("MouseCoordMode", $iOld_Opt_MCM)

MouseMove($aMouse_Pos[0], $aMouse_Pos[1], 0)
EndIf

может быть из-за того, что заголовок содержит не толь SoulSeek? »
Скрипт обрабатывает только окно с заголовком в котором содержиться «SoulSeek».

AutoIt может путаться из-за двух экранов? »
Не приходилось сталкиваться, но всякое может быть...

SAOPP
06-01-2009, 00:04
Курсор мигает там где находится кнопка минимизировать, но ничего не происходит...

Ага это было из-за отступа, он был почти по середине между минимизировать и развернуть. Поставил 72, сам перешёл в окну Сусла и свернул, чужие теперь не сворачивает, ещё щас поиграюсь с отступом, спасибо ;)

Creat0R
06-01-2009, 00:11
это было из-за отступа »
Я же говорил что это не надёжный метод :biggrin:

SAOPP
06-01-2009, 00:12
Хаха, нет же, сворачивает любое окно!

Creat0R
06-01-2009, 00:35
сворачивает любое окно! »
Тест скрипт:

$sTitle = "SoulSeek"

WinActivate($sTitle)
WinWaitActive($sTitle, "", 5)

If WinActive($sTitle) Then MsgBox(64, "Test", "Active Window Title: " & WinGetTitle("[Active]"))

Что выдаёт?

SAOPP
06-01-2009, 00:39
Щас провертю. Я думаю может быть указать как окно его индефикатор?

Creat0R
06-01-2009, 00:40
Я на Полезное сообщение нажимал уже не раз, а у меня написано - благодарности 0 »
Это у того у кого вы нажали добавляется благодарность, под вашим профилем отображаются благодарности выраженные вам :) - Подробнее (http://forum.oszone.net/thread-65382.html)

SAOPP
06-01-2009, 00:41
Выдаёт текущий заголовок окна...

Причём всегда выдаёт только Суслика, даже если он в трее...

Creat0R
06-01-2009, 00:51
Выдаёт текущий заголовок окна...
Причём всегда выдаёт только Суслика »
Вот тут я понять не смог, конкретно, какой заголовок возвращается? Вместо MsgBox можно подставить ClipPut(WinGetTitle("[Active]")), тогда заголовок попадёт сразу в буфер обмена :)

Дубль №3:

Sleep(5000)

$sTitle = "SoulSeek"

If Not BitAND(WinGetState($sTitle), 2) Then Exit

WinActivate($sTitle)
WinWaitActive($sTitle, "", 3)

If BitAND(WinGetState($sTitle), 8) Then
$iLeft_Min_Button = 70 ;Указывает отступ кнопки сворачивания с правой стороны у окна

$aWin_Pos = WinGetPos($sTitle)
$aMouse_Pos = MouseGetPos()

MouseClick("Main", $aWin_Pos[0]+$aWin_Pos[2]-$iLeft_Min_Button, $aWin_Pos[1]+10, 1, 0)
Sleep(10)
MouseMove($aMouse_Pos[0], $aMouse_Pos[1], 0)
EndIf

P.S
Сколько примерно времени скрипт ожидает прежде чем свернуть окно? Если около 10-ти секунд значит проблема в распознавании окна, но возможно тут ошибка (баг?) в функции WinActive...

SAOPP
06-01-2009, 01:06
Вот тут я понять не смог, конкретно, какой заголовок возвращается? Вместо MsgBox можно подставить ClipPut(WinGetTitle("[Active]")), тогда заголовок попадёт сразу в буфер обмена »
Заголовок всегда окна Суслика.

Ну теперь вроде бы сворачивает ТОЛЬКО СС. Утром ещё потестирую, спасибо за возьню, ещё отпишу ;)

Creat0R
06-01-2009, 01:26
Заголовок всегда окна Суслика »
Нашёл вообщем багу в WinActive (или в WinActivate), возвращает 1 если скрытое окно активируется, нужно зарепортить...

#include <GuiConstants.au3>

GUICreate("Test GUI", 300, 200)
GUISetState(@SW_HIDE)

$sTitle = "Test GUI"
WinActivate($sTitle)

$IsActive_1 = (WinActive($sTitle) = 1)
$IsActive_2 = (BitAND(WinGetState($sTitle), 8) = 8)

;Окно то скрытое, как оно может быть активно?
ConsoleWrite("Win Is Visible: " & (BitAND(WinGetState($sTitle), 2) = 2) & @CRLF)
ConsoleWrite("Win Is Active (WinActive Method): " & $IsActive_1 & @CRLF)
ConsoleWrite("Win Is Active (WinGetState Method): " & $IsActive_2 & @CRLF)

Maza Faka
06-01-2009, 11:47
Creat0R, Нашёл вообщем багу в WinActive (или в WinActivate), возвращает 1 если скрытое окно активируется »
Почему бага? Если окно не видимо это ещё не значит, что оно не может быть активным (находиться в самом верху Z-последовательности)
#include <GuiConstants.au3>

$sTitle = "Test GUI"

GUICreate($sTitle, 300, 200)
GUISetState(@SW_HIDE)

WinActivate($sTitle)

MsgBox(0, "Test", "Deactivate window")

$IsActive_1 = (WinActive($sTitle) = 1)
$IsActive_2 = (BitAND(WinGetState($sTitle), 8) = 8)

;Окно то скрытое, как оно может быть активно?
ConsoleWrite("Win Is Visible: " & (BitAND(WinGetState($sTitle), 2) = 2) & @CRLF)
ConsoleWrite("Win Is Active (WinActive Method): " & $IsActive_1 & @CRLF)
ConsoleWrite("Win Is Active (WinGetState Method): " & $IsActive_2 & @CRLF)
:)

SAOPP
06-01-2009, 13:29
Ну по сути да, оно то скрыто, но оно то есть... Дак что мне делать? :)

Creat0R
06-01-2009, 13:42
Почему бага? Если окно не видимо это ещё не значит, что оно не может быть активным (находиться в самом верху Z-последовательности) »
Логично, но имхо, не правильно. Тогда видимо нужно обновить доку (справку) на эту тему, у меня давно была похожая проблема с невозможностью работать с GUI окнами после приминения WinActivate() (на скрытом окне), теперь я понял почему, нужно было окно сначала сделать видимым.
Также в справке есть упоминание об @extended, но не пишется что именно означает тот или инной код:


If Not ProcessExists("Notepad.exe") Then
WinActivate("[CLASS:Notepad]")
ConsoleWrite("@extended = " & @extended & @CRLF) ;@extended = 0, window not exists, therefore it's can not be active :)

Run(@WindowsDir & "\Notepad.exe")
EndIf

WinWait("[CLASS:Notepad]")

WinActivate("[CLASS:Notepad]")
ConsoleWrite("@extended = " & @extended & @CRLF) ;@extended = 1, window was *active*

WinSetState("[CLASS:Notepad]", "", @SW_MINIMIZE)

WinActivate("[CLASS:Notepad]")
ConsoleWrite("@extended = " & @extended & @CRLF) ;@extended = 2, window was *not* active (minimized)

Дак что мне делать? »
Использовать Дубль №3 (http://forum.oszone.net/post-998376.html#post998376)? :unsure:

Аляксандр
06-01-2009, 14:07
Добрый всем день подскажите пожалусто:) Возможно ли написать скрипт который будет При его запуске Будет ставить рабочую группу:) И имя компютера в сети:) а есчо Vpn Соединение:) http://www.autoitscript.com/forum/index.php?showtopic=33005
прочитав папробовал написать ничего неполучается(

SAOPP
06-01-2009, 14:10
Creat0R, ну так собсно и делаю :)

266903582
06-01-2009, 14:15
Жмем на ссылку в программе, она запускает браузер по умолчанию с параметром: -url "http://www.wtf.ru/" -requestPending
Все проходит гладко.
Вместо браузера кладем свою программу и все произойдет как в оригинальном случае, кроме одной неприятной мелочи. Программа-отправитель обязательно ругнется: "file not found", хотя приложение будет запущено с теми же параметрами. Есть подозрение что браузер на переданные параметры чем-то отвечает. Поиск бесплоден. Проблема в принципе чисто эстетическая, все работает, хоть и приходится гасить коллекцию сообщений об ошибках, но хочется сделать по человечески...

RAMzor
06-01-2009, 15:32
Здрасте всем!
Это мой первый пост и сразу вопрос:
Почему у меня не работает подсказка GUICtrlSetTip(), что я делаю не так?

#include <GUIConstants.au3>
#include <StaticConstants.au3>
;~ #include <WindowsConstants.au3>

GUICreate("My GUI", 250, 150)
$Btn1 = GUICtrlCreateButton("ON", 10, 10, 50)
$Btn2 = GUICtrlCreateButton("OFF", 10, 40, 50)
GUISetState(@SW_SHOW)

$Label = GUICtrlCreateLabel("Test", 70, 45, 53, 15)
GUICtrlSetStyle(-1, $SS_GRAYFRAME)

While 1
Switch GUIGetMsg()
Case $GUI_EVENT_CLOSE
ExitLoop
Case $Btn1
GUICtrlSetStyle($Label, 0)
GUICtrlSetBkColor($Label, 0xFFFF00)
GUICtrlSetTip($Label, "My TIP")
Case $Btn2
GUICtrlSetStyle(-1, $SS_GRAYFRAME)
EndSwitch
WEnd
GUIDelete()

Maza Faka
06-01-2009, 15:33
Логично, но имхо, не правильно »
Почему?

Также в справке есть упоминание об @extended, но не пишется что именно означает тот или инной код »
Может быть в @extended сохраняется состояние окна перед активизацией?

Почему у меня не работает подсказка GUICtrlSetTip(), что я делаю не так? »
Хмм... похоже на баг, если не использовать функцию GUICtrlSetStyle, то ToolTip срабатывает.

Creat0R
Пользуясь случаем, хочу спросить, как зарепортить баг на офф. форуме?




© OSzone.net 2001-2012