diff --git a/samples/WinForm32/Form1.cs b/samples/WinForm32/Form1.cs
index b83724e..4f8d09d 100644
--- a/samples/WinForm32/Form1.cs
+++ b/samples/WinForm32/Form1.cs
@@ -161,10 +161,11 @@ namespace WinFormSample
if (twain.GetCapCurrent(c, out TW_CAPABILITY twcap).RC == TWRC.SUCCESS)
{
- var type = twcap.DetermineValueType(twain);
- it.SubItems.Add(type.ToString());
- it.SubItems.Add(ReadTypedValue(c, type, forCurrent: true));
- it.SubItems.Add(ReadTypedValue(c, type, forCurrent: false));
+ var enumType = KnownCapEnumMap.GetEnumType(c);
+ var realType = twcap.DetermineValueType(twain);
+ it.SubItems.Add(enumType?.Name.ToString() ?? realType.ToString());
+ it.SubItems.Add(ReadTypedValue(c, realType, forCurrent: true));
+ it.SubItems.Add(ReadTypedValue(c, realType, forCurrent: false));
}
else
{
diff --git a/samples/WinForm32/Program.cs b/samples/WinForm32/Program.cs
index c05f3b6..abacddc 100644
--- a/samples/WinForm32/Program.cs
+++ b/samples/WinForm32/Program.cs
@@ -1,5 +1,8 @@
+using NTwain.Data;
using System;
using System.Diagnostics;
+using System.IO;
+using System.Linq;
using System.Windows.Forms;
namespace WinFormSample
diff --git a/src/NTwain/Data/KnownCapEnumMap.cs b/src/NTwain/Data/KnownCapEnumMap.cs
new file mode 100644
index 0000000..3e803f9
--- /dev/null
+++ b/src/NTwain/Data/KnownCapEnumMap.cs
@@ -0,0 +1,153 @@
+using System;
+using System.Collections.Generic;
+
+namespace NTwain.Data
+{
+ ///
+ /// Just an attempt for mapping
+ /// type with its enum value type when applicable.
+ ///
+ public static class KnownCapEnumMap
+ {
+ public static Type? GetEnumType(CAP cap)
+ {
+ if (__map.ContainsKey(cap)) return __map[cap];
+ return null;
+ }
+
+ static readonly Dictionary __map = new()
+ {
+ { CAP.ACAP_XFERMECH, typeof(TWSX) },
+ { CAP.CAP_ALARMS, typeof(TWAL) },
+ { CAP.CAP_AUTHOR, typeof(TWSX) },
+ { CAP.CAP_AUTOFEED, typeof(TW_BOOL) },
+ { CAP.CAP_AUTOMATICSENSEMEDIUM, typeof(TW_BOOL) },
+ { CAP.CAP_AUTOSCAN, typeof(TW_BOOL) },
+ { CAP.CAP_CAMERAENABLED, typeof(TW_BOOL) },
+ { CAP.CAP_CAMERAPREVIEWUI, typeof(TW_BOOL) },
+ { CAP.CAP_CAMERASIDE, typeof(TWCS) },
+
+ { CAP.CAP_CLEARPAGE, typeof(TW_BOOL) },
+ { CAP.CAP_DEVICEEVENT, typeof(TWDE) },
+ { CAP.CAP_DEVICEONLINE, typeof(TW_BOOL) },
+
+ { CAP.CAP_DOUBLEFEEDDETECTION, typeof(TWDF) },
+ { CAP.CAP_DOUBLEFEEDDETECTIONRESPONSE, typeof(TWDP) },
+ { CAP.CAP_DOUBLEFEEDDETECTIONSENSITIVITY, typeof(TWUS) },
+
+ { CAP.CAP_DUPLEX, typeof(TWDX) },
+ { CAP.CAP_DUPLEXENABLED, typeof(TW_BOOL) },
+ { CAP.CAP_ENABLEDSUIONLY, typeof(TW_BOOL) },
+ { CAP.CAP_EXTENDEDCAPS, typeof(CAP) },
+
+ { CAP.CAP_FEEDERALIGNMENT, typeof(TWFA) },
+ { CAP.CAP_FEEDERENABLED, typeof(TW_BOOL) },
+ { CAP.CAP_FEEDERLOADED, typeof(TW_BOOL) },
+ { CAP.CAP_FEEDERORDER, typeof(TWFO) },
+ { CAP.CAP_FEEDERPOCKET, typeof(TWFP) },
+ { CAP.CAP_FEEDERPREP, typeof(TW_BOOL) },
+ { CAP.CAP_FEEDPAGE, typeof(TW_BOOL) },
+
+ { CAP.CAP_IAFIELDA_LEVEL, typeof(TWIA) },
+ { CAP.CAP_IAFIELDB_LEVEL, typeof(TWIA) },
+ { CAP.CAP_IAFIELDC_LEVEL, typeof(TWIA) },
+ { CAP.CAP_IAFIELDD_LEVEL, typeof(TWIA) },
+ { CAP.CAP_IAFIELDE_LEVEL, typeof(TWIA) },
+
+
+ { CAP.CAP_IMAGEADDRESSENABLED, typeof(TW_BOOL) },
+ { CAP.CAP_INDICATORS, typeof(TW_BOOL) },
+ { CAP.CAP_INDICATORSMODE, typeof(TWCI) },
+ { CAP.CAP_JOBCONTROL, typeof(TWJC) },
+ { CAP.CAP_LANGUAGE, typeof(TWLG) },
+
+ { CAP.CAP_MICRENABLED, typeof(TW_BOOL) },
+ { CAP.CAP_PAPERDETECTABLE, typeof(TW_BOOL) },
+ { CAP.CAP_PAPERHANDLING, typeof(TWPH) },
+ { CAP.CAP_POWERSUPPLY, typeof(TWPS) },
+
+ { CAP.CAP_PRINTER, typeof(TWPR) },
+ { CAP.CAP_PRINTERENABLED, typeof(TW_BOOL) },
+ { CAP.CAP_PRINTERFONTSTYLE, typeof(TWPF) },
+ { CAP.CAP_PRINTERINDEXTRIGGER, typeof(TWCT) },
+ { CAP.CAP_PRINTERMODE, typeof(TWPM) },
+
+ { CAP.CAP_REACQUIREALLOWED, typeof(TW_BOOL) },
+ { CAP.CAP_REWINDPAGE, typeof(TW_BOOL) },
+ { CAP.CAP_SEGMENTED, typeof(TWSG) },
+
+ { CAP.CAP_SUPPORTEDCAPS, typeof(CAP) },
+ { CAP.CAP_SUPPORTEDCAPSSEGMENTUNIQUE, typeof(CAP) },
+ { CAP.CAP_SUPPORTEDDATS, typeof(DAT) },
+
+ { CAP.CAP_THUMBNAILSENABLED, typeof(TW_BOOL) },
+
+ { CAP.CAP_UICONTROLLABLE, typeof(TW_BOOL) },
+
+ { CAP.ICAP_AUTOBRIGHT, typeof(TW_BOOL) },
+ { CAP.ICAP_AUTODISCARDBLANKPAGES, typeof(TWBP) },
+ { CAP.ICAP_AUTOMATICBORDERDETECTION, typeof(TW_BOOL) },
+ { CAP.ICAP_AUTOMATICCOLORENABLED, typeof(TW_BOOL) },
+ { CAP.ICAP_AUTOMATICCOLORNONCOLORPIXELTYPE, typeof(TWPT) },
+ { CAP.ICAP_AUTOMATICCROPUSESFRAME, typeof(TW_BOOL) },
+ { CAP.ICAP_AUTOMATICDESKEW, typeof(TW_BOOL) },
+ { CAP.ICAP_AUTOMATICLENGTHDETECTION, typeof(TW_BOOL) },
+ { CAP.ICAP_AUTOMATICROTATE, typeof(TW_BOOL) },
+ { CAP.ICAP_AUTOSIZE, typeof(TWAS) },
+
+ { CAP.ICAP_BARCODEDETECTIONENABLED, typeof(TW_BOOL) },
+ { CAP.ICAP_BARCODESEARCHMODE, typeof(TWBD) },
+ { CAP.ICAP_BARCODESEARCHPRIORITIES, typeof(TWBT) },
+
+ { CAP.ICAP_BITDEPTHREDUCTION, typeof(TWBR) },
+ { CAP.ICAP_BITORDER, typeof(TWBO) },
+ { CAP.ICAP_BITORDERCODES, typeof(TWBO) },
+
+ { CAP.ICAP_COLORMANAGEMENTENABLED, typeof(TW_BOOL) },
+ { CAP.ICAP_COMPRESSION, typeof(TWCP) },
+
+ { CAP.ICAP_EXTIMAGEINFO, typeof(TW_BOOL) },
+ { CAP.ICAP_FEEDERTYPE, typeof(TWFE) },
+ { CAP.ICAP_FILMTYPE, typeof(TWFM) },
+ { CAP.ICAP_FILTER, typeof(TWFT) },
+ { CAP.ICAP_FLASHUSED2, typeof(TWFL) },
+ { CAP.ICAP_FLIPROTATION, typeof(TWFR) },
+ { CAP.ICAP_ICCPROFILE, typeof(TWIC) },
+
+ { CAP.ICAP_IMAGEFILEFORMAT, typeof(TWFF) },
+ { CAP.ICAP_IMAGEFILTER, typeof(TWIF) },
+ { CAP.ICAP_IMAGEMERGE, typeof(TWIM) },
+
+ { CAP.ICAP_JPEGPIXELTYPE, typeof(TWPT) },
+ { CAP.ICAP_JPEGQUALITY, typeof(TWJQ) },
+ { CAP.ICAP_JPEGSUBSAMPLING, typeof(TWJS) },
+
+ { CAP.ICAP_LAMPSTATE, typeof(TW_BOOL) },
+ { CAP.ICAP_LIGHTPATH, typeof(TWLP) },
+ { CAP.ICAP_LIGHTSOURCE, typeof(TWLS) },
+
+ { CAP.ICAP_MIRROR, typeof(TWMR) },
+ { CAP.ICAP_NOISEFILTER, typeof(TWNF) },
+ { CAP.ICAP_ORIENTATION, typeof(TWOR) },
+ { CAP.ICAP_OVERSCAN, typeof(TWOV) },
+
+ { CAP.ICAP_PATCHCODEDETECTIONENABLED, typeof(TW_BOOL) },
+ { CAP.ICAP_PATCHCODESEARCHMODE, typeof(TWBD) },
+ { CAP.ICAP_PATCHCODESEARCHPRIORITIES, typeof(TWPCH) },
+
+ { CAP.ICAP_PIXELFLAVOR, typeof(TWPF) },
+ { CAP.ICAP_PIXELFLAVORCODES, typeof(TWPF) },
+ { CAP.ICAP_PIXELTYPE, typeof(TWPT) },
+ { CAP.ICAP_PLANARCHUNKY, typeof(TWPC) },
+
+ { CAP.ICAP_SUPPORTEDBARCODETYPES, typeof(TWBT) },
+ { CAP.ICAP_SUPPORTEDEXTIMAGEINFO, typeof(TWEI) },
+ { CAP.ICAP_SUPPORTEDPATCHCODETYPES, typeof(TWPCH) },
+ { CAP.ICAP_SUPPORTEDSIZES, typeof(TWSS) },
+
+ { CAP.ICAP_TILES, typeof(TW_BOOL) },
+ { CAP.ICAP_UNDEFINEDIMAGESIZE, typeof(TW_BOOL) },
+ { CAP.ICAP_UNITS, typeof(TWUN) },
+ };
+ }
+}