Сейчас на форуме: Rio (+5 невидимых)

 eXeL@B —› Вопросы новичков —› Подмена GUI в консоли
Посл.ответ Сообщение

Ранг: 1.0 (гость)
Активность: 0=0
Статус: Участник

Создано: 21 мая 2008 20:50
· Личное сообщение · #1

Здрасте... Вопрос не по тематике форума, но новичку больше писать с таким вопросом некуда...
Есть cmd файл, хочется чтоб по его запуску открывалось не кЫвадратное окно консоли, а какое-нить окно с красивым тырфейсом, перехватывающее текст выполняемых операций исходного cmdшника.
Если интересно - тема такая.
Собрал драйверпак для автоустановки с множеством дров. Сделал авторан, закатал на болванку, все пашет, вот тока красоты не хватает.
И еще хочется, ну эт уж менее важно, чтоб выводился не только текст прописанный для вывода из cmd, но и вывод операций с файлами, которые в данный момент обрабатываются, типа как при извлечении из sfx, тупо отображение списка...
Какой есть софт по этой затее?
Программы для сбора инсталляторов не подходят из за их ориентированность на участие пользователя в процессе установки, типа куда ставить и др...
А мне нужно чтоб при старте открылся какой-нить фон с отображением перехваченного текста, то есть даже не окно с кнопками наверху, а что то вроде splash screen, как, опять же к примеру, при запуске 10 фотошопа картинка с текстом о инициализации модулей программы!

Спасибо.



Ранг: 107.5 (ветеран)
Активность: 0.150
Статус: Участник

Создано: 21 мая 2008 21:40
· Личное сообщение · #2

Ну в чем вопрос делай свою прогу. Если ни одного языка не знаешь то начни с delphi пол дня и свою прогу сделаешь мему кинь да и делов

-----
Md5 fcbb6c9c9a5029b24d70f2d67c7cca74





Ранг: 387.4 (мудрец)
Активность: 0.170
Статус: Участник
системщик

Создано: 21 мая 2008 21:42
· Личное сообщение · #3

EmytZ, тебе нужен именно инстолятор сделать - в начале один красивый splash screeen и "continue", и потом запускаешь свои .bat/.cmd файлы в скрытой консоли.



Ранг: 1.0 (гость)
Активность: 0=0
Статус: Участник

Создано: 21 мая 2008 21:58 · Поправил: EmytZ
· Личное сообщение · #4

Stack, спс.
А не подскажете что конретно в delphi мне может помочь? И какой набор софта потребуется, точнее на сколько метров скачки рассчитывать?
s0larian, это понятно. скрыть консоль... тихая установка... А как вывести текст на ентот скрин и расширить его включив вывод имен файлов обработки?



Ранг: 107.5 (ветеран)
Активность: 0.150
Статус: Участник

Создано: 21 мая 2008 22:36 · Поправил: Stack
· Личное сообщение · #5

EmytZ пишет:
А как вывести текст на ентот скрин и расширить его включив вывод имен файлов обработки?

Я же говорю пишешь прогу (на чем хочешь ххоть на бейсике) делаешь свое дело а результат выводишь на Memo( в случае с delphi ) или на RichEdit.

EmytZ пишет:
А не подскажете что конретно в delphi мне может помочь?

Язык простой + VCL

-----
Md5 fcbb6c9c9a5029b24d70f2d67c7cca74





Ранг: 387.4 (мудрец)
Активность: 0.170
Статус: Участник
системщик

Создано: 21 мая 2008 22:45
· Личное сообщение · #6

EmytZ, то есть progress report? Это уже вопрос реализации... Можешь просто выводить "installing patch1: то-то и это..." а если ты хочешь полный stdout redirect, то вот:
nsis.sourceforge.net/ExecDos




Ранг: 279.1 (наставник)
Активность: 0.160
Статус: Участник
wizard

Создано: 22 мая 2008 05:58 · Поправил: MACKLIA
· Личное сообщение · #7

EmytZ пишет:
А не подскажете что конретно в delphi мне может помочь?


1.На форму кидаем Memo и Button
2.В uses дописываем ShellAPI;
3.При нажатии кнопки пишем

procedure TForm1.Button1Click(Sender: TObject);
var
Disk:string;
begin
Disk:=ExtractFilePath(Application.ExeName);
//в переменную Disk запишем путь ,где находится программа (*.bat находится там же)
ShellExecute(Handle, nil, '*.bat', nil, nil, SW_Hide);// *.bat - это твой bat или cmd
Memo1.Lines.Add('установка началась');
Sleep(3000);//пауза 3000 = 3 сек.
Memo1.Lines.Add('установка идет');
Sleep(3000);
Memo1.Lines.Add('всё установилось');
end;

-----
Что один человек сделал , другой всегда сломать может...




Ранг: 107.5 (ветеран)
Активность: 0.150
Статус: Участник

