Poznámka
Přístup k této stránce vyžaduje autorizaci. Můžete se zkusit přihlásit nebo změnit adresáře.
Přístup k této stránce vyžaduje autorizaci. Můžete zkusit změnit adresáře.
Minidriver pro zařízení WIA musí být schopen informovat aplikace přidružené k zařízením WIA o jakýchkoli změnách stromu položek zařízení. Pokud například aplikace zobrazí uživatelské rozhraní s miniaturami obrázků na fotoaparátu, měl by být minidriver WIA schopný upozornit uživatelské rozhraní aplikace, aby nezobrazoval miniatury obrázků, které uživatel už odstranil.
Následující ukázková implementace IWiaMiniDrv::d rvDeviceCommand metoda ukazuje, jak může minidriver WIA reagovat na příkaz odeslaný službou WIA a předat příkaz na zařízení. Jakmile minidriver WIA vydá příkaz na zařízení, minidriver informuje aplikace, že se strom položek zařízení změnil. V této implementaci metoda určuje, že služba WIA vydala příkaz "Take Picture" (WIA_CMD_TAKE_PICTURE). Metoda volá metodu TakePicture v kořenové položce (položka pro zařízení) a informuje všechny připojené aplikace, že strom položky nyní obsahuje nový obrázek. (V dokumentaci k sadě Microsoft Windows SDK jsou popsány WIA_CMD_TAKE_PICTURE i TakePicture .) Minidriver to dělá voláním funkce wiasQueueEvent .
Všimněte si, že když minidriver odešle událost, která značí, že strom byl aktualizován, všechny naslouchající aplikace jsou informovány o změně, ne jen volající. Pokud má uživatel například otevřené zobrazení Průzkumníka fotoaparátu a použije Malování od Microsoftu ke vytvoření nového obrázku, toto okno Průzkumníka zobrazí také nový obrázek, jakmile se objeví, protože naslouchá takovým událostem.
Následující příklad ukazuje implementaci IWiaMiniDrv::d rvDeviceCommand metoda.
HRESULT _stdcall CWIADevice::drvDeviceCommand(
BYTE *pWiasContext,
LONG lFlags,
const GUID *plCommand,
IWiaDrvItem **ppWiaDrvItem,
LONG *plDevErrVal)
{
//
// If the caller did not pass in the correct parameters,
// then fail the call and return E_INVALIDARG.
//
if ((!pWiasContext)||(!plDevErrVal)||(!plCommand)) {
return E_INVALIDARG;
}
*plDevErrVal = 0;
HRESULT hr = E_NOTIMPL;
//
// Check which command was issued
//
if (*plCommand == WIA_CMD_TAKE_PICTURE) {
//
// process command here
//
hr = HARDWARE_SNAP_PHOTO();
}
return hr;
}