|
CD-ROM, CD-ROM... Windows API |
|
Zpět
Domů |
V článku se podíváme na některé možnosti, které Windows nabízejí pro práci s jednotkou CD-ROM.
Seznam jednotekPro získání seznamu nainstalovaných jednotek CD-ROM použijeme funkceGetLogicalDrives a GetDriveType . První z jmenovaných vrací bitovou masku diskových jednotek. Nejnižší bit vráceného dvojslova reprezentuje jednotku A:, druhý bit jednotku B: atd. Pokud je jednotka momentálně dostupná je příslušný bit nastaven. GetDriveType má jeden parametr specifikující kořenový adresář jednotky, jejíž typ chceme zjistit. Výsledkem je konstanta DRIVE_xxx , nás bude zajímat především hodnota DRIVE_CDROM . Pojďme se podívat na konkrétní příklad:
Získanou bitovou masku procházíme bit po bitu (if (Drives and 1) = 1 ... a Drives := Drives shr 1 ), pokud je bit nastaven, zjistíme jemu odpovídající písmeno disku (Chr(Ord('A')+i) ) a nakonec určíme, zda je disk CD-ROM mechanika (GetDriveType( ...) = DRIVE_CDROM ).
Test přítomnosti CD v jednotceK zjištění, zda jednotka obsahuje disk nebo zda je prázdná můžeme v Delphi použít funkciDirectoryExists .
Nejdříve voláním SetErrorMode(SEM_FAILCRITICALERRORS) řekneme Windows, že se o všechny případné chyby postaráme sami. Pokud bychom to neudělali a volali naši funkci MediumPresent v případě, že by v jednotce nebyl disk, Windows by zobrazily dialogové okno s požadavkem na vložení disku. Takto proběhne vše tichosti. Poté funkcí DirectoryExists zjistíme, zda existuje kořenový adresář na disku CD. Nakonec obnovíme původní chování Windows při výskytu chyby.
Jmenovka a sériové čísloFunkceGetVolumeInformation vrací spoustu užitečných informací o jakékoliv diskové jednotce. My s pomocí této funkce získáme jmenovku a sériové číslo vloženého disku.
Ovládání dvířekNyní si ukažme, jak programově vysouvat a zasouvat dvířka CD-ROM jednotky. Jedním z možných a nejjednodušších postupů je využít služeb Media Control Interface (MCI).
S každým zařízením se přes služby MCI komunikuje prostředníctvím množství příkazů, které jsou zasílány funkcí mciSendCommand . Pro další práci je třeba nejprve dané zařízení otevřít příkazem MCI_OPEN . Záznam TMCI_Open_Parms obsahuje dodatečné parametry (typ a specifikaci) zařízení, které se pokoušíme otevřít. Pokud se systému podaří otevřít námi požadované zařízení, obsahuje prvek záznamu wDeviceID identifikátor, který použijeme při další komunikaci s jednotkou. Příkazem MCI_SET s dodatečným parametrem MCI_SET_DOOR_OPEN nebo MCI_SET_DOOR_CLOSED vysuneme resp. zasuneme dvířka jednotky. Nakonec je třeba otevřené zařízení zavřít příkazem MCI_CLOSE .
Oznámení o otevření / zavření dvířekDvířka už umíme vysouvat a zasouvat, ale občas potřebujeme zjistit, kdy uživatel z jednotky vyjme CD nebo kdy vloží nový disk. Naštěstí Windows posílají oknům zprávuWM_DEVICECHANGE právě když se vyskytne tato událost.
V obsluze zprávy WM_DEVICECHANGE je LParam ukazatel na záznam typu TDevBroadcastVolume , který obsahuje podrobnosti o vzniklé události. Protože umíme obsloužit jen události typu DBT_DEVTYP_VOLUME , zkontrolujeme hlavičku záznamu a pokud se jedná známou událost bude nás zajímat prvek dbcv_unitmask . To je bitová maska jednotky, stejná jako v prvním příkladu, kdy jsme vytvářeli seznam jednotek. Funkcí DriveLetterFromMask (z unit CDTool.pas, ke stažení na konci článku) převedeme bitovou masku na písmeno jednotky. Pak už nás zajímá jen typ události: DBT_DEVICEARRIVAL při vložení nového disku a DBT_DEVICEREMOVECOMPLETE při vyjmutí CD z jednotky.
Automatické přehráníDíky souboru autorun.inf uloženému v kořenovém adresáři disku CD můžeme přiřadit disku ikonku nebo po vložení do jednotky spustit libovolnou aplikaci.
![]() Struktura souboru autorun.inf je podobná struktuře ini souborům. V sekci AutoRun mohou být uvedeny následující položky:
icon Přiřadí disku ikonu. Může být také ve formátu např. aplikace.exe,1 což znamená, že disku bude přiřazena druhá ikona ze souboru aplikace.exe.
label Text, který bude zobrazen u ikony disku. shellexecute Jméno dokumentu nebo programu, který se spustí po vložení disku do jednotky. Pro počítače, kde není nainstalován Internet Explorer 5 nebo vyšší musíte použít místo shellexecute atribut open , který ale umožňuje spouštět jenom aplikace. Pokud po vložení CD chcete zobrazit např. textový soubor musíte vytvořit malý program, který pro otevření dokumentu použije funkci ShellExecute .
Soubor autorun.inf má několik dalších možností, můžete například rozšířit kontextové menu disku, jak je naznačeno na posledních třech řádcích ukázky. Pro Windows XP můžete specifikovat složky, kde bude probíhat vyhledávání ovladačů při instalaci nového zařízení. Navíc soubor autorun.inf se nemusí používat výhradně na discích CD-ROM, ale můžete tak také velmi snadno změnit např. ikonu vašeho pevného disku. Automatickému přehrání disku můžeme zabránit přidržením klávesy Shift při vkládání disku do jednotky. Jak ale zabránit této akci programově?
Při vytvoření formuláře zaregistrujeme zprávu 'QueryCancelAutoPlay' . Potom vždy, když je náš furmulář aktivní a má dojít k automatickému přehrání obdržíme zprávu, jejímž výsledkem bude nenulová hodnota pokud se má automatické přehrání zrušit.
Vypalovací jednotkyNakonec si ukážeme, jaké nové možnosti poskytují Windows XP pro práci s vypalovacími mechanikami.
Rozhraní ICDBurn má tři metody:
GetRecorderDriveLetter - vrací písmeno jednotky, která se používá k zápisu
Burn - spustí průvodce zápisem souborů na CD
HasRecordableDrive - informuje, zda je na počítači nainstalovaná nějaká jednotka, umožňující zápis na disk CD
Rozhraní ICDBurn vytvoříme následovně:
Adresář, kde jsou uloženy soubory před jejich vypálením na disk, zjistíme funkcí SHGetSpecialFolderPath :
DownloadV přiloženém projektu najdete kromě výše zmíněných funkcí také ukázku toho, jak jednotku CD-ROM zamknout a zabránit tak vysunutí disku.Stáhnout projekt pro Delphi 5 (7 KB) Stáhnout ukázkovou aplikaci (182 KB)
|
2003 – 2025 © Manison Softworks. Všechna práva vyhrazena. Poslední aktualizace: 30. 12. 2024 |