mirror of
https://github.com/soukoku/ntwain.git
synced 2026-02-25 13:04:07 +08:00
Add stepdown for currently supported state levels
This commit is contained in:
@@ -15,18 +15,18 @@ namespace SampleConsole
|
||||
var twain = new TwainSession(Assembly.GetExecutingAssembly().Location);
|
||||
twain.StateChanged += Twain_StateChanged;
|
||||
|
||||
var hwnd = IntPtr.Zero;
|
||||
var hwnd = IntPtr.Zero; // required for windows
|
||||
var rc = twain.DGControl.Parent.OpenDSM(ref hwnd);
|
||||
Debug.WriteLine($"OpenDSM={rc}");
|
||||
|
||||
if (rc == TWAINWorkingGroup.STS.SUCCESS)
|
||||
if (rc == STS.SUCCESS)
|
||||
{
|
||||
Debug.WriteLine($"CloseDSM={rc}");
|
||||
rc = twain.DGControl.Parent.CloseDSM(ref hwnd);
|
||||
}
|
||||
}
|
||||
|
||||
private static void Twain_StateChanged(TwainSession session, TWAINWorkingGroup.STATE state)
|
||||
private static void Twain_StateChanged(TwainSession session, STATE state)
|
||||
{
|
||||
Console.WriteLine($"State changed to {state}");
|
||||
}
|
||||
|
||||
@@ -1,5 +1,6 @@
|
||||
using NTwain;
|
||||
using System;
|
||||
using System.ComponentModel;
|
||||
using System.Diagnostics;
|
||||
using System.Reflection;
|
||||
using System.Windows.Forms;
|
||||
@@ -21,7 +22,7 @@ namespace WinForm32
|
||||
twain.StateChanged += Twain_StateChanged;
|
||||
}
|
||||
|
||||
private static void Twain_StateChanged(TwainSession session, TWAINWorkingGroup.STATE state)
|
||||
private static void Twain_StateChanged(TwainSession session, STATE state)
|
||||
{
|
||||
Console.WriteLine($"State changed to {state}");
|
||||
}
|
||||
@@ -34,12 +35,14 @@ namespace WinForm32
|
||||
var hwnd = this.Handle;
|
||||
var rc = twain.DGControl.Parent.OpenDSM(ref hwnd);
|
||||
Debug.WriteLine($"OpenDSM={rc}");
|
||||
}
|
||||
|
||||
if (rc == TWAINWorkingGroup.STS.SUCCESS)
|
||||
{
|
||||
Debug.WriteLine($"CloseDSM={rc}");
|
||||
rc = twain.DGControl.Parent.CloseDSM(ref hwnd);
|
||||
}
|
||||
protected override void OnClosing(CancelEventArgs e)
|
||||
{
|
||||
var finalState = twain.TryStepdown(STATE.S2);
|
||||
Debug.WriteLine($"Stepdown result state={finalState}");
|
||||
|
||||
base.OnClosing(e);
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -22,6 +22,7 @@ namespace NTwain.Triplets
|
||||
STS rc;
|
||||
if ((rc = DoIt(MSG.OPENDSM, ref hwnd)) == STS.SUCCESS)
|
||||
{
|
||||
Session._hwnd = hwnd;
|
||||
Session.State = STATE.S3;
|
||||
// determine memory mgmt routines used
|
||||
if ((((DG)Session._appIdentityLegacy.SupportedGroups) & DG.DSM2) == DG.DSM2)
|
||||
@@ -46,8 +47,9 @@ namespace NTwain.Triplets
|
||||
STS rc;
|
||||
if ((rc = DoIt(MSG.CLOSEDSM, ref hwnd)) == STS.SUCCESS)
|
||||
{
|
||||
Session.State = STATE.S2;
|
||||
Session._hwnd = IntPtr.Zero;
|
||||
Session._entryPoint = default;
|
||||
Session.State = STATE.S2;
|
||||
}
|
||||
return rc;
|
||||
}
|
||||
|
||||
@@ -6,7 +6,7 @@ using TWAINWorkingGroup;
|
||||
|
||||
namespace NTwain
|
||||
{
|
||||
// this file contains initialization-related things.
|
||||
// this file contains initialization/cleanup things.
|
||||
|
||||
public partial class TwainSession
|
||||
{
|
||||
@@ -83,5 +83,22 @@ namespace NTwain
|
||||
DGImage = new DGImage(this);
|
||||
DGAudio = new DGAudio(this);
|
||||
}
|
||||
|
||||
internal IntPtr _hwnd;
|
||||
|
||||
/// <summary>
|
||||
/// Tries to bring the TWAIN session down to some state.
|
||||
/// </summary>
|
||||
/// <param name="targetState"></param>
|
||||
/// <returns>The final state.</returns>
|
||||
public STATE TryStepdown(STATE targetState)
|
||||
{
|
||||
if (State > targetState)
|
||||
{
|
||||
// shouldn't care about handle when closing really
|
||||
DGControl.Parent.CloseDSM(ref _hwnd);
|
||||
}
|
||||
return State;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user