Создано: 22 мая 2008 09:29
· Личное сообщение · #8

MACKLIA пишет:
Memo1.Lines.Add('установка началась');

Тут еще можно если компонентов много писать типа утанавливаеться такойто компонент

-----
Md5 fcbb6c9c9a5029b24d70f2d67c7cca74





Ранг: 279.1 (наставник)
Активность: 0.160
Статус: Участник
wizard

Создано: 22 мая 2008 12:32
· Личное сообщение · #9

Stack пишет:
Тут еще можно если компонентов много писать типа утанавливаеться такойто компонент


ага ,ещё и ProgressBar приделать и будет нормально

-----
Что один человек сделал , другой всегда сломать может...




Ранг: 1.0 (гость)
Активность: 0=0
Статус: Участник

Создано: 22 мая 2008 16:19 · Поправил: EmytZ
· Личное сообщение · #10

хм... спасибо.
Button мне не нужон, т.к. все автоматом будет.
Вот пример из моего Setup.cmd
...
ECHO.
ECHO Installing Chipset Driver
ECHO Please wait...
start /wait %systemdrive%\install\Drivers\Chipset
...

/wait как понимаете сдесь лучше подходит, чем "Sleep(3000);//пауза 3000 = 3 сек."

как с этим быть?

И как на счет VisualBasic6 вместо Delphi?




Ранг: 279.1 (наставник)
Активность: 0.160
Статус: Участник
wizard

Создано: 22 мая 2008 16:56 · Поправил: MACKLIA
· Личное сообщение · #11

EmytZ пишет:
Button мне не нужон, т.к. все автоматом будет.


Тогда procedure TForm1.FormCreate(Sender: TObject);

EmytZ пишет:
И как на счет VisualBasic6 вместо Delphi?


А нафига ,если чтобы прога меньше была то или писать на API ,но тогдауж ASM рулит ,или сожмёшь готовую прогу и сё - правда 150~170 кб всё равно будет

-----
Что один человек сделал , другой всегда сломать может...




Ранг: 107.5 (ветеран)
Активность: 0.150
Статус: Участник

Создано: 22 мая 2008 18:41
· Личное сообщение · #12

EmytZ пишет:
И как на счет VisualBasic6 вместо Delphi?

Пиши на чем душа просит.
MACKLIA пишет:
А нафига ,если чтобы прога меньше была то или писать на API ,но тогдауж ASM рулит ,или сожмёшь готовую прогу и сё - правда 150~170 кб всё равно будет

Ну еще можно сделать диалог в ресурсах (ручками или программой каконить) и удалить модуль Forms около 50 кб можно впихнуть + изображение. Вот тебе и винапи.

-----
Md5 fcbb6c9c9a5029b24d70f2d67c7cca74




Ранг: 62.5 (постоянный), 2thx
Активность: 0.050
Статус: Участник

Создано: 22 мая 2008 19:16
· Личное сообщение · #13

Все можно реализовать и на масме, юзая пайп.

Вот 21й урок айзелона который я чуть переделал.

57c3_22.05.2008_CRACKLAB.rU.tgz - tute21.rar



Ранг: 1.0 (гость)
Активность: 0=0
Статус: Участник

Создано: 22 мая 2008 19:52 · Поправил: EmytZ
· Личное сообщение · #14

Delphi скачали ) Колдуем
А с этим как:
"/wait как понимаете сдесь лучше подходит, чем "Sleep(3000);//пауза 3000 = 3 сек."
сейчас на ентом ожидании и застряли...

Короч, вт что вышло:
unit Unit1;

interface

uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, StdCtrls;

type
TForm1 = class(TForm)
Memo1: TMemo;
Button1: TButton;
procedure Button1Click(Sender: TObject);
procedure Memo1Change(Sender: TObject);
private
{ Private declarations }
public
{ Public declarations }
end;

var
Form1: TForm1;

implementation

{$R *.dfm}

procedure TForm1.FormCreate|(Sender: D:\test.cmd);
var
Disk:string;
begin
Disk:=ExtractFilePath(D:\Install\);

ShellExecute(Handle, nil, 'test.cmd', nil, nil, SW_Hide);
Memo1.Lines.Add('Installing VGA Driver...');
Sleep(3000);
Memo1.Lines.Add('Installing HDA Driver...');
Sleep(3000);
Memo1.Lines.Add('Installing Done!');
eprocedure TForm1.Memo1Change(Sender: D:\test.cmd);
begin

end;


Когда в delphi жму на Run он выделяет красным подчеркнутую строку и ставит курсор в позицию после "TForm1.FormCreate"...
Может я вообще не так что то делаю?
При этом все лежит на "D:" - и sfx c дровами и test.cmd



Ранг: 107.5 (ветеран)
Активность: 0.150
Статус: Участник

Создано: 22 мая 2008 20:11
· Личное сообщение · #15

var id:cardinal;

