Что нового

Клик в чужое окно, как улучшить код?

art22

Новичок
Сообщения
26
Репутация
1
Здравствуйте. Дня 2 знаком с данным скриптом и очень доволен. Буду изучать дальше.

Задача данного скрипта захватить чужое окно и нажать на кнопку ОК. Все отлично работает Но.

1) В Вин 10 не работает. Как Исправить?
2)В скрипте использовал функцию DO, чтобы повторял данную функцию 1500 раз пока окно не откроется и не нажмет на ОК. Так как окно включается через 30-80 сек. по колхозский вышел, но работает. Как можно просто сканировать процессы и как выйдет окно нажмет на ок.?
OffTopic:

Run("setup.exe")
#NoTrayIcon
#include <MsgBoxConstants.au3>
Local $i = 0
Do

Sleep(100)
If WinExists("[CLASS:TfmIdNotification]") Then
ControlClick('[CLASS:TfmIdNotification]', '', '[CLASS:TButton; INSTANCE:2]')
EndIf

$i = $i + 1
Until $i = 1500


--

Проверил в другом windows 7 не работает( в чем может быть причина?
 

hedji

Продвинутый
Сообщения
409
Репутация
94
Код:
Run(@ScriptDir & "\setup.exe") ;запуск setup.exe, если он лежит в одной папке со скриптом, иначе указать полный путь к setup.exe
WinWait("[CLASS:TfmIdNotification]") ;ожидание, пока не появится окно
ControlClick('[CLASS:TfmIdNotification]', '', '[CLASS:TButton; INSTANCE:2]')
 
Автор
A

art22

Новичок
Сообщения
26
Репутация
1
Спасибо! Так то лучше! Я немного улучшил код....
Код:
#NoTrayIcon
#RequireAdmin
#include <MsgBoxConstants.au3>

Run("setup.exe")

WinWait("[CLASS:TfmIdNotification]") 
ControlClick('[CLASS:TfmIdNotification]', '', '[CLASS:TButton; INSTANCE:2]')

#include <SysTray_UDF.au3>
$iIndex = _SysTrayIconIndex('setupe.exe')
_SysTrayIconRemove($iIndex)

Компилировал в Exe
В XP отлично работает. В 7 У меня работает. Тестил в другом 7 не работает. в Виндовс 10 НЕ работает! как можно исправить данные нюансы? Может библиотеку надо прикрепить к exe?
 

hedji

Продвинутый
Сообщения
409
Репутация
94
На каком моменте не работает?
Вообще скрипт не запускается?
Не запускает setup.exe?
Не находит нужное окно?
Не кликает?
 
Автор
A

art22

Новичок
Сообщения
26
Репутация
1
Скрипт запускается. Устанавливает программу. вроде пытается нажать на кнопку но не получается. параметры кнопки ОК
 

Вложения

  • кликает.jpg
    кликает.jpg
    37.3 КБ · Просмотры: 10
Автор
A

art22

Новичок
Сообщения
26
Репутация
1
Как? мы же ищем окно по классу CLASS:TfmIdNotification. что изменился? не понимаю
 
Автор
A

art22

Новичок
Сообщения
26
Репутация
1
симуляцию клика пробовал. Не работает клик. Работает только верхний вариант. но не во всех виндовсах. в ХП отлично работает
 

InnI

AutoIT Гуру
Сообщения
4,912
Репутация
1,429
art22
Код:
WinWaitActive("[CLASS:TfmIdNotification]", "Подробнее")

На Win7 и выше, скорее всего, нужны права администратора
Код:
#RequireAdmin
 
Автор
A

art22

Новичок
Сообщения
26
Репутация
1
Права админа стоят. Запускал и правой кнопкой вышки от имени....

Код:
WinWaitActive("[CLASS:TfmIdNotification]", "Подробнее")

ОК надо вообще... Данная строка должен быть нажать на ок? Если да то даже на моем ПК не сработал. Работает этот код
Код:
ControlClick('[CLASS:TfmIdNotification]', '', '[CLASS:TButton; INSTANCE:2]')
 

InnI

AutoIT Гуру
Сообщения
4,912
Репутация
1,429
art22
Данная строка должен быть нажать на ок?
Данная строка ждёт активное окно. Просто замените в своём коде строку
Код:
WinWait("[CLASS:TfmIdNotification]")
на
Код:
WinWaitActive("[CLASS:TfmIdNotification]", "Подробнее")


А есть ли вообще необходимость нажатия ОК? Может достаточно просто закрыть окно через
Код:
WinClose()
 
Автор
A

art22

Новичок
Сообщения
26
Репутация
1
если закрыть установка полностью не получается.

Даже пробовал скрыть, не скрывается. Только кнопки скрываются.

Код:
$hWnd = WinWait('{970C393F-F611-4722-B829-D8BA68B9C9AF}', '', 1)
If Not $hWnd Then
    MsgBox(4096, 'Сообщение', 'Окно не найдено, завершаем работу скрипта')
    Exit
 EndIf
 ControlHide($hWnd, '', '{970C393F-F611-4722-B829-D8BA68B9C9AF}') ; скрывает элемент


Странно. Какая то защита стоит видимо. Думаю проще было бы на делпи что нибудь написать)

