Что нового

Как записать текст в консоль CMD

pvnn

Осваивающий
Сообщения
305
Репутация
32
Всем доброго времени суток.
Возможно ли через не консольное приложение послать текст (например команда ping) в консоль CMD или AUTOIT этого не сможет?
Вариант с Send мне не подходит


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

$Form1 = GUICreate("Form1", 204, 126, 333, 268)
$Button1 = GUICtrlCreateButton("CMD", 64, 56, 75, 25)
GUISetState(@SW_SHOW)

While 1
	$nMsg = GUIGetMsg()
	Switch $nMsg
		Case $GUI_EVENT_CLOSE
			Exit
		Case $Button1
			 $pid=Run(@ComSpec&' /c '&'cmd')
	EndSwitch
WEnd
 

ildar

Осваивающий
Сообщения
252
Репутация
29
Код:
#include <ButtonConstants.au3>
#include <GUIConstantsEx.au3>
#include <WindowsConstants.au3>

$Form1 = GUICreate("Form1", 204, 126, 333, 268)
$Button1 = GUICtrlCreateButton("CMD", 64, 56, 75, 25)
GUISetState(@SW_SHOW)

While 1
    $nMsg = GUIGetMsg()
    Switch $nMsg
        Case $GUI_EVENT_CLOSE
            Exit
        Case $Button1
             $iPID = Run(@ComSpec & ' /C ping 192.168.1.1' , '', @SW_SHOW)
    EndSwitch
WEnd
Или я неправильно понял?
 

mef-t

Осваивающий
Сообщения
306
Репутация
30
В этом случае автор не увидит результат в консоли.

Могу предложить создание и запуск батника.
Или банальный вариант: команду вводить по-символьно в консоли.
 

ildar

Осваивающий
Сообщения
252
Репутация
29
я пробовал, открывается командная строка где виден результат пинга.


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

Код:
Func _List($sCommand)

    $sRead=""

   ;$sCommand = '*****'
   $iPID = Run(@ComSpec & ' /C dsquery ' & $sCommand , '', @SW_HIDE, $STDIN_CHILD + $STDOUT_CHILD)

    If Not $iPID Then
        MsgBox(16, 'Error', 'Error')
        Exit
    EndIf

    While 1
        $sRead &= StdoutRead($iPID)
        ;$sRead = _Encoding_866To1251($sRead)
        If @error Then ExitLoop

        Sleep(10)

        ;ConsoleWrite($sRead)
        $aRead = StringSplit ($sRead,'"',3)

    WEnd

    ;ConsoleWrite(_Encoding_866To1251($sRead))

	$aSize = (UBound($aRead)+1)/2

	Dim $aERead[$aSize]

    $count=1
    FOR $i=1 to UBound($aRead)-1 Step 2

         $sText = _Encoding_866To1251($aRead[$i])
		 $sPattern = '=\s*([\s?A-Za-z0-9А-Яа-я]+)'
		 $aResult = StringRegExp($sText, $sPattern, 1)
		 $aERead[$count] = $aResult[0]
		 $count=$count+1

    next
	Return $aERead

   _ArrayDisplay($aERead)

EndFunc
Рабочий вариант функции где отправляется команда в консоль и снимаются полученные данные
 
Автор
P

pvnn

Осваивающий
Сообщения
305
Репутация
32
Мне нужно, что-то на подобие ControlSetText, только для консоли CMD. Такое вообще возможно сделать?
Батники и Send не подходят

Нашел вот это... но не работает
Код:
#include<WinAPI.au3>

$pid=Run(@ComSpec&' /c '&'cmd')
_WinAPI_AttachConsole($pid)

$hConsole = _WinAPI_GetStdHandle(1)
If $hConsole = -1 Then
    MsgBox(0, "Error", "GetStdHandle failed")
    Exit
EndIf

If Not _WinAPI_WriteConsole($hConsole,'ping 192.168.1.1 -t') Then
    MsgBox(0, "Error", "WriteConsole Failed")
EndIf
 
Автор
P

pvnn

Осваивающий
Сообщения
305
Репутация
32
madmasles Посмотрел, прмер работает только в консольном приложении.
Похоже только Send-ом и придется пользоваться :smile:
 

C2H5OH

AutoIT Гуру
Сообщения
1,473
Репутация
333
beliy, ildar, mef-t,
Насколько я понял, ТС на самом деле хочет отправлять команды в уже существующую консоль. Поэтому варианты с Run его не устраивают.


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

pvnn,
а чем не устраивает
Код:
ControlSend("C:\WINDOWS\system32\cmd.exe", "", "", "ping 192.168.1.1 -t"&@CR)

?
 
Автор
P

pvnn

Осваивающий
Сообщения
305
Репутация
32
C2H5OH вполне устраивает, спасибо! Не думал что так просто можно

Сделал так
Код:
Run(@ComSpec&' /c '&'cmd')
WinWaitActive("C:\WINDOWS\system32\cmd.exe")
ControlSend("C:\WINDOWS\system32\cmd.exe", "", "", "ping 192.168.1.1 -t"&@CR)



Спасибо всем, кто учавствовал в обсуждении темы!
 
Верх