Использование событий автозапуска в запущенных приложениях
Интерфейс IHWEventHandler можно зарегистрировать в таблице выполняющихся объектов (ROT), чтобы запущенные приложения имели доступ к событиям автозапуска.
В следующих инструкциях описывается использование событий автозапуска в запущенных приложениях.
Инструкции
Шаг 1.
Создайте новый компонент, реализующий интерфейс IHWEventHandler .
Шаг 2.
Инициализируйте новый компонент значением InitCmdLine из записи конкретного обработчика в ключе Handlers .
Этот шаг является обязательным, так как функция автозапуска не вызывает метод Initialize.
Шаг 3.
Вызовите функцию CreateHardwareEventMoniker , чтобы получить моникер, представляющий компонент и обработчик событий, который требуется вызвать.
Шаг 4.
Используйте параметр ppmoniker для регистрации компонента в ROT.
Комментарии
Примечание
LoadLibrary может представлять угрозу безопасности. Сведения о том, как правильно загружать библиотеки DLL с различными версиями Windows, см. в документации по 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