По мимо данного окна функция удаления иконки не работает. в xp и на моем все отлично работает
Код:
#include <SysTray_UDF.au3>
$iIndex = _SysTrayIconIndex('setupe.exe')
_SysTrayIconRemove($iIndex)
 

InnI

AutoIT Гуру
Сообщения
4,912
Репутация
1,429
art22
Пробуйте
Код:
#RequireAdmin

Run("setup.exe")

$hWnd = WinWait("[CLASS:TfmIdNotification]", "Подробнее")
WinActivate($hWnd)
WinWaitActive($hWnd)
$Enabled = ControlCommand($hWnd, "", "TButton2", "IsEnabled")
If @error Then Exit MsgBox(0, "Error", "Кнопка не найдена")
If Not $Enabled Then Exit MsgBox(0, "Error", "Кнопка заблокирована")
$Res = ControlClick($hWnd, "", "TButton2")
If Not $Res Then Exit MsgBox(0, "Error", "Проблема с кликом :(")
 
Автор
A

art22

Новичок
Сообщения
26
Репутация
1
все так же. У меня и в ХP работает а в других не работает, отключал даже все защиты Windows. Ошибок не выдает. кнопку вроде он находит. ни одно одно не вылезло...
 

InnI

AutoIT Гуру
Сообщения
4,912
Репутация
1,429
art22
Замените две последние строки
Код:
$Res = ControlClick($hWnd, "", "TButton2")
If Not $Res Then Exit MsgBox(0, "Error", "Проблема с кликом :(")
на эти
Код:
Opt("MouseCoordMode", 2)
$Pos = ControlGetPos($hWnd, "", "TButton2")
MouseClick("Left", $Pos[0] + 10, $Pos[1] + 10)
Курсор мыши перемещается на кнопку?


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

Или попробуйте заменить ControlClick на
Код:
ControlSend($hWnd, "", "TButton2", "{space}")
 
Автор
A

art22

Новичок
Сообщения
26
Репутация
1
Все так же. У меня и в ХP работает курсор наводит на ок. и нажимает пробел. А в других не работает.

Само окно необычное. Она постоянна активна и поверх всех окон... его нельзя перемещать...Просто нажать на окно и нажать на энтер и т п не работает, надо именно на кнопки нажать
 
Автор
A

art22

Новичок
Сообщения
26
Репутация
1
RMS один клик, удаленный доступ. В оф сайте можете скачать демо версию. потом Инструменты -Конфигурации... дальше берется сам сервер и настраивается...после инстилляции сервера выходит данное окно... Его нужно установить в 500 офисных ПК. по этому нужно чтобы все было тихо и одним разом
 
Последнее редактирование:

Garrett

Модератор
Локальный модератор
Сообщения
3,999
Репутация
967
art22
*click*
Предупреждение За нарушение правил форума (пункт В.11):
Любые отрывки AutoIt кода необходимо заключать в тег [autoit]
autoit.gif
(подробнее), а обычный код соответственно в тег [code]
code.gif
(подробнее). Также большие выдержки текста помещайте под тег [spoiler]
spoiler.gif
(подробнее), там где это поддерживается естественно. Как в случае с названием темы, также короткое и эргономичное сообщение привлекает больше внимания, и шансы на получение конкретного ответа увеличиваются.


С уважением, ваш Глобальный модератор.
 
Верх