Export (0) Print
Expand All

How to Use AutoPlay Events in Running Applications

The IHWEventHandler interface can be registered in the running object table (ROT) so that running applications have access to AutoPlay events.

The following instructions describe how to use AutoPlay events in running applications.

Instructions

Step 1:

Create a new component that implements the IHWEventHandler interface.

Step 2:

Initialize the new component with the InitCmdLine value from the particular handler's entry under the Handlers key.

This step is required because Autoplay does not call the Initialize method.

Step 3:

Call the CreateHardwareEventMoniker function to get a moniker that represents your component and the event handler that you want to call.

Step 4:

Use the ppmoniker parameter to register your component in the ROT.

Remarks

Note  LoadLibrary can pose security risks. Refer to the LoadLibrary documentation for information on how to correctly load DLLs with different versions of Windows.



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

The call to IRunningObjectTable::Register requires that the component have the following AppID information in the registry.

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

Related topics

IHWEventHandler
CreateHardwareEventMoniker

 

 

Community Additions

ADD
Show:
© 2014 Microsoft