Форум: "WinAPI";
Текущий архив: 2005.12.25;
Скачать: [xml.tar.bz2];
ВнизОпределение букв дисков Найти похожие ветки
← →
zaN0za © (2005-10-25 16:54) [0]уважаемые мастера! подскажите пожалуйста что я делаю не правильно:
function get_disks:PChar;
var
count : DWORD;
buf : PChar;
begin
for count:=0 to 25 do
if (GetLogicalDrives and (1 shl count) <> 0) then
begin
lstrcat(buf, PChar(Ord("A") + count));
end;
Result := buf;
end;
если можно - наглядный пример.
спасибо за внимание.
← →
Игорь Шевченко © (2005-10-25 17:02) [1]
> что я делаю не правильно:
память для buf не выделяешь
← →
zaN0za © (2005-10-25 17:52) [2]
> Игорь Шевченко
например:
getmem(buf,255);
...
freemem(buf,255);
я правильно вас понял?
← →
zaN0za © (2005-10-25 18:25) [3]вариант с getmem не сработал
сделал так:function get_disks: PChar;
var
count : DWORD;
begin
for count:=0 to 25 do
if (GetLogicalDrives and (1 shl count) <> 0) then
Result := PChar(Result + Char(Ord("A") + count));
end;
но мне хотелось бы не использовать функцию PChar
← →
Игорь Шевченко © (2005-10-25 18:27) [4]GetLogicalDriveStrings
← →
zaN0za © (2005-10-25 19:27) [5]
> Игорь Шевченко
спасибо. а как сделать чтоб она выводила все диски а не только первый?
← →
begin...end © (2005-10-25 19:32) [6]> zaN0za © (25.10.05 19:27) [5]
GetLogicalDriveStrings даёт список корневых каталогов всех дисков. Просто они разделены нулевым символом.
← →
zaN0za © (2005-10-25 20:04) [7]
> begin...end © (25.10.05 19:32) [6]
делаю так:
function get_disks:pchar;
var
drv_list : pChar;
begin
getmem(drv_list,128);
GetLogicalDriveStrings(128,drv_list);
result := drv_list;
end;
а каким образом мне сделать чтоб result содержал только их буквы ("ACD...")?
← →
Zeqfreed © (2005-10-25 20:36) [8]zaN0za © (25.10.05 20:04) [7]
procedure GetLogicalDrivesLetters(var Dest : TStrings; const clear : Boolean = false);
var
buf : array[0..103] of Char;
i, num : Integer;
begin
if not Assigned(Dest) then raise Exception.Create("The destination list isn""t assigned");
num := GetLogicalDriveStrings(104, @buf) + 1;
if clear then Dest.Clear;
for i := 0 to (num div 4 - 1) do begin
if (i > 0) then buf[i*4-1] := #32;
Dest.Add(Copy(buf, i*4+1, 3));
end;
end;
Например таким.
← →
Игорь Шевченко © (2005-10-26 09:48) [9]http://www.schevchenko.net.ru/SRC/DeviceIoControl_60.zip
Страницы: 1 вся ветка
Форум: "WinAPI";
Текущий архив: 2005.12.25;
Скачать: [xml.tar.bz2];
Память: 0.46 MB
Время: 0.016 c