Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Система";
Текущий архив: 2003.03.31;
Скачать: [xml.tar.bz2];

Вниз

Как узнать есть ли привод 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;
Скачать: [xml.tar.bz2];

Наверх




Память: 0.49 MB
Время: 0.008 c
7-100491
BANick
2003-02-04 12:30
2003.03.31
Object inspector


3-100152
MsGuns
2003-03-12 13:16
2003.03.31
Триггер заклинило


3-100186
Roki
2003-03-12 10:15
2003.03.31
Как в IB(FireBird) снимать статистику доступа к БД?


6-100368
Вася_
2003-02-07 14:53
2003.03.31
Как заполнить форму?


1-100225
JibSkeart
2003-03-20 13:56
2003.03.31
Как узнать какая компонента(имя) вызвала процедуру





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский