Что нового

Как сделать паузу в консоли cmd?

A

at

Гость
День добрый Всем!
Прошу подсказать, можно ли сделать паузу в консоли cmd посредством autoit. Нужно прочесть код ошибки, который выводит консоль при регистрации модулей сторонней программы.
 

Viktor1703

AutoIT Гуру
Сообщения
1,535
Репутация
413
Зачем пауза... читайте данные прям из консоли в скрипт с помощью StdoutRead(), а дальше просто разбирайте полученные данные.

Для примера:

Код:
Global $sRead

$iPid = Run(@ComSpec & ' /C ipconfig /all', '', @SW_HIDE, 2)

While 1
	$sRead &= StdoutRead($iPid)
	If @error Then 
	    ExitLoop
	EndIf	
Wend

MsgBox(0, '', $sRead)
 
Автор
A

at

Гость
Viktor1703, Спасибо за подсказку. Хотелось бы все же понять - можно сделать паузу или нет.
 

Viktor1703

AutoIT Гуру
Сообщения
1,535
Репутация
413
Ну можно так:

Код:
Run(@ComSpec & ' /K ipconfig /all')


Ключ /K не даёт закрыться консольному окну и показывает результат выполнения команды.

Или так:

Код:
Run(@ComSpec & " /c ipconfig /all & Pause")
 
Автор
A

at

Гость
Вопрос: В примерах на форуме и в справке все команды передаются через Run. Если я правильно понимаю, команда Run вызывает новый процесс. А как выслать команду уже существующему окну или процессу CMD ?

Тут у меня загвоздка, прошу подсказку:
Код:
Global $sRead = 'OK'
While 1

    Sleep(100)
    $vCMD = WinGetHandle('[CLASS:ConsoleWindowClass]', '') ;получаем хэндл текущего окна консоли
     If $vCMD Then ;если есть окно консоли, тогда
     ;Как остановить открытое окно CMD ?     
     MsgBox(0, "", $sRead)
     EndIf
   
WEnd
 

Dm666

Осваивающий
Сообщения
221
Репутация
48
Так?
Код:
Then ControlSend($vCMD,'','','{PAUSE}')
 

ArtInt

Знающий
Сообщения
135
Репутация
18
at
так её же паузу послали. Так и должно быть, нет? :blink:
 

Dm666

Осваивающий
Сообщения
221
Репутация
48
at [?]
Так консоль подвисает...
Оно не подвисает, оно на паузу становится. Или надо было не это?

OffTopic:
Промазал мышкой, ткнул в полезное сообщение. :-[
 

ArtInt

Знающий
Сообщения
135
Репутация
18
Dm666
OffTopic:
там есть красненькая звёздочка для снятия :ok:



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

at [?]
If $vCMD Then ;если есть окно консоли, тогда
Я чего-то не знаю, или непустая переменная всегда = true?
 

Dm666

Осваивающий
Сообщения
221
Репутация
48
ArtInt [?]
там есть красненькая звёздочка для снятия
good.gif
OffTopic:
err.png
:-\


ArtInt [?]
непустая переменная всегда = true?
Так и есть :IL_AutoIt_1:
 
Автор
A

at

Гость
Спасибо Всем! Вразумили. Тема решена.

Код:
#include <ButtonConstants.au3>
#include <GUIConstantsEx.au3>
#include <WindowsConstants.au3>

$Form = GUICreate("Consol_Pause", 245, 87, 192, 114)
$Pause = GUICtrlCreateButton("Pause", 32, 32, 75, 25)
$Start = GUICtrlCreateButton("Start", 144, 32, 75, 25)
GUISetState(@SW_SHOW)

Global $sRead = 'OK'

While 1
	$nMsg = GUIGetMsg()
	Switch $nMsg
		Case $GUI_EVENT_CLOSE
			Exit
		Case $Pause
			Pause()
        Case $Start
			Start()
	EndSwitch
WEnd

Func Pause()

    Sleep(100)
    $vCMD = WinGetHandle('[CLASS:ConsoleWindowClass]', '') ;получаем хэндл текущего окна консоли
     If winexists($vCMD) Then ;если есть окно консоли, тогда
           ControlSend($vCMD,'','','{PAUSE}')
     EndIf
   
EndFunc

Func Start()

    Sleep(100)
    $vCMD = WinGetHandle('[CLASS:ConsoleWindowClass]', '') ;получаем хэндл текущего окна консоли
     If winexists($vCMD) Then ;если есть окно консоли, тогда
           ControlSend($vCMD,'','','{BREAK}')
     EndIf
EndFunc
 
Верх