Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2005.12.25;
Скачать: CL | DM;

Вниз

Определение букв дисков   Найти похожие ветки 

 
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 вся ветка

Текущий архив: 2005.12.25;
Скачать: CL | DM;

Наверх




Память: 0.48 MB
Время: 0.042 c
1-1133454512
Aleksandr.
2005-12-01 19:28
2005.12.25
Как можно узнать, поддерживает ли Excel задаваемый цвет?


14-1133330138
123321
2005-11-30 08:55
2005.12.25
Кипелов - наркоман?


2-1134115604
Slaga
2005-12-09 11:06
2005.12.25
Написание Service s


14-1133271489
baks_uz
2005-11-29 16:38
2005.12.25
Дельфи глазами Хакера


14-1133276305
Nic
2005-11-29 17:58
2005.12.25
Нахождение в академии - хорошо или нет?