다음을 통해 공유


실행 중인 애플리케이션에서 자동 실행 이벤트를 사용하는 방법

실행 중인 애플리케이션이 자동 실행 이벤트에 액세스할 수 있도록 IHWEventHandler 인터페이스를 ROT(실행 중인 개체 테이블)에 등록할 수 있습니다.

다음 지침에서는 실행 중인 애플리케이션에서 자동 실행 이벤트를 사용하는 방법을 설명합니다.

지침

1단계:

IHWEventHandler 인터페이스를 구현하는 새 구성 요소를 만듭니다.

2단계:

처리기 키 아래의 특정 처리기 항목에서 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