Создание виртуальных дисков с помощью subst
Первый полезный пример, который я хочу с тобой обсудить
– создание виртуальных дисков. К примеру, у тебя появился диск с полезной
инфой или игрой, но диск надо отдавать :( Конечно в твоем вооружении,
наверняка, давно уже есть надежный ВКД(Виртуальный Компакт-Диск). Я пользуюсь
двумя виртуалками: 'NeroImageDrive' и 'Paragon CD-ROM Emulator'. Последний
я уважаю за простату и способность к сжатию инфы (а скорость работы остается
на уровне:) А Nero я использую в том случае, если мне необходимо нарезать
диск на балванку и на компе его сохранить. Все достаточно просто. Но иногда
появляется нужда (не пойми неправильно:) создать временный диск, например,
когда у тебя есть какая-нибудь база данных, которую просто необходимо
запускать из корневой директории. Или написав свою программу, хочешь её
на диск нарезать с автозапуском, дак вот чтобы проверь как она себя будет
вести – создаешь диск и видишь нормально ли функционирует автозапуск,
все ли ссылки работают как надо.
Приступим, собственно говоря, к программированию. Я надеюсь, ты знаком
с языком программирования Delphi, писать прогу будем именно на нем, т.к.
считаю его достойным средством разработки программного обеспечения.
Утилита subst.exe
В нашей программе мы будем применять возможности утилиты subst.exe, которая
входит в состав Windows. Ее используют следующим образом, набери в командной
строке “subst z: c:\Temp”
– и в "Моем компьютере" появится диск z,
который будет указывать на c:\Temp.
Чтобы удалить диск, введи "subst
z: /D". Вот и все что тебе необходимо знать для работы с виртуальными
дисками. Главное пойми: информация не копируется диск просто ссылается
на указанный тобой путь.
Сегодня мы создадим интерфейс (GUI – Graphical User Interface,
графический интерфейс пользователя), для того чтобы было удобно пользоваться
утилитой subst.
Запускай Delphi, создавай новое приложение: File->New->Application,
обязательно сохрани!: File->Save
All. Назначь значение свойства Caption
формы равным GUI_for_subst, это название нашей проги, свойство BorderStyle
сделай равным bsSingle,
чтобы нельзя было изменять размеры окна.
Затем скидывай себе на форму следующие объекты с палитры компонентов (Component
Palette):
TGroupBox из вкладки Standard,
размести в нем два TLabel,
две TButton, один TEdit
и один TComboBox.
В объектном инспекторе измени свойства у этих объектов:
GroupBox1.Caption:=’Создание нового ВКД’
Label1.Caption:=’Путь:’
Label1.Text:=’C:\’
Label2.Caption:=’Диск:’
Button1.Caption:=’Обзор’
Button2.Caption:=’Создать’
Теперь у ComboBox1 измени
свойство Items, для этого
в объектном инспекторе щелкни напротив Items
на многоточие, в появившемся окне напиши все латинские буквы в обратном
порядке:
Z:
Y:
X:
…
F:
Все, т.е. от Z до F, тем самым ты создал список из этих букв, ими будем
обозначать диски.
Теперь создай второй TGroupBox
помести в нем TLabel, TComboBox,
TButton и изменяй свойства:
Label3.Caption:=’Диск:’
Button3.Caption:=’Удалить’
GroupBox2.Caption:=’Удаление ВКД’
А Items у ComboBox2 заполни также как у ComboBox1.
ComboBox1.ItemIndex:=0
ComboBox2.ItemIndex:=0
Создавай еще один TGroupBox,
в котором помести TShellListView,
который находится во вкладке Samples. Щелкни два раза на TShellListView
и выбери директорию по умолчанию (Use
Standard Folder->rfMyComputer).
Теперь размести на форме TGroupBox
и помести в него TShellTreeView
и две кнопки. Измени свойства новых объектов:
GroupBox3.Caption:=’Текущая конфигурация’
ShellListView1.ViewStyle:=vsList
GroupBox4.Caption:=’Обзор’
GroupBox4.Visible:=False
ShellTreeView1.Root:=rfMyComputer // аналогично тому, что ты сделал с
ShellListView1 только другой
способ
Button4.Caption:=’Ok’
Button5.Caption:=’Отмена’
ВСЁ! С интерфейсом мы закончили, если ты все правильно сделал, то должен
получить что-то вроде этого:
Отдохни немного, и переходи к коду нашей проги.
1. Объявление переменных
Если ты программировал хотя бы на Basic'е, то ты знаешь, что такое переменные
и где их используют. В Delphi их объявляют в разделе
var (variables – переменные), который находится перед
implementation (выполнение).
У тебя должно получится так:
var
Form1: TForm1;
fcreat,fdel:TextFile;//для работы с файлами
st:string;// переменная типа строка
s: array [0..255] of char; //объявляем переменную s типа массив символов
Допиши в разделе uses
библиотеку ShellApi, она
необходима для работы функции ShellExecute,
которая служит для запуска файлов
2. Создание ВКД
Создай обработчик события OnClick
кнопки 'Создать', впиши туда следующий код:
//Связываем файловую переменную fcreat с файлом 'creat.bat', если файла
нет, он создается автоматически
AssignFile(fcreat,'creat.bat');
//Открываем файл для записи
rewrite(fcreat);
//Прописываем команду, создающую ВКД
st:='subst '+ComboBox1.Text+' ' + '"'+Edit1.Text+'"';
//Перекодируем текст в DOS-кодировку, иначе работать с русскими названиями
не будет :(
CharToOem(PChar(st),s);
st:=s;// использование промежуточной переменной обязательно!
//Записываем значение st в файл fcreat
Write(fcreat,st);
//Закрываем файл fcreat
CloseFile(fcreat);
//Запускаем созданный нами файл
ShellExecute(Handle,nil,'creat.bat','','',SW_HIDE);
//Ждем полсекунды
sleep(500);
//Обновляем поле с дисками
ShellListView1.Refresh;
3. Удаление ВКД
Также создавай ответ на щелчок кнопки 'Удалить' и пиши код:
//Связываем файловую переменную
fdel с файлом 'del.bat'
AssignFile(fdel,'del.bat');
//Открываем файл для записи
rewrite(fdel);
//Прописываем команду, удаляющую ВКД
st:='subst '+ ComboBox2.Text+ ' /D';
//Записываем st в fdel
Write(fdel,st);
//Закрываем файл
CloseFile(fdel);
//Запускаем файл
ShellExecute(Handle,nil,'del.bat','','',SW_HIDE);
sleep(500);
ShellListView1.Refresh;
4. Еще несколько событий
На событие OnClick у Button1:
//Делаем обзор видимым
GroupBox4.Visible:=true;
На событие OnClick у Button4:
//Прописываем путь
edit1.Text:=ShellTreeView1.Path;
GroupBox4.Visible:=false;
На событие OnClick у Button5:
//Делаем обзор невидимым
GroupBox4.Visible:=false;
На событие Exit y GroupBox4:
//Делаем обзор невидимым
GroupBox4.Visible:=false;
Теперь программа полностью готова! Можешь смело запускать и
создавать диски, и помни: они исчезают после перезапуска системы, так
что не теряй их. Если не все понятно, то смотри исходники, главное, чтобы
у тебя все получилось, а понимание придет со временем.
Исходники бери здесь.
Удачи и до встречи!
Madin
|