Что нового

[Элементы GUI] Работа с текстфайлом без GUI

alexnasa

Новичок
Сообщения
50
Репутация
0
Этот примитивный скрипт у меня работает, а теперь надо научить его делать то же самое, но уже не пользуясь GUI ХР т.к. консоль хотелось бы иметь возможность закрывать (блокировать вход ПК)
Код:
run ("ipconf.cmd"); пишем батником айпиконфиг в текстрепорт типа: ipconfig >report.txt
;(к стати а можно обойтись без батников?)
sleep(99)
run ("notepad.exe report.txt");открывваем репорт и добавляем 3 строки
;т.к. этого требует программа, которая отошлёт это репорт дальше
sleep(99)
WinActivate("[CLASS:Notepad]");поднимаем окно нотепада
Send("[settings]");пишем первострочку (нужна в данном репорте)
sleep(99)
WinActivate("[CLASS:Notepad]");поднимаем окно нотепада
Send("{enter}");опускаемся ниже на строку
sleep(99)
WinActivate("[CLASS:Notepad]");поднимаем окно нотепада
Send("[333222]");пишем вторую строку "шапки" (нужна в данном репорте)
sleep(99)
WinActivate("[CLASS:Notepad]");поднимаем окно нотепада
Send("{enter}");опускаемся на строку вниз
sleep(99)
WinActivate("[CLASS:Notepad]");поднимаем окно нотепада
Send("Msg=");пишем третью строку "шапки" (нужна в данном репорте)
sleep(99)
Send("{DEL 572}");удаляем лишние 572 символа и "подклеиваем" к появившейся
;3-й строке остальной текст этого report.txt впритык 
;(без жёсткого переноса) следующих строк
;т.к. этого требует программа, которая отошлёт это репорт дальше
sleep(99)
WinActivate("[CLASS:Notepad]");поднимаем окно нотепада
Send("на момент времени {F5}");поставим "ориентир-штемпель даты" гор.клавишей нотепада(F5)
sleep(99)
WinActivate("[CLASS:Notepad]");поднимаем окно нотепада
Send("^s"); посылаем  Ctrl+S (т.е."Сохранить")
sleep(99)
WinActivate("[CLASS:Notepad]");поднимаем окно нотепада
Send("!{F4}"); закроем нотепад по Alt+F4
 

Guezt

Продвинутый
Сообщения
335
Репутация
82
alexnasa
приложи два файла первый который у тебя получается при дампе ipconfig и второй какой нужно что бы стал.
 

Guezt

Продвинутый
Сообщения
335
Репутация
82
накидал по быстрому но явно можно как то проще решить вот готовый код:
Код:
#include <Process.au3>
_RunDOS('ipconfig >report.txt')
$sFile = FileRead('report.txt')
$i = StringInStr($sFile,'IP-адрес')
$up = StringMid($sFile,$i,StringLen($sFile))
$up = StringReplace($up,@CR,'')
$up = StringReplace($up,@LF,'')
FileOpen('report.txt',2)
$newFile='[settings]'&@CRLF&'[58623882]'&@CRLF&'Msg=. . :         '&$up
FileWrite('report.txt',$newFile)
ShellExecute('report.txt')
 
Автор
alexnasa

alexnasa

Новичок
Сообщения
50
Репутация
0
Да прославится имя твое, и да пошлет тебе всех благ Автор нашего с тобой кода! :beer:
 

madmasles

Модератор
Глобальный модератор
Сообщения
7,790
Репутация
2,322
alexnasa
Можно так попробовать, у меня работает:
Код:
#include <Constants.au3>

$sNumber = '123456789'
$sFile = @ScriptDir & '\report.txt'

_ReportIpconfig($sNumber, $sFile)
If @error Then
	MsgBox(16, 'error', 'error')
Else
	MsgBox(64, 'OK', 'OK')
	ShellExecute($sFile)
EndIf

Func _ReportIpconfig($sDigit, $sFileReport)
	Local $sLog = '', $sMessage, $aData, $sNow, $pid, $hFile, _
			$sMessage = '[settings]' & @CRLF & '[' & $sDigit & ']' & @CRLF & 'Msg=', _
			$sPattern = '(IP-адрес| Маска подсети| Основной шлюз).*?(\:\s\d{1,3}\.\d{1,3}\.\d{1,3}\.\d{1,3})'

	$pid = Run(@ComSpec & ' /C ipconfig', '', @SW_HIDE, $STDOUT_CHILD)
	While 1
		$sLog &= StdoutRead($pid)
		If @error Then ExitLoop
		Sleep(10)
	WEnd
	If Not $sLog Then Return SetError(1)
	$aData = StringRegExp($sLog, $sPattern, 3)
	If UBound($aData) <> 6 Then Return SetError(1)
	$sNow = Chr(32) & Chr(32) & @HOUR & ':' & @MIN & ' ' & @MDAY & '.' & @MON & '.' & @YEAR
	For $i = 0 To UBound($aData) - 1
		$sMessage &= $aData[$i]
	Next
	$sMessage &= $sNow
	$hFile = FileOpen($sFileReport, 2)
	If $hFile = -1 Then Return SetError(1)
	If Not FileWrite($hFile, $sMessage) Then Return SetError(1)
	FileClose($hFile)
	Return SetError(0)
EndFunc   ;==>_ReportIpconfig
 
Автор
alexnasa

alexnasa

Новичок
Сообщения
50
Репутация
0
Уухх тыы.. а у меня почему-то не заработал, но все равно спасибо :beer:, главное что он 100% рабочий, порою его найду разницу между ним и работающим у меня предыдущим и причину непослушания второго. Оно на пользу -исследование.
 

XpycT

Скриптер
Сообщения
380
Репутация
133
alexnasa

Код:
#Region Includes
#EndRegion Includes
#NoTrayIcon

$wbemFlagReturnImmediately = 0x10
$wbemFlagForwardOnly = 0x20

$sComputer = "localhost"

$oWMIService = ObjGet("winmgmts:\\" & $sComputer & "\root\CIMV2")
$oColItems = $oWMIService.ExecQuery("SELECT * FROM Win32_NetworkAdapterConfiguration", "WQL") ; , $wbemFlagReturnImmediately + $wbemFlagForwardOnly)

$sReportFile = @ScriptDir & '\report.txt'
$sReportDateTime = @HOUR & ":" & @MIN & " " & @MDAY & "." & @MON & "." & @YEAR

For $oItem In $oColItems
   $sMsgStr = "Msg="
   $sMsgStr &= "IP-адрес: " & $oItem.IPAddress(0) & " "
   $sMsgStr &= "Маска подсети: " & $oItem.IPSubnet(0) & " "
   $sMsgStr &= "Основной шлюз: " & $oItem.DefaultIPGateway(0)

   ExitLoop
Next

FileWriteLine($sReportFile, "[settings]")
FileWriteLine($sReportFile, "[333222]")
FileWriteLine($sReportFile, $sMsgStr & "   на момент времени " & $sReportDateTime)

ShellExecute($sReportFile)
 
Верх