[ Foro de C++ ]

Hardware con c++

05-Mar-2023 23:05
Carlos Kobluk
1 Respuestas

Hola, Hace un tiempo queria hacer una aplicacion de grabacion de dvds con c++ y no encontre por ningun lugar como hacer para manipular hardware con c++, por ejemplo que la grabadora te grabe el dvd a cierta velocidad como por ejemplo a 4x.
Mi pregunta es la siguiente como hago para manipular hardware con c++? que libreria deberia utilizar?


14-Mar-2023 22:02
Invitado (Alejandro Andrade)

Para manipular hardware con C++, debes utilizar las librerías correspondientes al sistema operativo que estés utilizando. En el caso de Windows, se pueden utilizar las librerías de Windows API para interactuar con el hardware.

En particular, para controlar la velocidad de grabación de un DVD en Windows, se puede utilizar la función 'SetWriteSpeed' de la librería IMAPI (Image Mastering API). Esta función permite establecer la velocidad de escritura en discos DVD y CD.

Aquí te dejo un ejemplo de cómo se podría utilizar la función 'SetWriteSpeed' en C++ para establecer la velocidad de grabación de un DVD a 4x:

#include <windows.h>
#include <imapi.h>
#pragma comment(lib, "imapi.lib")

int main()
{
   HRESULT hr;
   IMAPI2::IDiscMaster2* pDiscMaster = NULL;
   hr = CoInitialize(NULL);
   if (SUCCEEDED(hr))
   {
       hr = CoCreateInstance(CLSID_MsftDiscMaster2, NULL, CLSCTX_ALL, IID_IDiscMaster2, (void**)&pDiscMaster);
       if (SUCCEEDED(hr))
       {
           IMAPI2::IEnumDiscRecorders* pEnumDiscRecorders = NULL;
           hr = pDiscMaster->EnumDiscRecorders(&pEnumDiscRecorders);
           if (SUCCEEDED(hr))
           {
               ULONG numFetched = 0;
               IMAPI2::IDiscRecorder2* pDiscRecorder = NULL;
               hr = pEnumDiscRecorders->Next(1, &pDiscRecorder, &numFetched);
               if (SUCCEEDED(hr))
               {
                   ULONG writeSpeedSupported = 0;
                   ULONG writeSpeed = 4; // 4x speed
                   hr = pDiscRecorder->GetSupportedWriteSpeeds(IMAPI_MEDIA_PHYSICAL_TYPE::IMAPI_MEDIA_TYPE_DVD_PLUSR, &writeSpeedSupported);
                   if (SUCCEEDED(hr))
                   {
                       hr = pDiscRecorder->SetWriteSpeed(FALSE, writeSpeed);
                       if (SUCCEEDED(hr))
                       {
                           // Speed set successfully
                       }
                       else
                       {
                           // Error setting write speed
                       }
                   }
                   else
                   {
                       // Error getting supported write speeds
                   }
                   pDiscRecorder->Release();
               }
               else
               {
                   // Error getting disc recorder
               }
               pEnumDiscRecorders->Release();
           }
           else
           {
               // Error enumerating disc recorders
           }
           pDiscMaster->Release();
       }
       else
       {
           // Error creating DiscMaster object
       }
       CoUninitialize();
   }
   else
   {
       // Error initializing COM
   }
   return 0;
}

En este ejemplo, se utiliza la librería IMAPI para obtener un objeto de 'IDiscRecorder2', que representa una grabadora de discos. Luego, se obtiene la velocidad de escritura soportada por la grabadora y se establece la velocidad de escritura deseada utilizando la función 'SetWriteSpeed'. En caso de éxito, el programa indicará que la velocidad se ha establecido correctamente.

Cabe destacar que el código anterior es solo un ejemplo para mostrar cómo se puede utilizar la librería IMAPI para controlar la velocidad de grabación de un DVD en Windows. El código real que necesitas escribir dependerá de tus necesidades específicas y puede ser más complejo.






(No se puede continuar esta discusión porque tiene más de dos meses de antigüedad. Si tienes dudas parecidas, abre un nuevo hilo.)