Q&A

  • 초보프로그래머를 도와주세요
델파이를 시작한지 얼마 되지 않습니다.

하드 디스크인지 아닌지 구별하는 방법하구요

하드 디스크의 총 갯수를 체크할수 있나요

자세히 부탁 드릴께요





2  COMMENTS
  • Profile
    최용일 2000.04.19 20:30
    안녕하세요. 최용일입니다.



    디스크의 타입정보는 GetDriveType란 API함수를 이용하시면 알 수 있습니다.



    드라이브명은 A부터 Z까지 26개만 사용할 수 있습니다. 그중 A와 B는 플로피



    드라이브를 위하여 예약되어 있습니다. 그러므로 하드디스크는 C이상부터의



    이름을 가질 수 있습니다. GetDriveType에 인자로 드라이브의 루트디렉토리를



    넣어주시면 드라이브 타입을 알려줍니다.



    var

    Drive: array[0..4] of Char;

    I: Integer;

    TotalHardDiskCount: Integer;

    begin

    Drive := 'c:';

    TotalHardDiskCount := 0;

    for I := Ord('C') to Ord('Z') do

    begin

    Drive[0] := Chr(I);

    if GetDriveType(Drive) = DRIVE_FIXED then

    begin

    ShowMessage(Drive[0] + ': 드라이브는 고정된 하드디스크드라이브입니다.');

    Inc(TotalHardDiskCount);

    end;

    end;

    ShowMessage('총 하드디스크의 갯수는 ' + IntToStr(TotalHardDiskCount) + '개입니다.');

    end;



    GetDriveType의 리턴값 설명입니다.

    0 The drive type cannot be determined.

    1 The root directory does not exist.

    DRIVE_REMOVABLE The drive can be removed from the drive.

    DRIVE_FIXED The disk cannot be removed from the drive.

    DRIVE_REMOTE The drive is a remote (network) drive.

    DRIVE_CDROM The drive is a CD-ROM drive.

    DRIVE_RAMDISK The drive is a RAM disk.



    ^^ 항상 즐코하세요.



    엄주평 wrote:

    > 델파이를 시작한지 얼마 되지 않습니다.

    > 하드 디스크인지 아닌지 구별하는 방법하구요

    > 하드 디스크의 총 갯수를 체크할수 있나요

    > 자세히 부탁 드릴께요

    >

    >

  • Profile
    최석기 2000.04.19 20:04
    엄주평 wrote:

    > 델파이를 시작한지 얼마 되지 않습니다.

    > 하드 디스크인지 아닌지 구별하는 방법하구요

    > 하드 디스크의 총 갯수를 체크할수 있나요

    > 자세히 부탁 드릴께요

    >

    >

    PC에 설치된 드리이브 목록을 구하는 소스인데 참고 하세요..

    하드디스크인지는 GetDriveType 함수를 사용하여 알 수 있습니다.



    unit Unit1;



    interface



    uses

    Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs,

    StdCtrls;



    type

    TForm1 = class(TForm)

    Button1: TButton;

    Memo1: TMemo;

    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 := 'unknown';

    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 ListDrives(Strings: TStrings);

    const

    BufSize = 256;

    var

    Buffer: PChar;

    P: PChar;

    DrivePchar: array[0..5] of Char;

    iDriveType: Integer;

    begin

    GetMem(Buffer, BufSize);

    try

    Strings.BeginUpdate;

    try

    Strings.Clear;

    // 시스템에 설치된 드라이브 목록 구하기(형태 c:d:)

    if GetLogicalDriveStrings(BufSize, Buffer) <> 0 then

    begin

    P := Buffer;

    while P^ <> #0 do

    begin

    iDriveType := GetDriveType(P);

    case iDriveType of

    DRIVE_REMOVABLE:

    begin

    Strings.Add(P+' - Floppy drive ('+

    FloppyDriveSize(P[0])+')'); // 인치 구분

    end;

    DRIVE_FIXED:

    Strings.Add(P+' - Hard drive');

    DRIVE_REMOTE:

    Strings.Add(P+' - Network drive');

    DRIVE_CDROM:

    Strings.Add(P+' - CD-ROM drive');

    DRIVE_RAMDISK:

    Strings.Add(P+' - RAM drive');

    end;

    Inc(P, StrLen(P) + 1);

    end;

    end;

    finally

    Strings.EndUpdate;

    end;

    finally

    FreeMem(Buffer, BufSize);

    end;

    end;



    procedure TForm1.Button1Click(Sender: TObject);

    begin

    ListDrives(Memo1.Lines);

    end;



    end.

    • hjcho96
    • 2000.04.20 01:42
    • 1 COMMENTS
    • /
    • 0 LIKES
    • sjd
      2000.04.20 05:14
      hjcho96 wrote: > win95 > computer1->interbase server 설치 > computer2->interbase client 설치 > B...
    • 델초보
    • 2000.04.20 01:42
    • 1 COMMENTS
    • /
    • 0 LIKES
    • 갱민이
      2000.04.20 02:50
      델초보 wrote: > 안녕하세여? > > 델초보임당 > > 다른 분의 소스 가져다가 컴파일 하는 뎅 리소스 ...
    • 초보1
    • 2000.04.20 01:04
    • 3 COMMENTS
    • /
    • 0 LIKES
    • ACCESS
      2000.04.20 02:50
      초보1 wrote: > 초보자가 올립니다. > query, datasource, dbgrid 가 서로연결되어있고, > > dbgrid...
    • 구창민
      2000.04.20 01:49
      초보1 wrote: > 초보자가 올립니다. > query, datasource, dbgrid 가 서로연결되어있고, > > dbgrid...
    • 하얀까마귀
      2000.04.20 08:30
      안녕하세요 하얀까마귀 입니다.. 구창민님의 말씀처럼.. dbgrid에서 어떤 입력을 하는건 별로 안좋다고 ...
    • 맹주형
    • 2000.04.20 00:59
    • 2 COMMENTS
    • /
    • 0 LIKES
    • 강민주
      2000.04.20 01:33
      맹주형 wrote: > DB에 있는 데이터를 프린터로 출력을 하려고 합니다. > "델파이"라는 데이터가 있을경우...
    • 내가 찾아볼께
      2000.09.02 09:23
      강민주 wrote: > 맹주형 wrote: > > DB에 있는 데이터를 프린터로 출력을 하려고 합니다. > > "델파이"...
    • 황남철
    • 2000.04.19 23:50
    • 3 COMMENTS
    • /
    • 0 LIKES
    • 최용일
      2000.04.19 23:58
      안녕하세요. 최용일입니다. Copy(A ,2, Length(A) - 1); ^^ 항상 즐코하세요. 황남철 wrote: > ...
    • 강인규
      2000.04.20 00:19
      테스트해보지 않았습니다만 length명령을 사용하시면 될듯합니다. copy(a,2,length(a)); 하시면 됩니...
    • 하얀까마귀
      2000.04.20 08:36
      안녕하세요 하얀까마귀 입니다.. 다른분들이 답변올리셧는데.. 저두 한마디.. 후후 if pos('e' , a) ...
    • 최용일
      2000.04.19 23:07
      안녕하세요. 최용일입니다. Anchors 속성을 사용해 보세요. True, False바꾸어 보면서 몇번 실행해보시...
    • 한승수
      2000.04.19 23:27
      예..감사합니다..그런데요.. 툴바같은 컴포넌트는 버튼을 추가했을경우..폼의 크기가 버튼의 합의 크기...
    • 최용일
      2000.04.20 00:02
      안녕하세요. 최용일입니다. 폼에 스크롤바를 생기지 않게 하실려면 폼의 AutoScroll속성값을 False로 해...
    • 최진석
    • 2000.04.19 22:25
    • 1 COMMENTS
    • /
    • 0 LIKES
    • 최용일
      2000.04.19 23:01
      안녕하세요. 최용일입니다. 델파이에서 트리노드에 Data란 속성이 있습니다. 아마도 비베의 트리노드에 ...
    • 이치형
      2000.04.20 02:41
      파이공주 wrote: > > 이종DB 간 inset 시.. 문제가 발생해요..고수님들의 사려깊은 조언 .. > 하나...
    • 파이공주
      2000.04.21 23:06
      이치형 wrote: > 파이공주 wrote: > > > > 이종DB 간 inset 시.. 문제가 발생해요..고수님들의 사려...
    • 이치형
      2000.04.22 05:23
      파이공주 wrote: > 이치형 wrote: > > 파이공주 wrote: > > > > > > 이종DB 간 inset 시.. 문제가 ...
    • 최일성
    • 2000.04.19 21:16
    • 1 COMMENTS
    • /
    • 0 LIKES
    • 조규춘
      2000.04.19 21:36
      최일성 wrote: > 안녕하십니까? > 델파이를 공부중인 초보자거든여! > 델파이 5.0을 사용하고 있는데 co...
    • 최용일
      2000.04.19 21:58
      안녕하세요. 최용일입니다. TimeStamp를 쓰시면 간단하게 구하실 수 있습니다. function TForm1.GetD...
    • knight
    • 2000.04.19 20:47
    • 0 COMMENTS
    • /
    • 0 LIKES
    • 고종일
    • 2000.04.19 20:05
    • 1 COMMENTS
    • /
    • 0 LIKES
    • 최용일
      2000.04.19 20:45
      안녕하세요. 최용일입니다. 뭐 여러가지 방법이 있겠지만 메세지를 사용하시는것이 제일 간단할 것 같은...
    • 엄주평
    • 2000.04.19 19:42
    • 2 COMMENTS
    • /
    • 0 LIKES
    • 최용일
      2000.04.19 20:30
      안녕하세요. 최용일입니다. 디스크의 타입정보는 GetDriveType란 API함수를 이용하시면 알 수 있습니다....
    • 최석기
      2000.04.19 20:04
      엄주평 wrote: > 델파이를 시작한지 얼마 되지 않습니다. > 하드 디스크인지 아닌지 구별하는 방법하구요...
    • HART
      2000.04.19 18:29
      답은 모두 알는데 조합이 안되것 같은데. 먼저 출력하기 전에 prepare를 하지면 pagecount에 출력하려는 출...
    • 최은석
      2000.04.20 18:37
      초보 wrote: > 4시간동안 헤맸어요..머리가 무척나쁜건지 일주일 봤는데 모르겠네요. > 폼에서 디자인하...
    • Mr.Q
      2000.04.20 05:00
      초보 wrote: > 4시간동안 헤맸어요..머리가 무척나쁜건지 일주일 봤는데 모르겠네요. > 폼에서 디자인하...
    • HART
      2000.04.19 18:57
      조금은 무시한 방법이되 숫자인지 확실하게 구분할 수 있습니다. function numbercheck(s : string) : b...
    • 최석기
      2000.04.19 18:36
      초보 wrote: > 4시간동안 헤맸어요..머리가 무척나쁜건지 일주일 봤는데 모르겠네요. > 폼에서 디자인하...