Q&A

  • CopyFile시 [완성해야 좋은주말을 맞을수있슴당~~]
좋은 토요일 입니다.



copyfile사용시





copyfile(pchar('c:schedule.exe'), pchar('c:imsischedule.exe'),false);



라는 명령으로 버튼하나만 사용자가 누르면 디렉토리생성에서 설치까지 해야되는데

copyfile에서 중요한건 cd-rom의 *.* file을 copy해서 setup햐야됩니다.

근데 사용자가 cd-rom을 d:로 사용하는지 e:로 사용하는지 어케 자동으로 알죠??



^^ 헬푸미~~

3  COMMENTS
  • Profile
    로비 2000.12.09 19:57
    레지스트리 뒤져 보세요..

    나와요

  • Profile
    남걸호 2000.12.09 22:41
    김영대님의 팁에서 가져온것에 간한단 루틴을 하나 더 넣었답니다.cd롬인지 테스트해보는 루틴잊.......즐거운 주말 보내세요...

    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 }

    Dricve : integer;

    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])+')'); // 인치 구분

    Drive := 0;

    end;

    DRIVE_FIXED:

    begin

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

    Drive := 1;

    end;

    DRIVE_REMOTE:

    begin

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

    Drive := 2;

    end;

    DRIVE_CDROM:

    begin

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

    Drive := 3;

    If IsCDROM(Drive) then

    ShowNessage('cd롬이당.');

    end;

    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;



    Function IsCDROM(Drive: Integer): Boolean; Assembler;

    Asm

    MOV AX,1500h { look for MSCDEX }

    XOR BX,BX

    INT 2fh

    OR BX,BX

    JZ @Finish

    MOV AX,150Bh { check for using CD driver }

    MOV CX,Drive

    INT 2fh

    OR AX,AX

    @Finish:

    End;







    end.



  • Profile
    델파女 2000.12.09 20:18
    로비 wrote:

    > 레지스트리 뒤져 보세요..

    > 나와요





    ~~

    헉!!

    좀더 자세한 답변은 안될까여?

    지송하지만 무슨소린지,,,완전초봅니다... ^^:;