Что нового

[Окна, Диалоги] Скрыть консольное окно запускаемое из функции

prokazzza

Новичок
Сообщения
160
Репутация
2
Подскажите как скрыть окно, которое использует такую функцию:

Код:
While 1
    $nMsg = GUIGetMsg()
    Switch $nMsg
        Case $GUI_EVENT_CLOSE
            Exit
            
        Case $Button1
            $Program = GUICtrlRead($Combo1)
            $Key1 = GUICtrlRead($Combo4)
            $Key2 = GUICtrlRead($Combo3)
            $Key3 = GUICtrlRead($Combo6)
            $Key4 = GUICtrlRead($Combo9)
            RunKey($Program, $Key1, $Key2, $Key3, $Key4)
    EndSwitch
WEnd

Func RunKey($Program, $Key1, $Key2, $Key3, $Key4)
    Switch $Program
        Case $key1
            $Program = (@ScriptDir & '\server\server1.exe')
            If $Key1 = $Total1 Then $Key11 = " /1"
            If $Key2 = $Total2 Then $Key22 = " /2"
            If $Key3 = $Total3 Then $Key33 = " /3"
            If $Key4 = $Total4 Then $Key44 = " /4"              
        Case $key2
            $Program = (@ScriptDir & '\server\server2.exe')
            If $Key1 = $Total1 Then $Key11 = " /1"
            If $Key2 = $Total2 Then $Key22 = " /2"
            If $Key3 = $Total3 Then $Key33 = " /3"
            If $Key4 = $Total4 Then $Key44 = " /4"      
        Case $key3
            $Program = (@ScriptDir & '\server\server3.exe')
            If $Key1 = $Total1 Then $Key11 = " /1"
            If $Key2 = $Total2 Then $Key22 = " /2"
            If $Key3 = $Total3 Then $Key33 = " /3"
            If $Key4 = $Total4 Then $Key44 = " /4"      
        Case $key4
            $Program = (@ScriptDir & '\server\server4.exe')
            If $Key1 = $Total1 Then $Key11 = " /1"
            If $Key2 = $Total2 Then $Key22 = " /2"
            If $Key3 = $Total3 Then $Key33 = " /3"
            If $Key4 = $Total4 Then $Key44 = " /4"                          
    EndSwitch   
    Run($Program&" "&$Key11&" "&$Key22&" "&$Key33&" "&$Key44)
EndFunc




Не вариант:

Код:
Opt("WinWaitDelay", 1)
$hWindow = WinWait('SERVER', '', 15)
Sleep (500)
If $hWindow Then WinSetState($hWindow, '', @SW_HIDE)


т.к окно все равно показывается на секунду.
 

ivsatel

Продвинутый
Сообщения
319
Репутация
84
Re: Скрыть окно

prokazzza
А так?

Код:
Run($Program&" "&$Key11&" "&$Key22&" "&$Key33&" "&$Key44, @ScriptDir, @SW_HIDE)
 
Автор
P

prokazzza

Новичок
Сообщения
160
Репутация
2
Re: Скрыть окно

Вот как выглядит функция целиком

Код:
While 1
    $nMsg = GUIGetMsg()
    Switch $nMsg
        Case $GUI_EVENT_CLOSE
            Exit
			
		Case $Button1
            $Program = GUICtrlRead($Combo1)
            $Key1 = GUICtrlRead($Combo4)
            $Key2 = GUICtrlRead($Combo3)
            $Key3 = GUICtrlRead($Combo6)
            $Key4 = GUICtrlRead($Combo9)
            RunKey($Program, $Key1, $Key2, $Key3, $Key4)
    EndSwitch
WEnd

Func RunKey($Program, $Key1, $Key2, $Key3, $Key4)
    Switch $Program
		Case $key1
            $Program = (@ScriptDir & '\server\server1.exe')
            If $Key1 = $Total1 Then $Key11 = " /1"
            If $Key2 = $Total2 Then $Key22 = " /2"
            If $Key3 = $Total3 Then $Key33 = " /3"
            If $Key4 = $Total4 Then $Key44 = " /4"				
		Case $key2
            $Program = (@ScriptDir & '\server\server2.exe')
            If $Key1 = $Total1 Then $Key11 = " /1"
            If $Key2 = $Total2 Then $Key22 = " /2"
            If $Key3 = $Total3 Then $Key33 = " /3"
            If $Key4 = $Total4 Then $Key44 = " /4"		
		Case $key3
            $Program = (@ScriptDir & '\server\server3.exe')
            If $Key1 = $Total1 Then $Key11 = " /1"
            If $Key2 = $Total2 Then $Key22 = " /2"
            If $Key3 = $Total3 Then $Key33 = " /3"
            If $Key4 = $Total4 Then $Key44 = " /4"		
		Case $key4
            $Program = (@ScriptDir & '\server\server4.exe')
            If $Key1 = $Total1 Then $Key11 = " /1"
            If $Key2 = $Total2 Then $Key22 = " /2"
            If $Key3 = $Total3 Then $Key33 = " /3"
            If $Key4 = $Total4 Then $Key44 = " /4"							
    EndSwitch   
    Run($Program&" "&$Key11&" "&$Key22&" "&$Key33&" "&$Key44)
