Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Delphi программирование > Общие вопросы Delphi
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 17.10.2007, 18:03   #1
kommunist
C# developer
Форумчанин
 
Аватар для kommunist
 
Регистрация: 03.10.2007
Сообщений: 393
Вопрос проблемы с прогой на delphi

Добрый вечер товарищи программисты.Я написал программу которая открывает cd-rom.
вот мой код:
unit Unit1;
interface
uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs,StdCtrls,mmsystem;

type
TForm1 = class(TForm)
Button1: TButton;
procedure Button1Click(Sender: TObject);
private
{ Private declarations }
public
{ Public declarations }
end;

var
Form1: TForm1;

implementation
{$R *.dfm}
procedure TForm1.Button1Click(Sender: TObject);
begin
mcisendstring('Set cdaudio cdopen wait',nil,0,handle);
end;

end.


проблема в том что по нажатию кнопки cd-rom не открывается посмтрите может подскажите в чём тут дело.
да кстати у меня есть и второй cd-rom.еподскажите как мне на него выйти?
заранее выражаю огромную ьлагодарность всем откликнувшихся.
I like WPF
kommunist вне форума Ответить с цитированием
Старый 17.10.2007, 18:10   #2
Nemon
Армия Рассейская
Форумчанин
 
Аватар для Nemon
 
Регистрация: 06.12.2006
Сообщений: 175
По умолчанию

mciSendString('Set cdaudio door open wait', nil, 0, handle);
Вот так попробуй
Сделаем ночь ярче!!! - Ракетные войска стратегического назначения
Центральный клуб туристов РВСН
Nemon вне форума Ответить с цитированием
Старый 17.10.2007, 18:19   #3
Volkogriz
Форумчанин
 
Аватар для Volkogriz
 
Регистрация: 11.10.2007
Сообщений: 384
По умолчанию

uses
MMSystem

ЗАКРЫТЬ CD-ROM
Цитата:
mciSendString('Set cdaudio door open wait', nil, 0, handle);
Для открытия CD-ROM:
Цитата:
mciSendString('Set cdaudio door closed wait', nil, 0, handle);
С уважением Volkogriz!!!
Не количеством плюсов измеряется репутация человека...!
Volkogriz вне форума Ответить с цитированием
Старый 17.10.2007, 18:23   #4
kommunist
C# developer
Форумчанин
 
Аватар для kommunist
 
Регистрация: 03.10.2007
Сообщений: 393
По умолчанию

volkogriz и nemon спасибо вам большое
а насчет вторго вопроса неподскажите как из одной программы моожно открыть первый и второй привод


P.S. ёще раз спасибо вы мне очень помогли
I like WPF
kommunist вне форума Ответить с цитированием
Старый 17.10.2007, 18:24   #5
Nemon
Армия Рассейская
Форумчанин
 
Аватар для Nemon
 
Регистрация: 06.12.2006
Сообщений: 175
По умолчанию

Код:
unit DriveTools;

interface

uses

  Windows, SysUtils, MMSystem;

function CloseCD(Drive: Char): Boolean;
function OpenCD(Drive: Char): Boolean;

implementation

function OpenCD(Drive: Char): 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 CloseCD(Drive: Char): 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;

end.
Сделаем ночь ярче!!! - Ракетные войска стратегического назначения
Центральный клуб туристов РВСН
Nemon вне форума Ответить с цитированием
Старый 17.10.2007, 18:40   #6
kommunist
C# developer
Форумчанин
 
Аватар для kommunist
 
Регистрация: 03.10.2007
Сообщений: 393
По умолчанию

и еще раз спасиб !!!!!!
I like WPF
kommunist вне форума Ответить с цитированием
Старый 07.12.2007, 14:30   #7
Ярослав
Пользователь
 
Аватар для Ярослав
 
Регистрация: 14.11.2007
Сообщений: 74
По умолчанию

Скиньте исходник плиз
Каждый из нас в чём-то новичок
Ярослав вне форума Ответить с цитированием
Старый 07.12.2007, 17:09   #8
Terran
Участник клуба
 
Аватар для Terran
 
Регистрация: 28.11.2007
Сообщений: 1,521
По умолчанию

Что бы открыть CD-ROM используй лучше вот такую команду:

Открыть CD-ROM.
MciSendString('Set CDAudio Door Open Wait', Nil, 0, Handle);

Закрыть CD-ROM.
MciSendString('Set CDAudio Door Closed Wait', Nil, 0, Handle);

Только не забудь добавить в раздел Uses модуль MMSystem,

