Что нового

Возможна ли работа с GUI программами без логина пользователя

A

abeltsov

Гость
Мне интересно можно ли сделать поставленную мне задачу проще, а иначе -
Можно ли с помощью autoit запустить графическое приложение, щелкать кнопки, вводить данные и все это без входа в систему(иначе без логина)?
Именно без входа в систему - т.к. текущее его требует.
Я реализую такой функционал на C#-winapi и это работает.

BR
 

Belfigor

Модератор
Локальный модератор
Сообщения
3,608
Репутация
941
Re: Может ли autoit...

Присоединяюсь к вопросы. Тоже интересно узнать.
 

CreatoR

Must AutoIt!
Команда форума
Администратор
Сообщения
8,671
Репутация
2,481
Re: Может ли autoit...

Если на C# с WinAPI работает, то велеки шансы что и на AutoIt'е сработает.
 

AWhite

Новичок
Сообщения
5
Репутация
0
Привет все и АДМИН.
1 - еле нашёл тему. название вполне информационное!
2 - Уважаемый АЛЛ. Вопрос такой же как и сабж. попробую уточнить
есть ПО *.exe , параметров запуска не имеет. можно ли его установить без входа пользователя в Windows? я имею ввиду средствами Autoit, или любыми другими, кто посоветует что либо?
Спасибо!
 

AWhite

Новичок
Сообщения
5
Репутация
0
Мой вопрос актуален. Добавлю кое что:

Естьт скрипт

Код:
Run ( 'C:\Soft\PO.exe')
		; открываем файл для записи логов
	$file = FileOpen("C:\script\PO\log.txt", 1)
	FileWriteLine($file, "Запустились")
	If $file = -1 Then
		MsgBox(0, "Error", "Unable to open file C:\script\PO\log.txt.")
		Exit
	EndIf

FileWriteLine($file, "Запустились")

; Ожидаем открытия окна Setup - POmanager
$rez = WinWait ( 'Setup - POmanager' )
SendKeepActive ( 'Setup - POmanager' )
	If $rez = 0	Then
			FileWriteLine($file, "==ОШИБКА== Не могу дождаться окна Setup - POmanager. [Welcome to the POmanager]")
			MsgBox(0, "Error", "Не могу дождаться окна Setup - POmanager. [Welcome to the POmanager]")
			Exit
				Else
				FileWriteLine($file, "Дождались окна Setup - POmanager [Welcome to the POmanager]")
	EndIf


; Определяем ID  Setup - POmanager [Welcome to .....]  окна для дальнейшего управления этим окном через ID
$handle = WinGetHandle("Setup - POmanager", "Welcome to the POmanager")
SendKeepActive($handle)
If  $handle = "" Then
    FileWriteLine($file, "==ОШИБКА==Не могу получить handler окна [Welcome to .....]")
	MsgBox(4096, "Error", "Не могу получить handler окна [Welcome to .....]")
	Exit
		Else
			FileWriteLine($file, "Получили HAndler окна [Welcome to the POmanager]")

				If ControlClick($handle, '', '[CLASS:TNewButton; INSTANCE:1]') = 1 Then
			;If ControlSend($handle, "","", "{ENTER}") = 1 Then
						FileWriteLine($file, "Нажали Далее в окне [Welcome to the POmanager]")
					Else
						FileWriteLine($file, "==ОШИБКА== НЕ Нажали Далее в окне [Welcome to the POmanager]")
						Exit
			EndIf


EndIf


;----------------



; Ожидаем открытия окна Setup - POmanager - License Agreement
FileWriteLine($file, "[License Agreement]")
$rez = WinWait ( 'Setup - POmanager' )
	If $rez = 0	Then
			MsgBox(0, "Error", "Не могу дождаться окна Setup - POmanager. [Welcome to the POmanager]")
			Exit
				Else
				FileWriteLine($file, "Дождались окна Setup - POmanager [License Agreement]")
	EndIf