EndFunc



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

ivsatel такое не помогает, и просто добавление @SW_HIDE тоже
 
Автор
P

prokazzza

Новичок
Сообщения
160
Репутация
2
Re: Скрыть окно

Да, но это и не решение проблемы.
 

CreatoR

Must AutoIt!
Команда форума
Администратор
Сообщения
8,670
Репутация
2,473
Re: Скрыть окно

prokazzza
Предупреждение За нарушение правил форума (пункт Б.5):
Имя темы должно нести смысловую нагрузку (отражать суть вопроса/проблемы)
Правильно сформулированное название темы привлекает больше внимания, и шансы получить конкретный ответ увеличиваются.


Данные правила могут пополняться локальными правилами раздела.
Как правильно называть темы

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

С уважением, ваш Администратор.
 
Автор
P

prokazzza

Новичок
Сообщения
160
Репутация
2
Неужели Autoit это сделать не в состоянии? Что-то в последние время мнение о Autoite стало меняться.
 

Viktor1703

AutoIT Гуру
Сообщения
1,535
Репутация
413
prokazzza

Уже написали же, вот простой пример с консолью, она даже не появится...

Код:
Run('cmd.exe', '', @SW_HIDE) ;~ запускаем консоль
Sleep(4000) ;~ Засыпаем на 4 сек.
ProcessClose('cmd.exe') ;~ Закрываем процесс cmd.exe
 
Автор
P

prokazzza

Новичок
Сообщения
160
Репутация
2
Viktor1703 Вы сперва попробуйте сами из функции представленной мной выше. То, что вы показываете я знаю давно и пробовал в первую очередь.
 

Viktor1703

AutoIT Гуру
Сообщения
1,535
Репутация
413
prokazzza

Как же я попробую, если у меня нет полного скрипта и server1.exe, server2.exe, server3.exe, server4.exe ?
 
Автор
P

prokazzza

Новичок
Сообщения
160
Репутация
2
Viktor1703 Создайте обычный батник и попробуйте
 

CreatoR

Must AutoIt!
Команда форума
Администратор
Сообщения
8,670
Репутация
2,473
prokazzza [?]
попробуйте сами из функции представленной мной выше
Странная функция.
Ты уверен что параметры там передаются правильно?
Что выдаёт это (добавь в функцию перед Run):
Код:
MsgBox(0, '', $Program&" "&$Key11&" "&$Key22&" "&$Key33&" "&$Key44)


[?]
Создайте обычный батник и попробуйте
С батником работает, возможно само запускаемое приложение не позволяет скрывать своё окно (вполне возможно что создаётся дополнительное окно).
 

InnI

AutoIT Гуру
Сообщения
4,739
Репутация
1,360
prokazzza [?]
Неужели Autoit это сделать не в состоянии?
Похоже, что не все окна можно скрыть сразу. Вот пример с калькулятором
Код:
Opt("WinWaitDelay", 1)
Run("calc.exe", "", @SW_HIDE) ; не работает - окно видимо
WinWaitActive("Калькулятор") ; работает, но окно промаргивает. Если использовать WinWait("Калькулятор") - окно не скроется
WinSetState("Калькулятор", "", @SW_HIDE)
Sleep(2000)
WinSetState("Калькулятор", "", @SW_SHOW)
 
Автор
P

prokazzza

Новичок
Сообщения
160
Репутация
2
CreatoR более чем, подобные функции успользую более полутора лет. Проблем не возникало. В окне выдает то, что и должно выдавать, программу и ключи запуска, которые я выбираю.

InnI Я бы смирился с секундным появлением программы, но перед ней запускается программа в полноэкранном режиме и когда моргает это окно, приложение выбивает.

В общем "решил проблему" добавлением @SW_MINIMIZE

Код:
Run($Program&" "&$Key11&" "&$Key22&" "&$Key33&" "&$Key44&" "&$Key55, '', @SW_MINIMIZE)


и последующим скрытием с помощью:

Код:
Opt("WinWaitDelay", 1)
$hWindow = WinWait('SERVER', '', 10)
If $hWindow Then WinSetState($hWindow, '', @SW_HIDE)


Вроде окно не проскакивает.
 

Viktor1703

AutoIT Гуру
Сообщения
1,535
Репутация
413
prokazzza

Я так понимаю в server*.exe находятся GUI которые нужно скрыть при запуске?
 

Viktor1703

AutoIT Гуру
Сообщения
1,535
Репутация
413
prokazzza

server*.exe - это ваши труды? Сами их писали?
 

Astel064

Помог мой пост, ставь +!
Сообщения
276
Репутация
51
Как вариант: установка и запуск, как системный сервис (без взаимодействия с пользователем), после - завершение и удаление самого сервиса из системы.
 
Верх