/
Inicio :: Foros

 F.A.Q.F.A.Q.                  Conéctese para revisar sus mensajesConéctese para revisar sus mensajes   

Abrir/Cerrar Lector CD | Codigo C/C++ ?

 
      Índice del Foro elrincondelc.com -> C/C++ en General
Ver tema anterior :: Ver siguiente tema  
AutorMensaje
Lycoris



Registrado: 10 Oct 2007
Mensajes: 26

MensajePublicado: 08/12/2007 9:31 pm
Título: Abrir/Cerrar Lector CD | Codigo C/C++ ?

Hola, existe la forma de manipular el lector de cd, utilizando codigo C o C++ ?

Pues si alguién sabe, Porfavor que me escriba el Codigo !

Salu2!!!!!
Volver arriba
digies



Registrado: 18 Nov 2005
Mensajes: 382
Ubicación: Cono Sur

MensajePublicado: 09/12/2007 7:10 am
Título:

Por ejemplo en Windows, para abrir y cerrar la unidad de CD (en lenguaje C) debes utilizar la biblioteca windows.h.

Abrir unidad de CD:
Código:

MCI_OPEN_PARMS mciParams;
DWORD dwFlags;
LPCTSTR szCharDrive = "D";

memset(&mciParams, 0, sizeof(MCI_OPEN_PARMS));
mciParams.lpstrDeviceType = (LPCSTR) MCI_DEVTYPE_CD_AUDIO;
mciParams.lpstrElementName = szCharDrive;

dwFlags= MCI_OPEN_TYPE | MCI_OPEN_TYPE_ID;

if (!mciSendCommand(0, MCI_OPEN, dwFlags, (DWORD) mciParams))
{
     mciSendCommand(mciParams.wDeviceID, MCI_SET, MCI_SET_DOOR_OPEN | MCI_WAIT, 0);
     mciSendCommand(mciParams.wDeviceID, MCI_CLOSE, MCI_WAIT, 0);
}

- Para abrir o cerrar la unidad de CD se usa la función mciSendCommand. Primero hay que crear una variable de tipo MCI_OPEN_PARAMS.
- De esta estructura, nos interesa lpstrDeviceType, a la que le asignaremos MCI_DEVTYPE_CD_AUDIO y lpstrElementName, a la que le asignaremos el nombre de la unidad (D, E, F, etc).
- Luego, creamos un DWORD para las banderas, que serán MCI_OPEN_TYPE | MCI_OPEN_TYPE_ID.
- Llamamos la función mciSendCommand. El primer parámetro será 0, el segundo, MCI_OPEN, el tercero las banderas en el DWORD y el cuarto, la dirección de memoria de la estructura MCI_OPEN_PARAMS, casteada a DWORD.
- Si la función regresa false, todo fué bien, y ahora abrimos el dispositivo llamando a mciSendCommand, donde el primer parámetro será el miembro wDeviceID de nuestra estructura MCI_OPEN_PARAMS, el segundo parámetro será MCI_SET, el tercero será MCI_SET_DOOR_OPEN para abrir, o MCI_SET_DOOR_CLOSED para cerrar; el cuarto parámetro será 0.
- Finalmente, cerramos el manejador con mciSendCommand, donde el segundo parámetro será MCI_CLOSE y el tercero, MCI_WAIT.

Con el código anterior se abre la unidad de CD. Si se cambia MCI_SET_DOOR_OPEN por MCI_SET_DOOR_CLOSED, se cierra (aunque esto depende del tipo de CDROM instalado; por ejemplo, el cerrar el CDROM no funciona con la mayoría de las laptops).


Código fuente completo para abrir y cerrar la unidad de CD:
Código:

#include <stdio.h>
#include <stdlib.h>
#include <windows.h>

void AbrirCD(void);
void CerrarCD(void);

int main(void)
{   
    printf("Presione ENTER para abrir CD");
    getchar();
    printf("\nAbriendo CD...");
    AbrirCD();
    printf("\n\nPresione ENTER para cerrar CD");
    getchar();
    printf("\nCerrando CD...\n\n");   
    CerrarCD();
    system("PAUSE");
    return EXIT_SUCCESS;
}

void AbrirCD(void)
{     
     MCI_OPEN_PARMS mciParams;
     DWORD dwFlags;
     LPCTSTR szCharDrive = "D";

     memset(&mciParams, 0, sizeof(MCI_OPEN_PARMS));
     mciParams.lpstrDeviceType = (LPCSTR) MCI_DEVTYPE_CD_AUDIO;
     mciParams.lpstrElementName = szCharDrive;

     dwFlags= MCI_OPEN_TYPE | MCI_OPEN_TYPE_ID;

     if (!mciSendCommand(0, MCI_OPEN, dwFlags, (DWORD) &mciParams))
     {
          mciSendCommand(mciParams.wDeviceID, MCI_SET, MCI_SET_DOOR_OPEN | MCI_WAIT, 0);
          mciSendCommand(mciParams.wDeviceID, MCI_CLOSE, MCI_WAIT, 0);
     }
}

void CerrarCD(void)
{
     MCI_OPEN_PARMS mciParams;
     DWORD dwFlags;
     LPCTSTR szCharDrive = "D";

     memset(&mciParams, 0, sizeof(MCI_OPEN_PARMS));
     mciParams.lpstrDeviceType = (LPCSTR) MCI_DEVTYPE_CD_AUDIO;
     mciParams.lpstrElementName = szCharDrive;

     dwFlags= MCI_OPEN_TYPE | MCI_OPEN_TYPE_ID;

     if (!mciSendCommand(0, MCI_OPEN, dwFlags, (DWORD) &mciParams))
     {
          mciSendCommand(mciParams.wDeviceID, MCI_SET, MCI_SET_DOOR_CLOSED|MCI_WAIT,0);
          mciSendCommand(mciParams.wDeviceID, MCI_CLOSE, MCI_WAIT, 0);
     }
}


Un saludo
Volver arriba
      Índice del Foro elrincondelc.com -> C/C++ en General
Página 1 de 1Todas las horas están en GMT - 8 Horas

 
No puede crear mensajes
No puede responder temas
No puede editar sus mensajes
No puede borrar sus mensajes
No puede votar en encuestas

(c) ElRincondelC.com

Un proyecto de UrlanHeat.com