通知專案樹狀結構變更的應用程式
WIA 裝置的迷你驅動程式必須能夠通知與 WIA 裝置相關聯的應用程式對裝置專案樹狀結構所做的任何變更。 例如,如果應用程式顯示顯示相機上圖片縮圖的使用者介面,WIA 迷你驅動程式應該能夠通知應用程式的使用者介面,以顯示使用者已經刪除的圖片縮圖。
下列 IWiaMiniDrv::d rvDeviceCommand方法的範例實作示範 WIA minidriver 如何回應 WIA 服務所傳送的命令,並將命令傳遞至裝置。 WIA 迷你驅動程式發出命令給裝置之後,minidriver 會通知應用程式裝置專案樹狀結構已變更。 在此實作中,方法會判斷 WIA 服務已發出 「Take Picture」 命令 (WIA_CMD_TAKE_PICTURE) 。 方法會在根專案上呼叫 TakePicture 方法, (裝置) 的專案,並通知任何連線的應用程式專案樹狀結構現在包含新圖片。 (WIA_CMD_TAKE_PICTURE 和TakePicture都會在檔Microsoft Windows SDK中說明。) minidriver 藉由呼叫wiasQueueEvent函式來執行此動作。
請注意,當 minidriver 傳送指出樹狀結構已更新的事件時, 所有 接聽的應用程式都會收到變更的通知,而不只是呼叫端。 例如,如果使用者開啟相機的 [總管] 檢視,並使用 Microsoft 小畫家 取得新的圖片,[總管] 視窗也會在到達時顯示新的圖片,因為它會接聽這類事件。
下列範例示範 IWiaMiniDrv::d rvDeviceCommand 方法的實作。
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;
}