본문 바로가기

카테고리 없음

[시스템] 플로피(floppy) 디스크 드라이브의 타입 구하기

unit Unit1;

interface

uses
  Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs,
  StdCtrls;

type
  TForm1 = class(TForm)
    Button1: TButton;
    procedure Button1Click(Sender: TObject);
  private
    { Private declarations }
  public
    { Public declarations }
  end;

var
  Form1: TForm1;

implementation
{$R *.DFM}

function FloppyDriveSize(Drive: Char): String;
type
   PDIOC_REG = ^TDIOC_Registers;
   TDIOC_Registers = record
     Reg_EBX, Reg_EDX, Reg_ECX, Reg_EAX,
     Reg_EDI, Reg_ESI, Reg_Flags : DWORD
   end;
const
  VWIN32_DIOC_DOS_INT13 = 4;
var
  H : THandle;
  R : TDIOC_Registers;
  C : DWORD;
begin
  Result := '모름';
  H := CreateFile('\.VWIN32', 0, 0, nil, 0, 0, 0);
  if H <> INVALID_HANDLE_VALUE then
    try
      R.Reg_EAX := $800;
      R.Reg_EDX := ord(upcase(Drive)) - Ord('A');
      if DeviceIOControl(H, VWIN32_DIOC_DOS_INT13, @R,
                         SizeOf (R), @R, SizeOf (R), C, nil) and
         (R.Reg_Flags and 1 = 0) then
        if R.Reg_EBX and $FF < 3 then
          Result := '5.25 플로피'
        else
          Result := '3.5 플로피';
    finally
      CloseHandle(H);
    end
end;

procedure TForm1.Button1Click(Sender: TObject);
begin
  ShowMessage(FloppyDriveSize('A')); // A 드라이브
end;

end.