Freigeben über


Verwenden von AutoPlay-Ereignissen in ausgeführten Anwendungen

Die IHWEventHandler-Schnittstelle kann in der ausgeführten Objekttabelle (ROT) registriert werden, sodass ausgeführte Anwendungen Zugriff auf AutoPlay-Ereignisse haben.

In den folgenden Anweisungen wird beschrieben, wie Sie AutoPlay-Ereignisse in ausgeführten Anwendungen verwenden.

Anweisungen

Schritt 1:

Erstellen Sie eine neue Komponente, die die IHWEventHandler-Schnittstelle implementiert.

Schritt 2:

Initialisieren Sie die neue Komponente mit dem Wert InitCmdLine aus dem Eintrag des bestimmten Handlers unter dem Schlüssel Handlers .

Dieser Schritt ist erforderlich, da die Initialize-Methode bei der automatischen Wiedergabe nicht aufgerufen wird.

Schritt 3:

Rufen Sie die CreateHardwareEventMoniker-Funktion auf, um einen Moniker abzurufen, der Ihre Komponente und den Ereignishandler darstellt, den Sie aufrufen möchten.

Schritt 4:

Verwenden Sie den ppmoniker-Parameter , um Ihre Komponente im ROT zu registrieren.

Bemerkungen

Hinweis

LoadLibrary kann Sicherheitsrisiken darstellen. Informationen zum ordnungsgemäßen Laden von DLLs mit verschiedenen Windows-Versionen finden Sie in der LoadLibrary-Dokumentation .

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;
}

Für den Aufruf von IRunningObjectTable::Register muss die Komponente über die folgenden AppID-Informationen in der Registrierung verfügen.

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