![]() |
|
|
|||||||
| Регистрация | << Правила форума >> | FAQ | Пользователи | Календарь | Поиск | Сообщения за сегодня | Все разделы прочитаны |
![]() |
|
|
Опции темы | Поиск в этой теме | Опции просмотра |
|
#1
|
||||
|
||||
|
Уважаемые форумчане, подскажите как определить букву смонтированного образа в виртуальный привод зная его название и какие файлы должны лежать в корне этого диска?
Делаю так: Код:
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
|
||||
|
||||
|
Ну точно не знаю поможет или нет, но взгляни вот на вложение.umount.rar
Программа получает все смонтированные устройства, и позволяет делать "безопасное извлечение". Писал для извлечения флешек - баловался. Я думаю, что что-нибудь полезное для себя найдешь. Написано в консоле. |
| Этот пользователь сказал Спасибо SCrat.ORS за это полезное сообщение: | ||
Alloc (21.05.2015)
| ||
|
#3
|
||||
|
||||
|
Цитата:
спасибо за исходник, пригодится.. но я не придумал ничего лучше чем воспользоваться утилитой "Devcon" для отключения\включения устройств. А что касается моего первого вопроса, насчет функции GetDiskName? как лучше сделать? |
|
#4
|
||||
|
||||
|
Переделай функцию перечисления устройств.
вот к примеру: Код:
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
|
||||
|
||||
|
спасибо большое за совет)
|