; Определяем ID  Setup - POmanager [License Agreement]  окна для дальнейшего управления этим окном через ID
$handle = WinGetHandle("Setup - POmanager", "License Agreement")
If  $handle = "" Then
    MsgBox(4096, "Error", "Не могу получить handler окна [License Agreement]")
	FileWriteLine($file, "==ОШИБКА==Не могу получить handler окна [License Agreement]")
	Exit
		Else
			FileWriteLine($file, "Получили HAndler окна [License Agreement]")
sleep(1000)
			If ControlClick($handle, '', '[CLASS:TNewRadioButton; INSTANCE:1]') = 1 AND ControlClick($handle, '', '[CLASS:TNewButton; INSTANCE:2]') = 1 Then
						FileWriteLine($file, "Согласились с лицензией и нажали ДАЛЕЕ в [License Agreement]")

					Else
						MsgBox(4096, "Error", "==ОШИБКА== НЕ Нажали RadioButton (Сгласен) или ДАЛЕЕ в окне [License Agreement]")
						FileWriteLine($file, "==ОШИБКА== НЕ Нажали RadioButton (Сгласен) или ДАЛЕЕ в окне [License Agreement]")
						Exit
			EndIf


EndIf

Exit


Компилирую его в EXE, порверяю - работает, добавляю его в "шедуллер"
Задание висит долго и без результатов.
как только я его прерываю в лог пишется
....
Запустились
Дождались окна Setup - POmanager [Welcome to the POmanager]
==ОШИБКА==Не могу получить handler окна [Welcome to .....]
.....

Видать
Код:
$handle = WinGetHandle("Setup - POmanager", "Welcome to the POmanager")

не отрабатывает

Есть у кого идеи????
Очень нужно, помогите хоть идеей куда копать
 

ynbIpb

Скриптер
Сообщения
399
Репутация
110
тут вероятно нужно запускать скрипт как службу и стиль поверх всех окон.
 

AWhite

Новичок
Сообщения
5
Репутация
0
Продолжая темы новый вопрос.
- Без работы ГУЯ я отловил Handle моего окна по Title. Кая я могу получить остальную инфу об окне? К примеру ту, что даёт Au3Info.exe
- ПОчему при запуске exe в фоновом режиме (без логина клиента) функция WinList показывает, что у меня 1 окно setup - "POmanager" а второе "sestup"
 

timsky

Осваивающий
Сообщения
93
Репутация
28
AWhite
А в чем проблема залогинить пользователя? Я тоже как-то бился с этим явлением, в итоге проще и быстрее выставить на серваке авто-логин юзера с последующим локом. И коннектица к серваку через радмин или аналоги, а не remote desktop.
 

AWhite

Новичок
Сообщения
5
Репутация
0
ynbIpb - А можно по точней про сервис и по верх всех окон.
я видел - http://serverfault.com/questions/47431/windows-running-an-autoit-script-to-launch-a-gui-app-on-a-server-when-no-one
Вы сами делали так?


Если мне придётся логинить пользователя то смысл полной автоматизации пропадает.
задача установить софт без логина(или по шедуллеру)

Этоя явление с окнами? Каков был результат кроме того, что выбор логина.
Я заметил что разные GUI exe по разному себя ведут.

Уточно про "без логина клиента" я имею ввиду то, что пользователь не будет вводить имя и пароль в системе, а к примеру повешу скрипт в шедуллер(назначенные задания) и он будет выполняться под учётной записью, но без отображения GUI
 

AWhite

Новичок
Сообщения
5
Репутация
0
Сам отвечу, вроде решил проблему.
убедился пока на 90% что задача решаема.
Что косается вопроса про окна с одинаковым тайтлом,
по старту скрипта из шедулера, появляется 2 окна с одинаковыми тайтлами.
Winwait ("title","text") не отлавливает окно с text.для этого нужно сделать так
Opt("WinDetectHiddenText", 0)
WinWait ( "title" [, "text" [, timeout]] )
мне вроде помогло
 

w3d

Новичок
Сообщения
84
Репутация
3
AWhite сказал(а):
- Без работы ГУЯ я отловил Handle моего окна по Title. Кая я могу получить остальную инфу об окне? К примеру ту, что даёт Au3Info.exe
На каком-то форуме по AutoIT я уже поднимал этот вопрос и мне даже ответили :smile:

нашел http://forum.oszone.net/post-844021.html#post844021
 
Верх