Como usar eventos de reprodução automática em aplicativos em execução
A interface IHWEventHandler pode ser registrada na ROT (tabela de objetos em execução) para que os aplicativos em execução tenham acesso a eventos de Reprodução Automática.
As instruções a seguir descrevem como usar eventos de Reprodução Automática em aplicativos em execução.
Instruções
Etapa 1:
Crie um novo componente que implemente a interface IHWEventHandler .
Etapa 2:
Inicialize o novo componente com o valor InitCmdLine da entrada do manipulador específico na chave Manipuladores .
Essa etapa é necessária porque a reprodução automática não chama o método Initialize.
Etapa 3:
Chame a função CreateHardwareEventMoniker para obter um moniker que representa o componente e o manipulador de eventos que você deseja chamar.
Etapa 4:
Use o parâmetro ppmoniker para registrar seu componente no ROT.
Comentários
Observação
LoadLibrary pode representar riscos de segurança. Consulte a documentação do LoadLibrary para obter informações sobre como carregar corretamente DLLs com diferentes versões do 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;
}
A chamada para IRunningObjectTable::Register requer que o componente tenha as seguintes informações de AppID no registro.
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