Вверх ↑
Этот топик читают: Гость
Этот топик был перемещен из раздела "Помощь по среде"
Ответов: 2
Рейтинг: 0
#1: 2020-12-08 14:39:54 ЛС | профиль | цитата
Всем привет.
Решил перенести алгоритмы из батника (.bat) в HiAsm. Если с батником я вполне справляюсь, то HiAsm меня невыполнимо озадачил.
Что я хотел сделать:
1. Записываю в StrList содержимое своего батника
2. Передаю содержимое StrList в WinExec
3. WinExec запускается кнопкой Button

Такая была логика. Но не могу ее сделать. Содержимое StrList даже не открывается.
Помогите этот простенький код реализовать. Заранее спасибо.
ps: запуск внешнего .bat просьба не предлагать, хочу код батника закрыть

Make(delphi)
ver(4.05 build 186)
Add(MainForm,2953706,21,105)
{
}
Add(Button,433627,140,147)
{
Left=145
Top=90
}
Add(WinExec,1194211,280,147)
{
}
Add(StrList,3426993,399,105)
{
Strings=#9:@echo off|5:echo.|5:echo.|18:echo Привет|5:pause|
}

карма: 0

0
Ответов: 4628
Рейтинг: 749
#2: 2020-12-08 16:14:27 ЛС | профиль | цитата
В bat-файле каждая строка подвергается дополнительной обработке: разбивается по пробелах (с учетом двойных кавычек) на отдельные команды. Первая команда проверяется на список ключевых слов, составляющих встроенные команды интерпретатора, остальные слова - это параметры команды. Команды типа "echo" или "pause" - это встроенные команды, компонент WinExec не знает что с ними делать. Например, "pause" - приостановить дальнейшее исполнение скрипта до нажатия кнопки. Ну, и как это сделать с WinExec? Надо самому приостановить перебор списка, затем по нажатию клавиши продолжить с места остановки (ну, или выдать Message, по закрытии продолжить).

А вот когда первая команда не является встроенной, тогда предполагается что это имя и путь к файлу, который надо запустить. А последующие команды в строке - командная строка для запуска. Тогда WinExec умеет это делать.
Выбрасываешь все строки с встроенными командами, оставляешь только строки, запускающие внешние приложения и их подаёшь на WinExec.

Редактировалось 1 раз(а), последний 2020-12-08 16:15:56
карма: 26

0
Ответов: 2
Рейтинг: 0
#3: 2020-12-08 21:29:33 ЛС | профиль | цитата
Netspirit, спасибо.
карма: 0

0
Ответов: 783
Рейтинг: 168
#4: 2020-12-09 21:12:14 ЛС | профиль | цитата
ogra писал(а):
HiAsm меня невыполнимо озадачил

Если бы знать, что твой bat-ник делает то можно было бы решить каким-то другим способом.
Ну а пока, как вариант..
Add(MainForm,2953706,105,175)
{
link(onCreate,2322868:doEvent1,[])
}
Add(TempFileStream,3078181,252,210)
{
Extention=".bat"
link(onCreate,5037726:doExec,[])
link(Stream,4122637:Var3,[(258,138)])
}
Add(WinExec,5037726,308,210)
{
RunEvent=1
Point(onConsoleResult)
Point(doConsoleExec)
link(onFinished,3078181:doDelete,[(347,223)(347,251)(242,251)(242,223)])
}
Add(MemoryStream,11280145,224,84)
{
}
Add(Hub,2322868,161,189)
{
link(onEvent1,6902389:doSaveToStream,[])
link(onEvent2,3078181:doCreate,[(200,202)(200,216)])
}
Add(StrList,6902389,210,161)
{
Strings=#60:@echo off & setlocal & setlocal enabledelayedexpansion & cls|73: for /l %%a in (1,1,16) do (set RowArr= 0!RowArr!) & set ColArr=!RowArr!|71: set /a MaxRow=40, MaxCol=120, CurRow=1, CurCol=1, CurRowD=1, CurColD=1|48: title Press Control+C (Twice sometimes) to Stop|128: for /f "tokens=* delims=" %%a in ('forfiles /p %~dps0 /m %~nxs0 /c "cmd /c echo.0x200xB00xB10xB20xDB0x1B"') do @set arrChar=%%a|23: set Esc=!arrChar:~5,1!|79: set FadeArray=7140713771277117704701170127001701370140013000370120701001100040|45: for /f "tokens=1,2" %%a in ('mode con') do (|35: if "%%a"=="Lines:" set MaxRow=%%b|37: if "%%a"=="Columns:" set MaxCol=%%b|3: )|33: if %MaxRow% GTR 40 set MaxRow=40|38: mode con cols=%MaxCol% lines=%MaxRow%|5::Loop|32: if %CurRow% equ 1 set CurRowD=1|32: if %CurCol% equ 1 set CurColD=1|40: if %CurCol% equ %MaxCol% set CurColD=-1|40: if %CurRow% equ %MaxRow% set CurRowD=-1|52: set /a CurCol=CurCol+CurColD, CurRow=CurRow+CurRowD|45: set CurCol= %CurCol%& set CurRow= %CurRow%|78: set ColArr=!CurCol:~-3!!ColArr:~,45!& set RowArr=!CurRow:~-3!!RowArr:~,45!|28: for /l %%a in (0,1,15) do (|27: set /a ia=%%a*4, ib=%%a*3|70: for %%b in (!ib!) do set /a row=!RowArr:~%%b,3!, col=!ColArr:~%%b,3!|53: for %%b in (!ia!) do set PacChar=!FadeArray:~%%b,4!|73: set fg=!PacChar:~0,1!&set intChar=!PacChar:~2,1!& set bg=!PacChar:~3,1!|45: set /a i=!PacChar:~1,1!, bg=bg+40, fg=fg+30|53: for %%b in (!intChar!) do set Char=!arrChar:~%%b,1!|78: echo %Esc%[!row!;!col!H%Esc%[!i!;!fg!m%Esc%[!bg!m!Char!%Esc%[0m%Esc%[0;0H|2: )|10:goto :Loop|0:|0:|0:|0:|0:|0:|0:|0:|0:|0:|0:|0:|0:|0:|0:|0:|0:|0:|0:|0:|0:|0:|0:|0:|0:|0:|0:|0:|0:|
Point(doSaveToStream)
Point(Stream)
Point(doSave)
link(Stream,4122637:Var2,[])
}
Add(GetDataEx,4122637,224,133)
{
link(Data,11280145:Stream,[])
}


Редактировалось 1 раз(а), последний 2020-12-17 20:47:48
карма: 15

0
4
Сообщение
...
Прикрепленные файлы
(файлы не залиты)