FORUM DARKERS

Tecnologia & Informática => Programação => C/C#/C++ => Topic started by: script on 18 de April , 2007, 12:09:00 PM

Title: [duvida]Abri bandeja do CD
Post by: script on 18 de April , 2007, 12:09:00 PM
Por favor eu gostaria de saber se tem como abrir e fechar a bandeja do drive de CD em C
Title: Re: [duvida]Abri bandeja do CD
Post by: Dark_Side on 18 de April , 2007, 03:53:56 PM
Hi,

Há duas maneiras básicas:

#include <windows.h>
#include <mmsystem.h>

void AbrirCD()
{
  mciSendString("Set CDAudio Door Open",NULL,0,NULL);
}

void FecharCD(){
  mciSendString("Set CDAudio Door Closed",NULL,0,NULL); 
     
}
 
int main()
{
AbrirCD();
FecharCD();
return 0;
}

Para compilar o código acima, é necessário incluir a biblioteca "winmm" no linker.

Outra maneira:


#include <windows.h>

typedef MCIERROR WINAPI (*CDROM)(const char*,char*,unsigned,HWND);

    CDROM  pCD;

void AbrirCD()
{
pCD("Set CDAudio Door Open",NULL,0,NULL);
}

void FecharCD(){
pCD("Set CDAudio Door Closed",NULL,0,NULL); 
     
}
 
int main()
{
    HINSTANCE dll = LoadLibrary("winmm.dll");
              if(!dll)
              return 1;
   
   
    pCD = (CDROM)GetProcAddress(dll,"mciSendStringA");
    if(!pCD)
      return 1;
     
   AbrirCD();
   FecharCD();
   
    return 0;
    }

Da maneira acima, a função necessária (mciSendString) é obtida dinamicamente, não se fazendo mais necessária a inclusão da biblioteca "winmm" no linker do compilador xD

É isso.
Bye.
Title: Re: [duvida]Abri bandeja do CD
Post by: script on 18 de April , 2007, 04:17:20 PM
interessante!
mas, vc por favor poderia explicar as funções!?
Title: Re: [duvida]Abri bandeja do CD
Post by: Anonymous on 18 de April , 2007, 05:30:18 PM
Amigo "script" em C tudo e possivel
Title: Re: [duvida]Abri bandeja do CD
Post by: Dark_Side on 18 de April , 2007, 06:33:32 PM
Hi,

Basicamente, para se abrir ou fechar o CD-ROM, via programação, utiliza-se a função mciSendString contida dentro da DLL "winmm.dll". A função envia um comando (string) para um disposivito MCI (Media Control Interface - Interface de Controle de Mídia). No caso, ao enviar a string "Set CDAudio Door Open", o sistema entende que deve-se abrir a porta do CD-ROM. O mesmo ocorre quando enviamos "Set CDAudio Door Closed", que fecha a gaveta.

A sintaxe básica da função é:

QuotemciSendString(string,retorno,retorno_bytes,janela);

Onde:

string  = string a ser enviada;
retorno = um buffer que irá receber o retorno da função;
retorno_bytes = tamanho do buffer (em bytes);
janela = identificação de uma janela para a qual poderá ser enviada uma notificação do retorno da função.

Os três últimos argumentos são opcionais (retorno, retorno_bytes e janela), bastando apenas informar a string.

Nos exemplos que postei, apenas criei as funções AbrirCD() e FecharCD() que, após chamadas, executam a função mciSendString() passando
como o primeiro parâmetro a string determinada para cada caso.

Para mais informações:

http://msdn2.microsoft.com/en-us/library/ms709492.aspx (http://msdn2.microsoft.com/en-us/library/ms709492.aspx)

Lista de strings:

http://msdn2.microsoft.com/en-us/library/ms712587.aspx (http://msdn2.microsoft.com/en-us/library/ms712587.aspx)

Seria basicamente isso,
Bye xD.
Title: Re: [duvida]Abri bandeja do CD
Post by: HadeS on 20 de April , 2007, 07:23:13 AM
Pô Dark_Side, muito bom.

Já já vou estar tirando algumas dúvidas com você.

HadeS ;)