Comment utiliser des événements de lecture automatique dans des applications en cours d’exécution
L’interface IHWEventHandler peut être inscrite dans la table d’objets en cours d’exécution (ROT) afin que les applications en cours d’exécution aient accès aux événements de lecture automatique.
Les instructions suivantes décrivent comment utiliser des événements de lecture automatique dans des applications en cours d’exécution.
Instructions
Étape 1 :
Créez un composant qui implémente l’interface IHWEventHandler .
Étape 2 :
Initialisez le nouveau composant avec la valeur InitCmdLine de l’entrée du gestionnaire particulier sous la clé Handlers .
Cette étape est obligatoire, car la lecture automatique n’appelle pas la méthode Initialize.
Étape 3 :
Appelez la fonction CreateHardwareEventMoniker pour obtenir un moniker qui représente votre composant et le gestionnaire d’événements que vous souhaitez appeler.
Étape 4 :
Utilisez le paramètre ppmoniker pour inscrire votre composant dans le ROT.
Notes
Notes
LoadLibrary peut poser des risques de sécurité. Reportez-vous à la documentation LoadLibrary pour plus d’informations sur le chargement correct des DLL avec différentes versions de 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;
}
L’appel à IRunningObjectTable::Register nécessite que le composant dispose des informations AppID suivantes dans le Registre.
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