Partilhar via


Como usar eventos de reprodução automática em aplicativos em execução

A interface IHWEventHandler pode ser registrada na ROT (tabela de objetos em execução) para que os aplicativos em execução tenham acesso a eventos de Reprodução Automática.

As instruções a seguir descrevem como usar eventos de Reprodução Automática em aplicativos em execução.

Instruções

Etapa 1:

Crie um novo componente que implemente a interface IHWEventHandler .

Etapa 2:

Inicialize o novo componente com o valor InitCmdLine da entrada do manipulador específico na chave Manipuladores .

Essa etapa é necessária porque a reprodução automática não chama o método Initialize.

Etapa 3:

Chame a função CreateHardwareEventMoniker para obter um moniker que representa o componente e o manipulador de eventos que você deseja chamar.

Etapa 4:

Use o parâmetro ppmoniker para registrar seu componente no ROT.

Comentários

Observação

LoadLibrary pode representar riscos de segurança. Consulte a documentação do LoadLibrary para obter informações sobre como carregar corretamente DLLs com diferentes versões do 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;
}

A chamada para IRunningObjectTable::Register requer que o componente tenha as seguintes informações de AppID no 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