Форум по Delphi программированию

Delphi Sources



Вернуться   Форум по Delphi программированию > Все о Delphi > [ "Начинающим" ]
Ник
Пароль
Регистрация <<         Правила форума         >> FAQ Пользователи Календарь Поиск Сообщения за сегодня Все разделы прочитаны

Ответ
 
Опции темы Поиск в этой теме Опции просмотра
  #1  
Старый 21.05.2015, 00:22
Аватар для Alloc
Alloc Alloc вне форума
Начинающий
 
Регистрация: 17.09.2014
Сообщения: 104
Версия Delphi: Delphi 7
Репутация: 10
По умолчанию Как определить букву смонтированного образа? Как отключить оптический привод?

Уважаемые форумчане, подскажите как определить букву смонтированного образа в виртуальный привод зная его название и какие файлы должны лежать в корне этого диска?

Делаю так:
Код:
function GetDiskName:Boolean;
var
  w: dword;
  Root: string;
  i: integer;
begin
  Result:=False;
  w := GetLogicalDrives;
  Root := '#:\';
  for i := 0 to 25 do
  begin
    Root[1] := Char(Ord('A') + i);
    if (W and (1 shl i)) > 0 then
      if GetDriveType(Pchar(Root)) = DRIVE_CDROM then
         if FileExists(Root+'TRACK01.MP3') then
            begin
              Result:=True;
              Break;
            end;
  end;
end;

Подскажите, правильно ли я делаю? И как было бы лучше сделать? Может быть вместо FileExists использовать GetVolumeInformation для определения названия диска? Как лучше?


И второй вопрос - как определить имеющиеся оптические приводы (физические) и отключить их на время при нажатии на кнопку и потом включить обратно при нажатии на другую кнопку?

Прошу вас если не сложно примером как это реализовать. Буду вам очень благодарен за помощь.

Заранее спасибо!

Последний раз редактировалось Alloc, 21.05.2015 в 01:46.
Ответить с цитированием
  #2  
Старый 21.05.2015, 10:42
Аватар для SCrat.ORS
SCrat.ORS SCrat.ORS вне форума
Активный
 
Регистрация: 20.02.2007
Адрес: Мой адрес не дом и не улица, мой адрес 0x7С00
Сообщения: 208
Версия Delphi: 2006
Репутация: 884
По умолчанию

Ну точно не знаю поможет или нет, но взгляни вот на вложение.umount.rar
Программа получает все смонтированные устройства, и позволяет делать "безопасное извлечение". Писал для извлечения флешек - баловался.
Я думаю, что что-нибудь полезное для себя найдешь. Написано в консоле.
__________________
Програмистами не рождаются, ими становятся!
Ответить с цитированием
Этот пользователь сказал Спасибо SCrat.ORS за это полезное сообщение:
Alloc (21.05.2015)
  #3  
Старый 21.05.2015, 23:51
Аватар для Alloc
Alloc Alloc вне форума
Начинающий
 
Регистрация: 17.09.2014
Сообщения: 104
Версия Delphi: Delphi 7
Репутация: 10
По умолчанию

Цитата:
Сообщение от SCrat.ORS
Ну точно не знаю поможет или нет, но взгляни вот на вложение.Вложение 4574
Программа получает все смонтированные устройства, и позволяет делать "безопасное извлечение". Писал для извлечения флешек - баловался.
Я думаю, что что-нибудь полезное для себя найдешь. Написано в консоле.

спасибо за исходник, пригодится.. но я не придумал ничего лучше чем воспользоваться утилитой "Devcon" для отключения\включения устройств.

А что касается моего первого вопроса, насчет функции GetDiskName? как лучше сделать?
Ответить с цитированием
  #4  
Старый 22.05.2015, 11:19
Аватар для SCrat.ORS
SCrat.ORS SCrat.ORS вне форума
Активный
 
Регистрация: 20.02.2007
Адрес: Мой адрес не дом и не улица, мой адрес 0x7С00
Сообщения: 208
Версия Delphi: 2006
Репутация: 884
По умолчанию

Переделай функцию перечисления устройств.
вот к примеру:
Код:
 procedure List_Drives;
 const
   DRIVE_UNKNOWN = 0;
   DRIVE_NO_ROOT_DIR = 1;
   DRIVE_REMOVABLE = 2;
   DRIVE_FIXED = 3;
   DRIVE_REMOTE = 4;
   DRIVE_CDROM = 5;
   DRIVE_RAMDISK = 6;
 var
   r: LongWord;
   Drives: array[0..128] of char;
   pDrive: PChar;
 begin
   r := GetLogicalDriveStrings(SizeOf(Drives), Drives);
   if r = 0 then Exit;
   if r > SizeOf(Drives) then
     raise Exception.Create(SysErrorMessage(ERROR_OUTOFMEMORY));
   pDrive := Drives;
   while pDrive^ <> #0 do
   begin
     if GetDriveType(pDrive) = DRIVE_FIXED then
       Form1.ComboBox1.Items.Add(pDrive);
     Inc(pDrive, 4);
   end;
 end;

Т.е. у тебя щас довольно глупо сделан перебор от 0 до 25, а в примере while использован, Вот и у тебя так же надо переделать Ну а поиск - да, по имени и содержимому, другого варианта не вижу.
__________________
Програмистами не рождаются, ими становятся!

Последний раз редактировалось SCrat.ORS, 22.05.2015 в 11:21.
Ответить с цитированием
Этот пользователь сказал Спасибо SCrat.ORS за это полезное сообщение:
Alloc (22.05.2015)
  #5  
Старый 22.05.2015, 20:13
Аватар для Alloc
Alloc Alloc вне форума
Начинающий
 
Регистрация: 17.09.2014
Сообщения: 104
Версия Delphi: Delphi 7
Репутация: 10
По умолчанию

спасибо большое за совет)
Ответить с цитированием
Ответ


Delphi Sources

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск
Опции просмотра
Комбинированный вид Комбинированный вид

Ваши права в разделе
Вы не можете создавать темы
Вы не можете отвечать на сообщения
Вы не можете прикреплять файлы
Вы не можете редактировать сообщения

BB-коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.
Быстрый переход


Часовой пояс GMT +3, время: 13:56.


 

Сайт

Форум

FAQ

Соглашения

Прочее

 

Copyright © Форум "Delphi Sources" by BrokenByte Software, 2004-2025