mirror of
https://github.com/soukoku/ntwain.git
synced 2026-01-26 21:48:36 +08:00
Added CustomDsData property and renamed device to data source.
This commit is contained in:
@@ -53,12 +53,12 @@ namespace Net5Console
|
|||||||
Console.WriteLine();
|
Console.WriteLine();
|
||||||
|
|
||||||
Console.WriteLine("Default device:");
|
Console.WriteLine("Default device:");
|
||||||
Console.WriteLine($"\t{session.DefaultDevice}");
|
Console.WriteLine($"\t{session.DefaultDataSource}");
|
||||||
Console.WriteLine();
|
Console.WriteLine();
|
||||||
|
|
||||||
Console.WriteLine("All devices:");
|
Console.WriteLine("All devices:");
|
||||||
TW_IDENTITY dsToUse = default;
|
TW_IDENTITY dsToUse = default;
|
||||||
foreach (var dev in session.GetDevices())
|
foreach (var dev in session.GetDataSources())
|
||||||
{
|
{
|
||||||
Console.WriteLine($"\t{dev}");
|
Console.WriteLine($"\t{dev}");
|
||||||
if (dev.ProductName == "TWAIN2 FreeImage Software Scanner")
|
if (dev.ProductName == "TWAIN2 FreeImage Software Scanner")
|
||||||
@@ -68,11 +68,11 @@ namespace Net5Console
|
|||||||
}
|
}
|
||||||
Console.WriteLine();
|
Console.WriteLine();
|
||||||
|
|
||||||
session.CurrentDevice = dsToUse;
|
session.CurrentDataSource = dsToUse;
|
||||||
if (session.CurrentDevice.HasValue)
|
if (session.CurrentDataSource.HasValue)
|
||||||
{
|
{
|
||||||
Console.WriteLine("Current device after opening attempt:");
|
Console.WriteLine("Current device after opening attempt:");
|
||||||
Console.WriteLine($"\t{session.CurrentDevice}");
|
Console.WriteLine($"\t{session.CurrentDataSource}");
|
||||||
Console.WriteLine();
|
Console.WriteLine();
|
||||||
|
|
||||||
var caps = session.Capabilities;
|
var caps = session.Capabilities;
|
||||||
|
|||||||
@@ -131,17 +131,6 @@ namespace NTwain
|
|||||||
get { return _twain.GetState(); }
|
get { return _twain.GetState(); }
|
||||||
}
|
}
|
||||||
|
|
||||||
///// <summary>
|
|
||||||
///// Gets the manager status. Useful after getting a non-success return code.
|
|
||||||
///// </summary>
|
|
||||||
///// <returns></returns>
|
|
||||||
//public TW_STATUS GetStatus()
|
|
||||||
//{
|
|
||||||
// TW_STATUS stat = default;
|
|
||||||
// _ = _twain.DatStatus(DG.CONTROL, MSG.GET, ref stat);
|
|
||||||
// return stat;
|
|
||||||
//}
|
|
||||||
|
|
||||||
/// <summary>
|
/// <summary>
|
||||||
/// Opens the TWAIN data source manager.
|
/// Opens the TWAIN data source manager.
|
||||||
/// This needs to be done before anything else.
|
/// This needs to be done before anything else.
|
||||||
@@ -163,10 +152,10 @@ namespace NTwain
|
|||||||
}
|
}
|
||||||
|
|
||||||
/// <summary>
|
/// <summary>
|
||||||
/// Gets list of TWAIN devices.
|
/// Gets list of TWAIN data sources.
|
||||||
/// </summary>
|
/// </summary>
|
||||||
/// <returns></returns>
|
/// <returns></returns>
|
||||||
public IList<TW_IDENTITY> GetDevices()
|
public IList<TW_IDENTITY> GetDataSources()
|
||||||
{
|
{
|
||||||
var list = new List<TW_IDENTITY>();
|
var list = new List<TW_IDENTITY>();
|
||||||
if (State > STATE.S2)
|
if (State > STATE.S2)
|
||||||
@@ -185,9 +174,9 @@ namespace NTwain
|
|||||||
}
|
}
|
||||||
|
|
||||||
/// <summary>
|
/// <summary>
|
||||||
/// Gets or sets the default device.
|
/// Gets or sets the default data source.
|
||||||
/// </summary>
|
/// </summary>
|
||||||
public TW_IDENTITY? DefaultDevice
|
public TW_IDENTITY? DefaultDataSource
|
||||||
{
|
{
|
||||||
get
|
get
|
||||||
{
|
{
|
||||||
@@ -208,10 +197,10 @@ namespace NTwain
|
|||||||
}
|
}
|
||||||
|
|
||||||
/// <summary>
|
/// <summary>
|
||||||
/// Gets or sets the currently open device.
|
/// Gets or sets the currently open data source.
|
||||||
/// Setting it will try to open it.
|
/// Setting it will try to open it.
|
||||||
/// </summary>
|
/// </summary>
|
||||||
public TW_IDENTITY? CurrentDevice
|
public TW_IDENTITY? CurrentDataSource
|
||||||
{
|
{
|
||||||
get
|
get
|
||||||
{
|
{
|
||||||
@@ -285,7 +274,7 @@ namespace NTwain
|
|||||||
private Capabilities _caps;
|
private Capabilities _caps;
|
||||||
|
|
||||||
/// <summary>
|
/// <summary>
|
||||||
/// Get current device's capabilities. Will be null if no device is open.
|
/// Get current data source's capabilities. Will be null if no data source is open.
|
||||||
/// </summary>
|
/// </summary>
|
||||||
/// <returns></returns>
|
/// <returns></returns>
|
||||||
public Capabilities Capabilities
|
public Capabilities Capabilities
|
||||||
@@ -301,7 +290,60 @@ namespace NTwain
|
|||||||
}
|
}
|
||||||
|
|
||||||
/// <summary>
|
/// <summary>
|
||||||
/// Attempts to show the current device's settings dialog if supported.
|
/// Gets/sets the current source's settings as opaque data.
|
||||||
|
/// Returns null if not supported.
|
||||||
|
/// </summary>
|
||||||
|
public byte[] CustomDsData
|
||||||
|
{
|
||||||
|
get
|
||||||
|
{
|
||||||
|
TW_CUSTOMDSDATA data = default;
|
||||||
|
var sts = _twain.DatCustomdsdata(DG.CONTROL, MSG.GET, ref data);
|
||||||
|
if (sts == STS.SUCCESS)
|
||||||
|
{
|
||||||
|
if (data.hData != IntPtr.Zero && data.InfoLength > 0)
|
||||||
|
{
|
||||||
|
try
|
||||||
|
{
|
||||||
|
var lockedPtr = _twain.DsmMemLock(data.hData);
|
||||||
|
var bytes = new byte[data.InfoLength];
|
||||||
|
Marshal.Copy(lockedPtr, bytes, 0, bytes.Length);
|
||||||
|
}
|
||||||
|
finally
|
||||||
|
{
|
||||||
|
_twain.DsmMemUnlock(data.hData);
|
||||||
|
_twain.DsmMemFree(ref data.hData);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return EmptyArray<byte>.Value;
|
||||||
|
}
|
||||||
|
return null;
|
||||||
|
}
|
||||||
|
set
|
||||||
|
{
|
||||||
|
if (value == null || value.Length == 0) return;
|
||||||
|
|
||||||
|
TW_CUSTOMDSDATA data = default;
|
||||||
|
data.InfoLength = (uint)value.Length;
|
||||||
|
data.hData = _twain.DsmMemAlloc(data.InfoLength);
|
||||||
|
try
|
||||||
|
{
|
||||||
|
var lockedPtr = _twain.DsmMemLock(data.hData);
|
||||||
|
Marshal.Copy(value, 0, lockedPtr, value.Length);
|
||||||
|
_twain.DsmMemUnlock(data.hData);
|
||||||
|
var sts = _twain.DatCustomdsdata(DG.CONTROL, MSG.SET, ref data);
|
||||||
|
}
|
||||||
|
finally
|
||||||
|
{
|
||||||
|
// should be freed already if no error but just in case
|
||||||
|
if (data.hData != IntPtr.Zero) _twain.DsmMemFree(ref data.hData);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// Attempts to show the current data source's settings dialog if supported.
|
||||||
/// </summary>
|
/// </summary>
|
||||||
/// <returns></returns>
|
/// <returns></returns>
|
||||||
public STS ShowSettings()
|
public STS ShowSettings()
|
||||||
@@ -313,9 +355,9 @@ namespace NTwain
|
|||||||
}
|
}
|
||||||
|
|
||||||
/// <summary>
|
/// <summary>
|
||||||
/// Begins the capture process on the current device.
|
/// Begins the capture process on the current data source.
|
||||||
/// </summary>
|
/// </summary>
|
||||||
/// <param name="showUI">Whether to display settings UI. Not all devices support this.</param>
|
/// <param name="showUI">Whether to display settings UI. Not all data sources support this.</param>
|
||||||
/// <returns></returns>
|
/// <returns></returns>
|
||||||
public STS StartCapture(bool showUI)
|
public STS StartCapture(bool showUI)
|
||||||
{
|
{
|
||||||
|
|||||||
Reference in New Issue
Block a user