共用方式為


如何在執行中應用程式中使用自動播放事件

IHWEventHandler介面可以在執行中的物件資料表中註冊, (ROT) ,讓執行中的應用程式可以存取 AutoPlay 事件。

下列指示說明如何在執行中的應用程式中使用 AutoPlay 事件。

指示

步驟 1:

建立實作 IHWEventHandler 介面的新元件。

步驟 2:

使用 來自處理常式 索引鍵下特定處理常式專案的 InitCmdLine 值,初始化新的元件。

這是必要步驟,因為 Autoplay 不會呼叫 Initialize 方法。

步驟 3:

呼叫 CreateHardwareEventMoniker 函式,以取得 Moniker,代表您的元件和您想要呼叫的事件處理常式。

步驟 4:

使用 ppmoniker 參數在 ROT 中註冊您的元件。

備註

注意

LoadLibrary 可能會造成安全性風險。 如需如何使用不同 Windows 版本正確載入 DLL 的資訊,請參閱 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;
}

呼叫 IRunningObjectTable::Register需要元件在登錄中具有下列AppID資訊。

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