GetLogicalDriveStrings-獲取系統(tǒng)中存在的邏輯驅(qū)動(dòng)器字符串

字號(hào):

//聲明:GetLogicalDriveStrings(
    nBufferLength: DWORD; {緩沖區(qū)大小}
    lpBuffer: PAnsiChar  {緩沖區(qū)}
    ): DWORD;//緩沖區(qū)的結(jié)果是這樣儲(chǔ)存的: 譬如 A 驅(qū)動(dòng)器會(huì)表示為 A: 后面隔一個(gè)空字符, 依次向后;
    //所以每個(gè)驅(qū)動(dòng)器會(huì)占 4 字節(jié).
    //舉例:procedure TForm1.FormCreate(Sender: TObject);
    var
    PStr: PChar;
    DriveArr: array[0..4*26] of Char; {每個(gè)驅(qū)動(dòng)器 4 字節(jié), 最多 26 個(gè)驅(qū)動(dòng)器}
    begin
    GetLogicalDriveStrings(SizeOf(DriveArr), DriveArr); {函數(shù)調(diào)用就這么簡單}
    PStr := DriveArr;         {因?yàn)?PStr 是 #0 結(jié)尾的, 所以現(xiàn)在它指向的是前 4 個(gè)字節(jié)}
    Memo1.Clear;           {清空 Memo}
    While PStr<>nil do
    begin
    Memo1.Lines.Add(PStr);
    Inc(PStr,StrLen(PStr)+1);    {字符串指針是可以運(yùn)算的, 這里相當(dāng)于指針移動(dòng) 4 個(gè)位置, 而指向下一個(gè)}
    if(Byte(PStr[0]) = 0) then PStr := nil; {如果下一個(gè)的第一個(gè)字符就是空, 就是沒有了, While 等著 nil 終止呢}
    end;
    end;