WIA 專案旗標和類別的範例使用方式
本主題適用于 Windows Vista 和更新版本。
本節描述 Windows Vista 中的掃描器和相機專案樹狀結構,以及 WIA 專案旗標和 WIA 類別。 圖表描述相機專案樹狀目錄和掃描器專案樹狀結構在 Windows Vista 和更新版本中的外觀。 相機專案樹狀目錄和掃描器專案樹狀結構都有兩個圖表。 在這兩種情況下,第一張圖表說明需要哪些 WIA 專案旗標,而第二張圖表則說明使用哪些 WIA 類別。 程式碼範例是應用程式使用旗標和類別組合的範例。
下圖顯示相機專案樹狀結構,以及必須設定之WIA_ITEM_FLAGS屬性中的旗標。
在上圖中,左邊的樹狀結構代表相機專案樹狀結構。 右側的氣球包含這類裝置需要使用的 WIA 專案旗標。
下圖顯示必須設定之WIA_IPA_ITEM_CATEGORY屬性中的相機專案樹狀目錄和類別。
在上圖中,左邊的樹狀結構代表相機專案樹狀結構。 右側的方塊包含這類裝置需要使用的類別。
下圖顯示掃描器的專案樹狀結構,其中包含檔摘要器和電影掃描器,以及必須設定之WIA_ITEM_FLAGS屬性中的旗標。
在上圖中,左邊的樹狀結構代表掃描器專案樹狀結構。 右側的氣球包含這類裝置需要使用的 WIA 專案旗標。
下圖顯示掃描器的專案樹狀結構,以及必須設定的 WIA_IPA_ITEM_CATEGORY 屬性中的類別。
在上圖中,左邊的樹狀結構代表掃描器專案樹狀結構。 右邊的批註方塊包含這類裝置必須設定之WIA_IPA_ITEM_CATEGORY屬性中的類別。
如需 WIA 所定義之所有類別的完整清單,以及每個類別的有效 WIA 專案旗標相關資訊,請參閱 WIA_IPA_ITEM_CATEGORY。
如需所有 WIA 專案旗標的完整清單,請參閱 WIA_IPA_ITEM_FLAGS。
下列程式碼範例示範應用程式如何使用WIA_IPA_ITEM_FLAGS和WIA_IPA_ITEM_CATEGORY屬性的組合,來分類 WIA 專案樹狀結構中找到的 WIA 專案。
HRESULT hr = S_OK;
PROPSPEC ps[2] = {{PRSPEC_PROPID,WIA_IPA_ITEM_FLAGS},
{PRSPEC_PROPID, WIA_IPA_ITEM_CATEGORY}};
PROPVARIANT pv[2] = {0};
hr = pIWiaPropertyStorage->ReadMultiple(2, ps, pv);
if (hr == S_OK)
{
if (pv[0].lVal & WiaItemTypeProgrammableDataSource)
{
// Item is a programmable data source.
}
else
{
// Item is NOT a programmable data source and there must be
// some data associated with the device, or a folder.
// Use the WIA item flags to further classify the item.
if (pv[0].lVal & WiaItemTypeImage)
{
// Item represents image data.
}
if (pv[0].lVal & WiaItemTypeAudio)
{
// Item represents audio data.
}
if (pv[0].lVal & WiaItemTypeVideo)
{
// Item represents video data.
}
if (pv[0].lVal & WiaItemTypeDocument)
{
// Item represents document data.
}
}
// Read the category to properly use the item.
switch(pv[1].lVal)
{
case WIA_CATEGORY_FINISHED_FILE:
// Item is a finished file item.
break;
case WIA_CATEGORY_FLATBED:
// Item is a flatbed scanner item.
break;
case WIA_CATEGORY_FILM:
// Item is a film scanning item.
break;
case WIA_CATEGORY_FEEDER:
// Item is a document feeder scanner item.
break;
default:
// Item is not a WIA-defined item (possibly vendor specific?).
break;
}
...
}
...