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

Delphi Sources



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

Ответ
 
Опции темы Поиск в этой теме Опции просмотра
  #1  
Старый 17.07.2006, 15:29
jeckp jeckp вне форума
Прохожий
 
Регистрация: 04.05.2006
Сообщения: 11
Версия Delphi: Delphi 10.3
Репутация: 10
По умолчанию Как распознать тип устройства?

Подскажите как можно распознать тип устройства (Flash, CD, DWD, HD, FD, MO, Zip и другие) и как можно (за)разблокировать съемные устройства от случайного их извлечения.
Ответить с цитированием
  #2  
Старый 17.07.2006, 17:54
Аватар для Decoding
Decoding Decoding вне форума
Местный
 
Регистрация: 03.06.2006
Адрес: Почту найдете на моем сайте
Сообщения: 576
Версия Delphi: D10.2
Репутация: 214
По умолчанию

Код:
function CheckDriveType(Drive: Byte): string;
var
  DriveLetter: Char;
  DriveType: UInt;
begin
   DriveLetter := Chr( Drive + $41 );
   DriveType := GetDriveType( PChar( DriveLetter + ':\' ) );
   case DriveType of
      0               : Result := '?';
      1               : Result := 'Path does not exists';
      DRIVE_REMOVABLE : Result := 'Removable';
      DRIVE_FIXED     : Result := 'Fixed';
      DRIVE_REMOTE    : Result := 'Remote';
      DRIVE_CDROM     : Result := 'CD_ROM';
      DRIVE_RAMDISK   : Result := 'RAMDISK';
      else
         Result := 'Unknown'
   end;
end;

procedure TForm1.Button1Click(Sender: TObject);
var
  i: 0..25;
begin
   for i := 0 to 25 do
      if CheckDriveType( i ) <> 'Path does not exists' then
         Memo1.Lines.Add( Format( '%s - %s', [chr( i+$41 ), CheckDriveType( i )] ) );
end;

Функция CheckDriveType выдаст тебе тип найденного устройства. Тут есть небольшой нюанс. Функция выдаст Removable для съемных устройств, таких, например, как Floppy или USB Flash. Тут смотри по индексу: если i = 0 или 1, то это Floppy, а если i > 1, то это USB Flash (или другое съемное устройство).

Последний раз редактировалось Decoding, 17.07.2006 в 20:52.
Ответить с цитированием
  #3  
Старый 17.07.2006, 18:02
Аватар для Decoding
Decoding Decoding вне форума
Местный
 
Регистрация: 03.06.2006
Адрес: Почту найдете на моем сайте
Сообщения: 576
Версия Delphi: D10.2
Репутация: 214
По умолчанию

Заблокировать/разблокировать CD можно так:

Код:
procedure CD_Lock( DriveLetter: string; Locked: Boolean );
const
  IOCTL_STORAGE_MEDIA_REMOVAL = $002D4804;
var
  hDrive: THandle;
  Returned: DWORD;
begin
   hDrive := CreateFile( PChar( '\\.\' + DriveLetter ), GENERIC_READ,
                         FILE_SHARE_READ, nil, OPEN_EXISTING,
                         FILE_ATTRIBUTE_NORMAL, 0 );
   if GetLastError <> 0 then
      MessageDlg( 'Ошибка: ' + IntToStr( GetLastError ), mtError, [mbOK], 0 );
   try
      if not DeviceIoControl( hDrive,
                              IOCTL_STORAGE_MEDIA_REMOVAL, // PREVENT_MEDIA_REMOVAL,
                              @Locked, SizeOf( Locked ),
                              nil, 0, Returned, nil ) then
         MessageDlg( 'Ошибка: ' + IntToStr( GetLastError ), mtError, [mbOK], 0 );
   finally
      CloseHandle( hDrive );
   end;
end;

procedure TForm1.Button1Click(Sender: TObject);
begin
   // Заблокировать
   CD_Lock( 'f:', true );
   // Разблокировать
   CD_Lock( 'f:', false );
end;
Ответить с цитированием
Ответ


Delphi Sources

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

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

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

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


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


 

Сайт

Форум

FAQ

RSS лента

Прочее

 

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

ВКонтакте   Facebook   Twitter