Cómo usar eventos de reproducción automática en aplicaciones en ejecución
La interfaz IHWEventHandler se puede registrar en la tabla de objetos en ejecución (ROT) para que las aplicaciones en ejecución tengan acceso a eventos de Reproducción automática.
En las instrucciones siguientes se describe cómo usar eventos de Reproducción automática en aplicaciones en ejecución.
Instrucciones
Paso 1:
Cree un nuevo componente que implemente la interfaz IHWEventHandler .
Paso 2:
Inicialice el nuevo componente con el valor InitCmdLine de la entrada del controlador determinado en la clave Handlers .
Este paso es necesario porque Reproducción automática no llama al método Initialize.
Paso 3:
Llame a la función CreateHardwareEventMoniker para obtener un moniker que represente el componente y el controlador de eventos al que desea llamar.
Paso 4:
Use el parámetro ppmoniker para registrar el componente en rot.
Comentarios
Nota
LoadLibrary puede suponer riesgos de seguridad. Consulte la documentación de LoadLibrary para obtener información sobre cómo cargar correctamente archivos DLL con diferentes versiones de Windows.
typedef HRESULT (*CREATEHARDWAREEVENTMONIKER)(REFCLSID clsid, LPCWSTR pszEventHandler, IMoniker **ppmoniker);
HRESULT RegisterComponent(IUnknown* punk, DWORD* dpwToken)
{
HRESULT hr = E_FAIL;
HINSTANCE hinstShSvcs = LoadLibrary(TEXT("shsvcs.dll"));
if (hinstShSvcs)
{
CREATEHARDWAREEVENTMONIKER fct = (CREATEHARDWAREEVENTMONIKER)GetProcAddress(hinstShSvcs, "CreateHardwareEventMoniker");
if (fct)
{
IMoniker* pmoniker;
hr = fct(CLSID_App, TEXT("VideoCameraArrival"), &pmoniker);
if (SUCCEEDED(hr))
{
IRunningObjectTable *prot;
if (SUCCEEDED(GetRunningObjectTable(0, &prot)))
{
hr = prot->Register(ROTFLAGS_ALLOWANYCLIENT | ROTFLAGS_REGISTRATIONKEEPSALIVE, punk, pmoniker, &_dwRegisterROT);
prot->Release();
}
pmoniker->Release();
}
CoRegisterClassObject(CLSID_App, static_cast<IClassFactory *>(this), CLSCTX_LOCAL_SERVER, REGCLS_MULTIPLEUSE, &_dwRegisterClass;
}
FreeLibrary(hinstShSvcs);
}
return hr;
}
La llamada a IRunningObjectTable::Register requiere que el componente tenga la siguiente información de AppID en el registro.
HKEY_CLASSES_ROOT
AppID
MyApp.exe
(Default) = MyApplication
AppID [REG_SZ] = {Your GUID here}
HKEY_CLASSES_ROOT
AppID
{The same GUID here}
(Default) = MyApplication
RunAs = Interactive User