Come usare gli eventi autoPlay nelle applicazioni in esecuzione

L'interfaccia IHWEventHandler può essere registrata nella tabella di oggetti in esecuzione (ROT) in modo che l'esecuzione di applicazioni abbia accesso agli eventi AutoPlay.

Le istruzioni seguenti descrivono come usare gli eventi AutoPlay nelle applicazioni in esecuzione.

Istruzioni

Passaggio 1:

Creare un nuovo componente che implementa l'interfaccia IHWEventHandler .

Passaggio 2:

Inizializzare il nuovo componente con il valore InitCmdLine dalla voce del gestore specifico sotto la chiave Gestori .

Questo passaggio è obbligatorio perché La riproduzione automatica non chiama il metodo Initialize.

Passaggio 3:

Chiamare la funzione CreateHardwareEventMoniker per ottenere un moniker che rappresenta il componente e il gestore eventi che si desidera chiamare.

Passaggio 4:

Usare il parametro ppmoniker per registrare il componente in ROT.

Commenti

Nota

LoadLibrary può rappresentare rischi di sicurezza. Per informazioni su come caricare correttamente le DLL con versioni diverse di Windows, vedere la documentazione di LoadLibrary .

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 chiamata a IRunningObjectTable::Register richiede che il componente disponga delle informazioni AppID seguenti nel Registro di sistema.

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