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

Вниз

Как узнать есть ли привод CD-ROM в компе   Найти похожие ветки 

 
maxim2 ©   (2002-12-12 14:14) [0]

Привет всем!
Вот собсно и всё.


 
AngeL B.   (2002-12-12 15:27) [1]



function CdromPresent: Boolean;
var
dr: Char;
begin
Result := false;
for dr:="a" to "z" do
if GetDriveType(dr + ":\") = DRIVE_CDROM then
begin
Result := true;
break;
end;
end;


 
maxim2 ©   (2002-12-12 21:19) [2]

Спасибо!


 
Anatoly Podgoretsky ©   (2002-12-12 21:33) [3]

Я бы немного модернизировал, что бы было универсальннее

function CdromsNum: Integer;
var
dr: Char;
begin
Result := 0;
for dr:= "a" to "z" do
if GetDriveType(dr + ":\") = DRIVE_CDROM then
begin
Result := Result + 1;
end;
end;

В рехультате будет количество элементов или другой вариант возврщать строку с буквами дисков, Length вернет количество, а сама строка пригодна для работы с дисками без повтороной выборки, тогда


function Cdroms: string;
var
dr: Char;
begin
Result := "";
for dr:= "a" to "z" do
if GetDriveType(dr + ":\") = DRIVE_CDROM then
begin
Result := Result + Dr;
end;
end;


Эти три варианта перекрываю большинство потребностей


 
AngeL B.   (2002-12-13 23:46) [4]


> 2 Anatoly Podgoretsky

Нууу, если будем говорить об универсальности, то давай заодно вспомним, что дисков на самом деле не 26, а 32. Включая экзотические ]:\ [:\ и прочие.
И для начала надо бы определить их наличие функцией GetLogicalDrives.

PS: Между прочим ни Explorer ни FAR их непонимают, несмотря на то, что они есть и доступны из командной строки (cmd.exe).


 
Anatoly Podgoretsky ©   (2002-12-14 00:08) [5]

Так чего же ты мне это говоришь, начальный код предложил ты, я предложид дпополнение для твоей реализации или ты просто сомневаешься знаю я или нет про функцию GetLogicalDrives, можно и ее использовать, а затем уже проверять типы по ней, нет проблем. Также вкурсе, что дисков не 26, а 32.
Модернизации предложены совсем с другой целью, как правило не достаточно знать есть ли СД, а так же и их идентификаторы.


 
AngeL B.   (2002-12-14 11:26) [6]


> как правило не достаточно знать есть ли СД, а так же и их
> идентификаторы.

Согласен полностью. Тогда твой второй вариант самый лучший.
Просто заводила темы просил вещь и я ее ему дал.
А про GetLogicalDrives я писал скорее не тебе, а опять же товарищу и иже с ним (ведь людЯм же трудно в MSDN залезть, лучше n раз форум почитать).


 
Anatoly Podgoretsky ©   (2002-12-14 11:42) [7]

Возврат в виде строки очень удобен, так как сразу отвечает на несколько вопросов есть ли вообще диски
Length=0, тоже о их количестве, и их имена [] и можно обработать все диски в цикле.


 
TCrash ©   (2002-12-15 00:25) [8]

Возник связаный вопрос.
Насколько я помню W2k (возможно и ХР) умеет понимать логические диски без буквы. Как быть в таком случае.


 
AngeL B.   (2002-12-15 11:02) [9]

Ну что, если диск не отображен на букву, то это значит всего лишь, что в Windows NT Object Manager не прописана символическая связь буквы на устройство, но само устройство там все равно присутствует. Найти его можно в двух папках менеджера.

1) \??
2) \Device

Значатся они под именами Cdrom0, Cdrom1 и т.д.

За более подробной информацией на www.sysinternals.com или найди книгу "Недокументированные возможности Windows NT"


 
Centr   (2003-01-20 05:14) [10]

Попробовал ваш инсходник,
в строке:
if GetDriveType(dr + ":\") = DRIVE_CDROM then
выдает ошибку:
Incompatible types: "Char" and "PChar".
И че делать?


 
AngeL B.   (2003-01-20 12:11) [11]

выучить паскаль и исправить элементарную ошибку


 
Centr   (2003-01-21 08:15) [12]

>>AngeL B.
>>выучить паскаль и исправить элементарную ошибку

И нафига тогда давать нерабочий код?


 
Игорь Шевченко ©   (2003-01-21 09:35) [13]

Для NT-систем (WinNT, Win2K, WinXP) в кладовке, раздел "Готовые программы" лежит программа QuerySystemInformation, которая определяет, сколько каких устройств в системе находится.


 
P@SHA   (2003-01-31 19:52) [14]


> Попробовал ваш инсходник,
> в строке:
> if GetDriveType(dr + ":\") = DRIVE_CDROM then
> выдает ошибку:
> Incompatible types: "Char" and "PChar".
> И че делать?

Попробуй написать
...
if getdrivetype(PChar(dr + ":\") = ...


 
P@SHA   (2003-01-31 19:54) [15]

блин, скобочку одну забыл дописать..
...
if getdrivetype(PChar(dr + ":\")) = ...


 
Diamond Cat ©   (2003-01-31 23:42) [16]

2 P@sha: зря ты в конце многоточие поставил , а то товарищь Centr начнет компилировать, а компилятор ему скажет что нибудь типа "Expression expected but ".." found" опять вопросы пойдут


 
P@SHA   (2003-02-01 16:53) [17]

2 Diamonnd Cat: думаю, он догадается, что я имел ввиду...
:)


 
Centr   (2003-02-04 10:38) [18]

>>P@SHA: Сенькс, я выучил паскаль.
>>Diamond Cat: а че ты еще не сказал что перед = надо ставить :, А?


 
MARcoDEN ©   (2003-02-06 10:31) [19]

procedure TForm1.Button1Click(Sender: TObject);
var
w:dword;
Root:string;
i:integer;
begin
w:=GetLogicalDrives;
Root := "#:\";
for i := 0 to 25 do
begin
Root[1] := Char(Ord("A")+i);
if (W and (1 shl i))>0 then
if GetDriveType(Pchar(Root)) = DRIVE_CDROM then
Form1.Label1.Caption:=Root;
end;
end;


 
ZZ ©   (2003-02-06 16:17) [20]

Интересно все это. А как ваш код справится с тем, что у меня CD-ROM находится в C:\CD\TEAK ?? А вот буковки ему не досталось...

</C:\CD>dir
Том в устройстве C имеет метку SYSTEM
Серийный номер тома: E41C-E7BA

Содержимое папки C:\CD

23.12.2002 07:57 <DIR> .
23.12.2002 07:57 <DIR> ..
26.08.2002 11:33 <JUNCTION> SAMSUNG
13.11.2002 09:41 <JUNCTION> TEAK
23.12.2002 07:57 <JUNCTION> VIRTUAL01
0 файлов 0 байт
5 папок 1 526 981 120 байт свободноCODE>



Страницы: 1 вся ветка

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

Наверх




Память: 0.51 MB
Время: 0.014 c
1-100294
Step[B.M.]
2003-03-18 23:52
2003.03.31
Как получить количество дней в месяце учитывая высокосные года?


1-100281
mmmh
2003-03-18 21:27
2003.03.31
Как отсортировать String grig так чтобы сначала шли строки полны


7-100475
Ionv
2003-02-06 14:00
2003.03.31
Обновление экрана


3-100172
Sava
2003-03-13 08:51
2003.03.31
Как получить имя таблицы !?!?!?


14-100409
Ahmad K
2003-03-09 21:02
2003.03.31
Хакеры или ламеры?