Compartir a través de


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

IHWEventHandler

CreateHardwareEventMoniker