id:=shellexecute(0,'open','c:\windows\system32\notepad.exe','','c:\win dows\system32',SW_ShowNormal);
waitforsingleobject(OpenProcess(SYNCHRONIZE,false,id),infinite);
showmessage('Вы закрыли блокнот');

вроде так но у меня не работает.

-----
Md5 fcbb6c9c9a5029b24d70f2d67c7cca74





Ранг: 279.1 (наставник)
Активность: 0.160
Статус: Участник
wizard

Создано: 23 мая 2008 13:43 · Поправил: MACKLIA
· Личное сообщение · #16

EmytZ пишет:
procedure TForm1.FormCreate|(Sender: D:\test.cmd);


Это что за фигня такая ? Короче делай так - мышкой по форме два раза кликни и Delphi сам создаст procedure TForm1.FormCreate(Sender: TObject); ,что идет в скобках трогать вообще не надо !!!

EmytZ пишет:
Disk:=ExtractFilePath(D:\Install\);


Переменная Disk служит для занесения в неё информации о месте расположения программы(будем считать ,что прога и батник находятся в одой директории).ExtractFilePath(Application.ExeName); сам определит где прога находится ,т.е. надо писать Disk:=ExtractFilePath(Application.ExeName); .а не как у тебя Disk:=ExtractFilePath(D:\Install\).
И напиши вот так надо - ShellExecute(Handle, nil,PChar(Disk+'*.bat'), nil, nil, SW_show); - ато я чтото первый раз ступил .
Потому что PChar(Disk+'*.bat') -это полный путь да батника , а не у всех сидюк это диск D

EmytZ пишет:
А с этим как:
"/wait как понимаете сдесь лучше подходит, чем "Sleep(3000);//пауза 3000 = 3 сек."
сейчас на ентом ожидании и застряли...


подумаю как лучше сделать ,но позднее.Сначала пусть у тебя хоть так получится,а там доработаем.

-----
Что один человек сделал , другой всегда сломать может...




Ранг: 1.0 (гость)
Активность: 0=0
Статус: Участник

Создано: 24 мая 2008 17:20 · Поправил: EmytZ
· Личное сообщение · #17

MACKLIA сидюк у меня не D. Это я тренируюсь на диске D.
Сложно блин понять все енто!
Надо было наверное сразу написать все подробно... Каюсь.
Что имеется вообще:
я взял установочные файлы дров и положил каждый в соотв директорию
собрал SFX архив содержащий эти папки и с параметром выполнения запуска файла по адресу:
%systemdrive%\install\Setup.cmd
написал Setup.cmd следуцющего содержания:
@echo off
TITLE Windows XP SP2/SP3 Unattended Driver Installation
ECHO.
ECHO The computer will restart automatically
ECHO once the whole process has finished!
;первый драйвер:
ECHO Installing Chipset Driver
ECHO Please wait...
start /wait %systemdrive%\install\Drivers\Chipset\Setup.exe /S

и так далее для каждого драйвера. %systemdrive%\install - это временная папка на диске с где установлена система, куда извлекаются дрова с сидюка.
Этот Setup.cmd положил в корень архива.

Как запускается это все? Методом cmdlines.txt на этапе T-12, т.е. за 12 минут до завершения установки винды происходит извлечение с диска в папку %systemdrive%\install\, а оттуда уже запускается мой Setup.cmd
То есть сидюк тут уже не при делах!
Сейчас осмысляю выше написанное и изучаю литературу по Delphi, о результате сообщу.



Ранг: 1.0 (гость)
Активность: 0=0
Статус: Участник

Создано: 26 мая 2008 04:40 · Поправил: EmytZ
· Личное сообщение · #18

Учитывая то что я с программированием не сталкивался, думаю, что для начала неплохо - скроллбары поставил и поле Memo меняет размер в зависимости от размера окна (см вложение)...
Без книг Delphi сложно понять...
Неясным остается - как прописать пути относительно папки %systemdrive%\install
- как перехватить текст из консоли
В архиве помимо результата я положил еще test.cmd. Прошу помочь на примере вывести текста на Memo.
Или нужно как то синхронизировать процесс показа нового (следующего по списку) текста в Memo с окончанием /wait в скрытой консоли...

P.S. GodFather - архив поврежден...
А может в Delphi есть команды для запуска тихой установки и ожидания завершения процесса?
e859_25.05.2008_CRACKLAB.rU.tgz - Project2.zip


 eXeL@B —› Вопросы новичков —› Подмена GUI в консоли
:: Ваш ответ
Жирный  Курсив  Подчеркнутый  Перечеркнутый  {mpf5}  Код  Вставить ссылку 
:s1: :s2: :s3: :s4: :s5: :s6: :s7: :s8: :s9: :s10: :s11: :s12: :s13: :s14: :s15: :s16:


Максимальный размер аттача: 500KB.
Ваш логин: german1505 » Выход » ЛС
   Для печати Для печати