Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Низкоуровневое программирование > Win Api
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 21.02.2007, 08:30   #1
Prowler
Форумчанин
 
Регистрация: 30.11.2006
Сообщений: 128
По умолчанию Отобразить имеющиеся диски

Нужно выяснить есть ли в системе диск D:. Вот код с Delphi world:


procedure List_Drives;


var
r:LongWord;
Drives: array[0..20] of char;
pDrive: PChar;
begin
drivelist:=tlist.Create;
r:= GetLogicalDriveStrings(SizeOf(Drive s), Drives);
if r = 0 then Exit;
if r > SizeOf(Drives) then
raise Exception.Create(SysErrorMessage(ER ROR_OUTOFMEMORY));

pDrive := Drives; //Вот тут не понятно что мы получаем в pDrive

while pDrive^ <> #0 do
begin
if GetDriveType(pDrive) = DRIVE_FIXED then

Inc(pDrive, 4); //И почему здесь на четыре увеличиваем?
end;
end;

Посмотрите комментарии.
nosce te ipsumj...
Prowler вне форума Ответить с цитированием
Старый 21.02.2007, 20:23   #2
rpy3uH
добрый няша
Старожил
 
Аватар для rpy3uH
 
Регистрация: 29.10.2006
Сообщений: 4,804
По умолчанию

попробуй так

Код:
h:=CreateFile('\\.\D:',GENERIC_READ,FILE_SHARE_READ,0,OPEN_EXISTING,0,0);
  if h=INVALID_HANDLE_VALUE then
   ShowMessage('net');
  CloseHandle(h);
у меня почему то не срабатывает с диском E: (у меня HDD разбит 4 диска)
но всё равно попробуй
rpy3uH вне форума Ответить с цитированием
Старый 22.02.2007, 06:58   #3
Prowler
Форумчанин
 
Регистрация: 30.11.2006
Сообщений: 128
По умолчанию

Всё-таки хотелось бы услышать ответ на свой вопрос, ну или хотябы предположение. Неужели никто не знает!?
nosce te ipsumj...
Prowler вне форума Ответить с цитированием
Старый 22.02.2007, 13:02   #4
mihali4
*
Старожил
 
Регистрация: 22.11.2006
Сообщений: 9,201
По умолчанию

Цитата:
Всё-таки хотелось бы услышать ответ на свой вопрос
Если смотреть на заголовок темы, вопрос звучит так:
Цитата:
Отобразить имеющиеся диски
Для реализации выбран какой-то сложный, с ненужными наворотами способ...
Делается все гораздо проще:
procedure TForm1.Button1Click(Sender: TObject);
var ld : DWORD;
i : integer;
begin
ld := GetLogicalDrives;
for i := 0 to 25 do begin
if (ld and (1 shl i)) <> 0 then
Memo1.Lines.Add(Char(Ord('A') + i) + ':\');
end;
end;
mihali4 вне форума Ответить с цитированием
Старый 22.02.2007, 15:17   #5
Prowler
Форумчанин
 
Регистрация: 30.11.2006
Сообщений: 128
По умолчанию

Спасибо! Этот способ, беспорно проще!
nosce te ipsumj...
Prowler вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
узнать какие диски есь в системе AIst Общие вопросы Delphi 4 08.08.2008 18:42
DVD-RW дисковод не хочет читать некоторые диски ERASERROR Компьютерное железо 10 02.05.2008 01:00
DVD после записи не читает собственные диски photozaz Свободное общение 14 10.04.2008 12:17
лицензионные диски eldar-abd Софт 4 27.05.2007 16:39