А есле в системе установлено несколько сидеромов, то вот очень удобный и простой исходник для открытия лобого из них.
Но для этого тебе надо будет установить компонент WinIoCtl.

unit Unit1;

interface

uses
WinIoCtl, Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, StdCtrls, XPMan;

type
TForm1 = class(TForm)
Edit1: TEdit;
Button1: TButton;
Button2: TButton;
Label1: TLabel;
XPManifest1: TXPManifest;
procedure Button1Click(Sender: TObject);
procedure Button2Click(Sender: TObject);

private
{ Private declarations }
public
{ Public declarations }
end;

var
Form1: TForm1;

implementation

{$R *.dfm}

Procedure TForm1.Button1Click(Sender: TObject);
Var
HCDDevice: THandle;
LpBytesReturned: DWORD;
DriveLetter: String; {Char}
Begin
DriveLetter:=(Edit1.Text);
HCDDevice := CreateFile(PChar('\\.\'+DriveLetter +':'), GENERIC_READ,
FILE_SHARE_READ Or FILE_SHARE_WRITE, Nil, OPEN_EXISTING, FILE_ATTRIBUTE_NORMAL, 0);
If HCDDevice <> INVALID_HANDLE_VALUE Then
Begin
DeviceIoControl(hCDDevice, IOCTL_DISK_EJECT_MEDIA , Nil, 0, nil, 0, LpBytesReturned, Nil);
CloseHandle(HCDDevice);
End;
End;
Procedure TForm1.Button2Click(Sender: TObject);
Var
HCDDevice: THandle;
LpBytesReturned: DWORD;
DriveLetter: String; {Char}
Begin
DriveLetter:=(Edit1.Text);
HCDDevice := CreateFile(PChar('\\.\'+DriveLetter +':'), GENERIC_READ,
FILE_SHARE_READ Or FILE_SHARE_WRITE, Nil, OPEN_EXISTING, FILE_ATTRIBUTE_NORMAL, 0);
If HCDDevice <> INVALID_HANDLE_VALUE Then
Begin
DeviceIoControl(hCDDevice, IOCTL_DISK_LOAD_MEDIA , Nil, 0, nil, 0, LpBytesReturned, Nil);
CloseHandle(HCDDevice);
End;
End;
End.

С уважением Terran.
Всегда рад помочь!

Последний раз редактировалось Terran; 07.12.2007 в 17:12.
Terran вне форума Ответить с цитированием
Старый 07.12.2007, 20:58   #9
Ярослав
Пользователь
 
Аватар для Ярослав
 
Регистрация: 14.11.2007
Сообщений: 74
По умолчанию

Спасибо с одним приводом разобрался а с несколькими не получилось можете объяснить код в сообщениях #5 И #8?
(если можно по подробней)
Каждый из нас в чём-то новичок
Ярослав вне форума Ответить с цитированием
Старый 07.12.2007, 21:18   #10
Terran
Участник клуба
 
Аватар для Terran
 
Регистрация: 28.11.2007
Сообщений: 1,521
По умолчанию

что бы получилось с двуймя, тебе надо установить компонент в делфи WinIoCtl и потом
можеш просто сделать так:

Открыть CD-Rom.

Uses WinIoCtl,

Var
HCDDevice: THandle;
LpBytesReturned: DWORD;
DriveLetter: String; {Char}
Begin
DriveLetter:=('E');
HCDDevice := CreateFile(PChar('\\.\'+DriveLetter +':'), GENERIC_READ,
FILE_SHARE_READ Or FILE_SHARE_WRITE, Nil, OPEN_EXISTING, FILE_ATTRIBUTE_NORMAL, 0);
If HCDDevice <> INVALID_HANDLE_VALUE Then
Begin
DeviceIoControl(hCDDevice, IOCTL_DISK_EJECT_MEDIA , Nil, 0, nil, 0, LpBytesReturned, Nil);
CloseHandle(HCDDevice);
End;
End;

А что бы закрыть, измени значкние IOCTL_DISK_EJECT_MEDIA на IOCTL_DISK_LOAD_MEDIA.
Смотри на следующей странице, я тебе скинул свой исходник для открытия двух CD-ROмов
С уважением Terran!!!
Всегда рад помочь!

Последний раз редактировалось Terran; 07.12.2007 в 22:48.
Terran вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
помогите с прогой на Delphi rer Помощь студентам 6 20.06.2008 12:29
помогите с прогой в Delphi sergeyfsd Помощь студентам 1 15.05.2008 00:03
Помомогите с прогой На Delphi-ях mas00777 Помощь студентам 55 27.03.2008 11:23
помогите с прогой на delphi emx2000 Помощь студентам 8 14.06.2007 21:19