Verwenden von AutoPlay-Ereignissen in ausgeführten Anwendungen
Die IHWEventHandler-Schnittstelle kann in der ausgeführten Objekttabelle (ROT) registriert werden, sodass ausgeführte Anwendungen Zugriff auf AutoPlay-Ereignisse haben.
In den folgenden Anweisungen wird beschrieben, wie Sie AutoPlay-Ereignisse in ausgeführten Anwendungen verwenden.
Anweisungen
Schritt 1:
Erstellen Sie eine neue Komponente, die die IHWEventHandler-Schnittstelle implementiert.
Schritt 2:
Initialisieren Sie die neue Komponente mit dem Wert InitCmdLine aus dem Eintrag des bestimmten Handlers unter dem Schlüssel Handlers .
Dieser Schritt ist erforderlich, da die Initialize-Methode bei der automatischen Wiedergabe nicht aufgerufen wird.
Schritt 3:
Rufen Sie die CreateHardwareEventMoniker-Funktion auf, um einen Moniker abzurufen, der Ihre Komponente und den Ereignishandler darstellt, den Sie aufrufen möchten.
Schritt 4:
Verwenden Sie den ppmoniker-Parameter , um Ihre Komponente im ROT zu registrieren.
Bemerkungen
Hinweis
LoadLibrary kann Sicherheitsrisiken darstellen. Informationen zum ordnungsgemäßen Laden von DLLs mit verschiedenen Windows-Versionen finden Sie in der LoadLibrary-Dokumentation .
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;
}
Für den Aufruf von IRunningObjectTable::Register muss die Komponente über die folgenden AppID-Informationen in der Registrierung verfügen.
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