![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
Определение букв дисков
zaN0za © (2005-10-25 16:54:00)уважаемые мастера! подскажите пожалуйста что я делаю не правильно:
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-26 09:48:00) [1]http://www.schevchenko.net.ru/SRC/DeviceIoControl_60.zip
Zeqfreed (2005-10-25 20:36:00) [2]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;
Например таким.
zaN0za (2005-10-25 20:04:00) [3]
> 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...')?
begin...end (2005-10-25 19:32:00) [4]> zaN0za © (25.10.05 19:27) [5]
GetLogicalDriveStrings даёт список корневых каталогов всех дисков. Просто они разделены нулевым символом.
zaN0za (2005-10-25 19:27:00) [5]
> Игорь Шевченко
спасибо. а как сделать чтоб она выводила все диски а не только первый?
Игорь Шевченко (2005-10-25 18:27:00) [6]GetLogicalDriveStrings
zaN0za (2005-10-25 18:25:00) [7]вариант с 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
zaN0za (2005-10-25 17:52:00) [8]
> Игорь Шевченко
например:
getmem(buf,255);
...
freemem(buf,255);
я правильно вас понял?
Игорь Шевченко (2005-10-25 17:02:00) [9]
> что я делаю не правильно:
память для buf не выделяешь