Что нового

Как нажать на кнопку в скрытом окне

pvnn

Осваивающий
Сообщения
305
Репутация
32
В нормальном виде (не скрытом) все работает, кнопка нажимается двумя способами.
Если запустить приложение в скрытом виде (@SW_HIDE), то кнопка не нажимается. Что я упускаю? Есть ли аналоги ControlClick для скрытого режима?

Код:
ShellExecute('c:\Program Files\LAPS\AdmPwd.UI.exe','','','',@SW_HIDE)
Sleep(300)

ControlSetText('LAPS UI','','[NAME:txtComputerName]','test') ; Данные корректно передаются
Sleep(300)

; WinSetState('LAPS UI','',@SW_SHOW) 

; Вариант 1 Работает если окно не скрыто
  ControlClick('LAPS UI','Search','[NAME:btnSearch]')

; Вариант 2 Работает если окно не скрыто
 ;ControlClick('LAPS UI','Search','[CLASS:WindowsForms10.BUTTON.app.0.141b42a_r28_ad1; INSTANCE:3]')

Sleep(300)
WinSetState('LAPS UI','',@SW_SHOW)
 

filautdinov

Знающий
Сообщения
96
Репутация
9
Перенеси окно за пределы экрана и убери с панели задач и пользуйся обычным controlclick
 

cnm

Новичок
Сообщения
58
Репутация
2
1. попробуй ид кнопки получить заранее при открытом окне и использовать его когда скроешь.
2. кликай по координатам в окне, а не по конкретному элементу.
 
Автор
P

pvnn

Осваивающий
Сообщения
305
Репутация
32
Перенеси окно за пределы экрана
За пределами экрана кнопка тоже не нажимается
Код:
WinMove('LAPS UI','',1000,1000)



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

Сделал костыльно:
-открыл в скрытом режиме;
-сделал прозрачность, при чем минимальную прозрачность (0) ставить нельзя, так же кнопка не нажимается;
-показал окно;
-считал данные.

Из-за прозрачности окно типа невидимое, но метод уж больно костыльный...
Жду еще варианты

Код:
ShellExecute('c:\Program Files\LAPS\AdmPwd.UI.exe','','','',@SW_HIDE)
Sleep(300)
WinSetTrans('LAPS UI','',10)
Sleep(300)
WinSetState('LAPS UI','',@SW_SHOW)
WinActive('LAPS UI','')
ControlSetText('LAPS UI','','[NAME:txtComputerName]','test')
Sleep(300)
ControlClick('LAPS UI','Search','[NAME:btnSearch]')
 

hedji

Продвинутый
Сообщения
409
Репутация
94
Вместо прозрачности и @SW_HIDE попробуйте @SW_DISABLE.
Мне помогло: на Win10 окно не видно, но Send в него работает.
 

InnI

AutoIT Гуру
Сообщения
4,912
Репутация
1,429
pvnn
аналоги ControlClick для скрытого режима
Код:
ControlSend('LAPS UI','','[NAME:btnSearch]','{space}')
; или
ControlCommand('LAPS UI','','[NAME:btnSearch]','SendCommandID',0xF5) ; $BM_CLICK


Если хотите вторым параметром использовать текст окна, то включите опцию поиска скрытого текста
Код:
Opt("WinDetectHiddenText", 1)
 
Автор
P

pvnn

Осваивающий
Сообщения
305
Репутация
32
InnI, спасибо большое за ответ, все работает.
Код:
ControlCommand('LAPS UI','','[NAME:btnSearch]','SendCommandID',0xF5) ; $BM_CLICK

А откуда вы берете 4 (command) и 5 (option) параметры? В справке они не перечислены.
 

InnI

AutoIT Гуру
Сообщения
4,912
Репутация
1,429
pvnn
В справке они не перечислены
Команда "SendCommandID" есть в справке и описано её действие: Эмулирует сообщение WM_COMMAND.
А коды сообщений "Command ID" зависят от элемента. Для кнопок перечень можно посмотреть в ButtonConstants.au3 (начинаются на $BM_ и $BCM_), а описание в MSDN Button Control Messages.

Фактически, работа этой строки аналогична следующему коду
Код:
#include <GuiConstants.au3>
#include <SendMessage.au3>

$hWnd = WinGetHandle('LAPS UI')
$hCtrl = ControlGetHandle($hWnd, '', '[NAME:btnSearch]')
_SendMessage($hWnd, $WM_COMMAND, $BM_CLICK, $hCtrl)
 
Верх