Форум: "Система";
Текущий архив: 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