次の方法で共有


実行中のアプリケーションで自動再生イベントを使用する方法

実行中のアプリケーションが AutoPlay イベントにアクセスできるように、 IHWEventHandler インターフェイスを実行中のオブジェクト テーブル (ROT) に登録できます。

次の手順では、実行中のアプリケーションで AutoPlay イベントを使用する方法について説明します。

Instructions

手順 1:

IHWEventHandler インターフェイスを実装する新しいコンポーネントを作成します。

手順 2:

Handlers キーの下にある特定のハンドラーのエントリの InitCmdLine 値を使用して、新しいコンポーネントを初期化します。

自動再生では Initialize メソッドが呼び出されないため、この手順が必要です。

手順 3:

CreateHardwareEventMoniker 関数を呼び出して、コンポーネントと呼び出すイベント ハンドラーを表すモニカーを取得します。

手順 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