Модераторы: Snowy, bartram, MetalFan, bems, Poseidon, Riply
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Виртуальный диск, Нужно создать вирт. диск. 
:(
    Опции темы
olbolab
Дата 7.7.2007, 16:08 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 10
Регистрация: 14.5.2007

Репутация: нет
Всего: нет



Пересмотрел все сообщения такого плана на форуме, вразумительного ответа нет, не можно примерчик програмки для разбора!!!!! smile 
PM MAIL   Вверх
lukas
Дата 7.7.2007, 18:00 (ссылка) |    (голосов:1) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 771
Регистрация: 23.2.2007

Репутация: нет
Всего: 15



вот с помощью командной строки

Код

procedure VirtualCD(X:Char; Path:String);
begin

WinExec('Subst ' + X +': "'+Path+'"', SW_HIDE);

end;


Это сообщение отредактировал(а) lukas - 7.7.2007, 18:01


--------------------
http://code.google.com/p/orionphp/ - opensource скриптовой язык Orion (аналог PHP) для freepascal/delphi.
PM MAIL WWW   Вверх
lukas
Дата 8.7.2007, 20:50 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 771
Регистрация: 23.2.2007

Репутация: нет
Всего: 15



удалить кстати созданный виртуальный диск очень просто...

WinExec('Subst ' + X +':  /d', SW_HIDE);


--------------------
http://code.google.com/p/orionphp/ - opensource скриптовой язык Orion (аналог PHP) для freepascal/delphi.
PM MAIL WWW   Вверх
MadCoder
Дата 30.1.2008, 23:33 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 478
Регистрация: 24.8.2007
Где: Москва

Репутация: 1
Всего: 2



А как можно отличить виртуальный диск от обычного, когда список дисков получаешь?
PM WWW ICQ   Вверх
Addmin
Дата 1.3.2008, 20:15 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 803
Регистрация: 3.2.2006
Где: сослан в Сибирь

Репутация: 1
Всего: 15



Никак. Для системы он такой же диск, как и все остальные.


--------------------
PM MAIL   Вверх
MadCoder
Дата 1.3.2008, 20:45 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 478
Регистрация: 24.8.2007
Где: Москва

Репутация: 1
Всего: 2



Цитата(Addmin @ 1.3.2008,  20:15)
Никак. Для системы он такой же диск, как и все остальные.

Не согласен с Вами, товарищ Аддмин.

Вот рабочий код, определящий только существующие жесткие диски, исключая виртуальные:
Код

// Определяет список разделов жестких дисков
function ListDrives: Tstringlist;
const
  NameSize    = 4;
  VolumeCount = 26;
  TotalSize   = NameSize * VolumeCount;
var
  Buff, Volume: String;
  lpQuery: array [0..MAXCHAR - 1] of Char;
  I, Count: Integer;
begin
Result:=Tstringlist.Create;

SetLength(Buff, TotalSize);
Count := GetLogicalDriveStrings(TotalSize, @Buff[1]) div NameSize;
if Count = 0 then
exit
  else
    for i := 0 to Count - 1 do
    begin
      Volume := PChar(@Buff[(I * NameSize) + 1]);
      if GetDriveType(PChar(Volume))=DRIVE_FIXED then
          begin
            Volume[3] := #0;
            QueryDosDevice(PChar(Volume), @lpQuery[0], MAXCHAR);
            Volume[3] := '\';
            if Copy(String(lpQuery), 1, 22)  = '\Device\HarddiskVolume' then
            Result.Add(Volume)
          end;

          end;
end;

Код рабочий, применяю в одном из своих проектов. Конкретно определение виртуальный диск или нет определяется так:
Код

 if Copy(String(lpQuery), 1, 22)  = '\Device\HarddiskVolume' then

PM WWW ICQ   Вверх
Qu1nt
Дата 2.3.2008, 00:58 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 602
Регистрация: 13.1.2007

Репутация: 5
Всего: 50



Код

procedure TForm1.Button1Click(Sender: TObject);
const
  NameSize    = 4;
  VolumeCount = 26;
  TotalSize   = NameSize * VolumeCount;
  Report      = 'Volume: %s %s';
var
  Buff, Volume  : string;
  lpQuery       : array [0..MAXCHAR - 1] of Char;
  I, Count      : Integer;
begin
  SetLength(Buff, TotalSize);
  Count := GetLogicalDriveStrings(TotalSize, @Buff[1]) div NameSize;
  if Count = 0 then
    Memo1.Lines.Add(SysErrorMessage(GetLastError))
  else
    for i := 0 to Count - 1 do
    begin
      Volume := PChar(@Buff[(I * NameSize) + 1]);
      case GetDriveType(PChar(Volume)) of
        DRIVE_UNKNOWN: Memo1.Lines.Add(Format(Report, [Volume,
          'The drive type cannot be determined.']));
        DRIVE_NO_ROOT_DIR: Memo1.Lines.Add(Format(Report, [Volume,
          'The root path is invalid. For example, no volume is mounted at the path.']));
        DRIVE_REMOVABLE:
          begin
            Volume[3] := #0;
            QueryDosDevice(PChar(Volume), @lpQuery[0], MAXCHAR);
            Volume[3] := '\';
            if String(lpQuery) = '\Device\Floppy0' then
              Memo1.Lines.Add(Format(Report, [Volume, 'The drive is a Floppy disk A:.']))
            else
              if String(lpQuery) = '\Device\Floppy1' then
                Memo1.Lines.Add(Format(Report, [Volume, 'The drive is a Floppy disk B:.']))
              else
                Memo1.Lines.Add(Format(Report, [Volume, 'The drive is a Flash Drive.']));
          end;
        DRIVE_FIXED:
          begin
            Volume[3] := #0;
            QueryDosDevice(PChar(Volume), @lpQuery[0], MAXCHAR);
            Volume[3] := '\';
            if Copy(String(lpQuery), 1, 22)  = '\Device\HarddiskVolume' then
              Memo1.Lines.Add(Format(Report, [Volume, 'The disk cannot be removed from the drive.']))
            else
              Memo1.Lines.Add(Format(Report, [Volume, 'The drive is a SUBST disk on path: "' +
                Copy(String(lpQuery), 5, Length(String(lpQuery))) + '"']));
          end;
        DRIVE_REMOTE: Memo1.Lines.Add(Format(Report, [Volume, 'The drive is a remote (network) drive.']));
        DRIVE_CDROM: Memo1.Lines.Add(Format(Report, [Volume, 'The drive is a CD-ROM drive.']));
        DRIVE_RAMDISK: Memo1.Lines.Add(Format(Report, [Volume, 'The drive is a RAM disk.']));
    else
      Memo1.Lines.Add(Format(Report, [Volume, 'Xpen znaet chto :)']));
    end;
  end;
end;

DRKB.
PM MAIL   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "Delphi: WinAPI и системное программирование"
Snowybartram
MetalFanbems
PoseidonRrader
Riply

Запрещено:

1. Публиковать ссылки на вскрытые компоненты

2. Обсуждать взлом компонентов и делиться вскрытыми компонентами

  • Литературу по Delphi обсуждаем здесь
  • Действия модераторов можно обсудить здесь
  • С просьбами о написании курсовой, реферата и т.п. обращаться сюда
  • Вопросы по реализации алгоритмов рассматриваются здесь
  • 90% ответов на свои вопросы можно найти в DRKB (Delphi Russian Knowledge Base) - крупнейшем в рунете сборнике материалов по Дельфи
  • 99% ответов по WinAPI можно найти в MSDN Library, оставшиеся 1% здесь

Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Snowy, bartram, MetalFan, bems, Poseidon, Rrader, Riply.

 
1 Пользователей читают эту тему (1 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Delphi: WinAPI и системное программирование | Следующая тема »


 




[ Время генерации скрипта: 0.0967 ]   [ Использовано запросов: 21 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.