На главную Наши проекты:
Журнал   ·   Discuz!ML   ·   Wiki   ·   DRKB   ·   Помощь проекту
ПРАВИЛА FAQ Помощь Участники Календарь Избранное RSS
msm.ru
! user posted image
Пожалуйста, выделяйте текст программы тегом [сode=pas] ... [/сode]. Для этого используйте кнопку [code=pas] в форме ответа или комбобокс, если нужно вставить код на языке, отличном от Дельфи/Паскаля.

Соблюдайте общие правила форума

Следующие вопросы задаются очень часто, подробно разобраны в FAQ и, поэтому, будут безжалостно удаляться:
1. Преобразовать переменную типа String в тип PChar (PAnsiChar)
2. Как "свернуть" программу в трей.
3. Как "скрыться" от Ctrl + Alt + Del (заблокировать их и т.п.)
4. Как запустить программу/файл? (и дождаться ее завершения)
5. Как перехватить API-функции, поставить hook? (перехват сообщений от мыши, клавиатуры - внедрение в удаленное адресное прстранство)
... (продолжение следует) ...

Внимание:
Попытки открытия обсуждений реализации вредоносного ПО, включая различные интерпретации спам-ботов, наказывается предупреждением на 30 дней.
Повторная попытка - 60 дней. Последующие попытки - бан.
Мат в разделе - бан на три месяца...

Полезные ссылки:
user posted image MSDN Library user posted image FAQ раздела user posted image Поиск по разделу user posted image Как правильно задавать вопросы


Выразить свое отношение к модераторам раздела можно здесь: user posted image Rouse_, user posted image Krid

Модераторы: Rouse_, Krid
  
> mciSendCommand , несколько приводов CD-ROM
    Здравствуйте.
    Не могу открыть указанный привод CD-ROM (E:\). Самое интересное то, что mciSendCommand возвращает не нуль, а CD-ROM все равно не открывается.

    procedure TForm1.Button8Click(Sender: TObject);
    var
    dwrc: DWORD;
    cdDevice: UINT;
    OpenParms: TMCI_Open_Parms;
    begin
     OpenParms.lpstrDeviceType:= PChar(MCI_DEVTYPE_CD_AUDIO);
     OpenParms.lpstrElementName := PChar('E:\');
     dwrc := mciSendCommand(0,MCI_OPEN, MCI_OPEN_ELEMENT or MCI_OPEN_TYPE,DWORD(@OpenParms));
     if dwrc <> 0 then
     begin
      cdDevice:= OpenParms.wDeviceID;
      mciSendCommand(cdDevice, MCI_SET_AUDIO, MCI_SET_DOOR_OPEN, 0);
      caption := 'No Error';
     end
     else
      caption := 'Bad';
    end;
      Зачем слэш в OpenParms.lpstrElementName ?
        Даже без него не работает!
          2 _8989 ну для начала
          Цитата

          MCI_OPEN
          MCIERROR mciSendCommand(MCIDEVICEID wDeviceID, MCI_OPEN,
                           DWORD dwFlags, (DWORD) (LPMCI_OPEN_PARMS) lpOpen);

          Initializes a device or file. All devices recognize this command.

          Returns zero if successful or an error otherwise.

          Оно как раз должно 0 возвращать. Т.е. писать нужно if dwrc=0 then...

          Дальше по MCI_OPEN:

          Если хочешь использовать MCI device type identifier, то к флагам нужно добавить MCI_OPEN_TYPE_ID
          А сам идентификатор передать как Lo-Order word в OpenParms.lpstrDeviceType
          т.е. вот так

          OppenParms.lpstrDeviceType:=Pointer(MakeLong(MCI_DEVTYPE_CD_AUDIO,0));

          Ну или же можно просто воспользоваться строкой lpstrDeviceType:=PChar('CDAudio')

          MCI_SET
          Цитата

          mciSendCommand(cdDevice, MCI_SET_AUDIO, MCI_SET_DOOR_OPEN, 0);

          MCI_SET_AUDIO - это флаг а не команда, он должен идти третим параметром ( в данном случае он вообще не нужен, у него другое назначение).
          Вторым параметром должна идти команда MCI_SET.

          Ну и не забудь MCI_CLOSE

          А по поводу слэша, так разницы нет, значение имеют только первые два символа.

          PS
          рабочий пример будет выглядеть примерно так

          var
            MciErr: MciError;
            OP    : TMCI_OPEN_PARMS;
          begin
           OP.lpstrDeviceType:=PChar('CDAudio'); //Pointer(MakeLong(MCI_DEVTYPE_CD_AUDIO,0));
           OP.lpstrElementName := PChar('g:');
           MciErr:=mciSendCommand(0,MCI_OPEN,MCI_OPEN_ELEMENT or MCI_OPEN_TYPE {or MCI_OPEN_TYPE_ID},DWORD(@OP));
           if MciErr = 0 then
           begin
             mciSendCommand(OP.wDeviceID,MCI_SET,MCI_SET_DOOR_OPEN,0);
             mciSendCommand(OP.wDeviceID,MCI_CLOSE,0,0);
           end;
          end;
          Сообщение отредактировано: rhf -
          0 пользователей читают эту тему (0 гостей и 0 скрытых пользователей)
          0 пользователей:


          Рейтинг@Mail.ru
          [ Script execution time: 0,0356 ]   [ 16 queries used ]   [ Generated: 27.04.24, 12:53 GMT ]