C/Visual C - AYUDA: CD-ROM

 
Vista:

AYUDA: CD-ROM

Publicado por Mariano (15 intervenciones) el 23/03/2001 13:31:32
Necesito saber cómo mi aplicación puede enterarse cuando el usuario retira el CD de la máquina, como mi .exe está en el, necesita saberlo para así terminar la ejecución de la aplicación. Mil gracias.
Valora esta pregunta
Me gusta: Está pregunta es útil y esta claraNo me gusta: Está pregunta no esta clara o no es útil
0
Responder
Imágen de perfil de Alejandro

Cómo detectar cuando el usuario retira un CD de la máquina en Visual C++ 6.0

Publicado por Alejandro (913 intervenciones) el 10/09/2024 23:34:53
¡Hola, Mariano!

Para detectar cuando el usuario retira un CD de la máquina en la que se está ejecutando tu aplicación, puedes utilizar la función de notificación de cambio de hardware de Windows. Aquí tienes un ejemplo de cómo puedes implementarlo en Visual C++ 6.0:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
#include <windows.h>
 
// Función de callback para el cambio de hardware
BOOL CALLBACK HardwareChangeCallback(PVOID lpParameter, BOOLEAN TimerOrWaitFired)
{
    if (lpParameter != NULL)
    {
        PDEV_BROADCAST_HDR pBroadcastHdr = (PDEV_BROADCAST_HDR)lpParameter;
 
        if (pBroadcastHdr->dbch_devicetype == DBT_DEVTYP_VOLUME)
        {
            PDEV_BROADCAST_VOLUME pVolume = (PDEV_BROADCAST_VOLUME)pBroadcastHdr;
 
            // Verificar si el evento es por la remoción de un CD
            if (pVolume->dbcv_flags & DBTF_MEDIA)
            {
                // Realizar las acciones necesarias cuando se retira el CD
                // Por ejemplo, terminar la ejecución de la aplicación
                // ...
 
                // Retornar FALSE para detener la recepción de notificaciones
                return FALSE;
            }
        }
    }
 
    // Retornar TRUE para continuar recibiendo notificaciones
    return TRUE;
}
 
// Función para registrar la notificación de cambio de hardware
void RegisterHardwareChangeNotification()
{
    DEV_BROADCAST_DEVICEINTERFACE broadcastInterface;
    ZeroMemory(&broadcastInterface, sizeof(DEV_BROADCAST_DEVICEINTERFACE));
    broadcastInterface.dbcc_size = sizeof(DEV_BROADCAST_DEVICEINTERFACE);
    broadcastInterface.dbcc_devicetype = DBT_DEVTYP_DEVICEINTERFACE;
    broadcastInterface.dbcc_classguid = GUID_DEVINTERFACE_VOLUME;
 
    HDEVNOTIFY hDevNotify = RegisterDeviceNotification(
        AfxGetMainWnd()->GetSafeHwnd(),
        &broadcastInterface,
        DEVICE_NOTIFY_WINDOW_HANDLE
    );
 
    if (hDevNotify == NULL)
    {
        // Error al registrar la notificación
    }
    else
    {
        // Crear un objeto de espera para recibir las notificaciones
        HANDLE hWaitEvent = CreateEvent(NULL, FALSE, FALSE, NULL);
 
        // Configurar el objeto de espera para recibir notificaciones de cambio de hardware
        HANDLE hWaitHandleArray[1] = { hWaitEvent };
        RegisterWaitForSingleObject(
            &hWaitEvent,
            hWaitEvent,
            HardwareChangeCallback,
            NULL,
            INFINITE,
            WT_EXECUTEDEFAULT
        );
    }
}

Debes llamar a la función `RegisterHardwareChangeNotification()` en algún lugar de tu código para registrar la notificación de cambio de hardware. Cuando se retire un CD, la función de callback `HardwareChangeCallback()` se llamará y podrás realizar las acciones necesarias, como terminar la ejecución de la aplicación.

Recuerda que este código es compatible con Visual C++ 6.0 y utiliza las funciones y estructuras de Windows para manejar la notificación de cambio de hardware.

Espero que esto te ayude a detectar cuando el usuario retira un CD de la máquina en la que se ejecuta tu aplicación.

¡Buena suerte!

Saludos cordiales,
Ale.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar