Code: |
mciSendString('Set cdaudio Door Open Wait', nil, 0, handle); mciSendCommand(mp.DeviceID, MCI_SET, MCI_SET_DOOR_CLOSED, 0); |
Основываясь, на этой возможности можно написать классную прогу. Представьте себе: ламерюга с умным видом тайпает какой-нибудь док, а тут его сидюк начинает вести себя как взбесившийся: то откроется, то закроется, то откроется, то закроется, то откроется, то закроется, то откроется, то закроется, то откроется, то закроется, то откроется, то закроется, то откроется, то закроется, то откроется, то закроется... и так, например, каждый час... (или минуту...или секунду...)
Для начала научимся открывать CD-ROM по нажатию простого "батона":
В uses нужно сначала объявить модуль MMSystem:
Code: |
uses MMSystem; |
По нажатию кнопок написать:
Code: |
//Для открытия procedure TForm1.OpenBtnClick(Sender: TObject); begin mciSendString('Set cdaudio door open wait', nil, 0, handle); end;
//Для закрытия procedure TForm1.CloseBtnClick(Sender: TObject); begin mciSendString('Set cdaudio door closed wait', nil, 0, handle); end; |
Ну а если вы уж хотите, чтобы это всё происходило автоматически с периодичностью в несколько минут, тогда выносим наш любимый компонент - Timer. Устанавливаем его свойство Interval в 30000 миллисекунд - это 30 секунд, т.е. каждые полминуты глупый ламерюга будет подскакивать...И на событие OnTimer, предвкушая удовольствие, пишем: сначала в публичных объявлениях объявим переменную логического типа IsOpen для обозначения времени когда открыт CD-ROM
Code: |
public { Public declarations } IsOpen: boolean; |
По созданию окна (OnCreate) устанавливаем эту переменную в false, т.к. изначально, когда наша прога только запускается, CD-ROM не открыт:
Code: |
procedure TForm1.FormCreate(Sender: TObject); begin IsOpen := false; end; |
И наконец, по таймеру пишем:
Code: |
procedure TForm1.Timer1Timer(Sender: TObject); begin if IsOpen = false then begin mciSendString('Set cdaudio door open wait', nil, 0, handle); IsOpen:=true; end else begin mciSendString('Set cdaudio door closed wait', nil, 0, handle); IsOpen:=false; end; end; |
Code: |
// Данная прога извлекает и закравет CD-ROM выбранные в Combobox1 // На форме разместите Button1, Button2 и Combobox1
uses Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms, Dialogs, StdCtrls, ComCtrls, MMSystem;
type TForm1 = class(TForm) Button1: TButton; Button2: TButton; ComboBox1: TComboBox; procedure Button1Click(Sender: TObject); function CloseCD(Drive : string) : Boolean; function OpenCD(Drive : string) : Boolean; procedure FormCreate(Sender: TObject); procedure Button2Click(Sender: TObject); private public end;
var Form1: TForm1; Driv: array [1..25] of string;
implementation
{$R *.dfm}
procedure TForm1.Button1Click(Sender: TObject); begin OpenCD(ComboBox1.Text); end;
function TForm1.OpenCD(Drive: string): Boolean; var Res : MciError; OpenParm: TMCI_Open_Parms; Flags : DWord; S : string; DeviceID : Word; begin Result:=false; S:=Drive; Flags:=mci_Open_Type or mci_Open_Element; with OpenParm do begin dwCallback := 0; lpstrDeviceType := 'CDAudio'; lpstrElementName := PChar(S); end; Res := mciSendCommand(0, mci_Open, Flags, Longint(@OpenParm)); if Res<>0 then exit; DeviceID:=OpenParm.wDeviceID; try Res:=mciSendCommand(DeviceID, MCI_SET, MCI_SET_DOOR_OPEN, 0); if Res=0 then exit; Result:=True; finally mciSendCommand(DeviceID, mci_Close, Flags, Longint(@OpenParm)); end; end;
function TForm1.CloseCD(Drive: string): Boolean; var Res : MciError; OpenParm: TMCI_Open_Parms; Flags : DWord; S : string; DeviceID : Word; begin Result:=false; S:=Drive; Flags:=mci_Open_Type or mci_Open_Element; with OpenParm do begin dwCallback := 0; lpstrDeviceType := 'CDAudio'; lpstrElementName := PChar(S); end; Res := mciSendCommand(0, mci_Open, Flags, Longint(@OpenParm)); if Res<>0 then exit; DeviceID:=OpenParm.wDeviceID; try Res:=mciSendCommand(DeviceID, MCI_SET, MCI_SET_DOOR_CLOSED, 0); if Res=0 then exit; Result:=True; finally mciSendCommand(DeviceID, mci_Close, Flags, Longint(@OpenParm)); end; end;
procedure TForm1.FormCreate(Sender: TObject); var w:dword; Root:string; I, K:integer; begin k:=0; 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 begin k:=k+1; Driv[k] := Root; ComboBox1.Items.Add(Driv[k]); ComboBox1.Text := Driv[1]; end; end; end;
procedure TForm1.Button2Click(Sender: TObject); begin CloseCD(ComboBox1.Text); end;
end. |
Просьба писать ваши замечания, наблюдения и все остальное,
что поможет улучшить предоставляемую информацию на этом сайте.
ВСЕ КОММЕНТАРИИ МОДЕРИРУЮТСЯ ВРУЧНУЮ, ТАК ЧТО СПАМИТЬ БЕСПОЛЕЗНО!