2023-04-02 00:57:07 +08:00
|
|
|
using NTwain;
|
2023-04-03 03:32:19 +08:00
|
|
|
using NTwain.Data;
|
2023-04-02 00:57:07 +08:00
|
|
|
using System;
|
2023-04-02 03:42:18 +08:00
|
|
|
using System.ComponentModel;
|
2023-04-02 00:57:07 +08:00
|
|
|
using System.Diagnostics;
|
|
|
|
using System.Reflection;
|
|
|
|
using System.Windows.Forms;
|
|
|
|
|
2023-04-05 19:29:06 +08:00
|
|
|
namespace WinFormSample
|
2023-04-02 00:57:07 +08:00
|
|
|
{
|
|
|
|
public partial class Form1 : Form
|
|
|
|
{
|
2023-04-04 19:48:07 +08:00
|
|
|
private TwainAppSession twain;
|
2023-04-02 00:57:07 +08:00
|
|
|
|
|
|
|
public Form1()
|
|
|
|
{
|
|
|
|
InitializeComponent();
|
2023-04-05 19:29:06 +08:00
|
|
|
var libVer = FileVersionInfo.GetVersionInfo(typeof(TwainAppSession).Assembly.Location).FileVersion;
|
|
|
|
Text += $"{(TwainPlatform.Is32bit ? " 32bit" : " 64bit")} on NTwain {libVer}";
|
|
|
|
|
2023-04-03 09:45:48 +08:00
|
|
|
TwainPlatform.PreferLegacyDSM = false;
|
2023-04-02 00:57:07 +08:00
|
|
|
|
2023-04-04 19:48:07 +08:00
|
|
|
twain = new TwainAppSession(new WinformMarshaller(this), Assembly.GetExecutingAssembly().Location);
|
2023-04-02 00:57:07 +08:00
|
|
|
twain.StateChanged += Twain_StateChanged;
|
2023-04-02 07:15:41 +08:00
|
|
|
twain.DefaultSourceChanged += Twain_DefaultSourceChanged;
|
|
|
|
twain.CurrentSourceChanged += Twain_CurrentSourceChanged;
|
2023-04-03 10:36:58 +08:00
|
|
|
|
|
|
|
this.Disposed += Form1_Disposed;
|
|
|
|
}
|
|
|
|
|
|
|
|
private void Form1_Disposed(object? sender, EventArgs e)
|
|
|
|
{
|
|
|
|
twain.Dispose();
|
2023-04-02 07:15:41 +08:00
|
|
|
}
|
|
|
|
|
2023-04-04 19:48:07 +08:00
|
|
|
private void Twain_CurrentSourceChanged(TwainAppSession arg1, TW_IDENTITY_LEGACY ds)
|
2023-04-02 07:15:41 +08:00
|
|
|
{
|
|
|
|
lblCurrent.Text = ds.ProductName;
|
|
|
|
}
|
|
|
|
|
2023-04-04 19:48:07 +08:00
|
|
|
private void Twain_DefaultSourceChanged(TwainAppSession arg1, TW_IDENTITY_LEGACY ds)
|
2023-04-02 07:15:41 +08:00
|
|
|
{
|
|
|
|
lblDefault.Text = ds.ProductName;
|
2023-04-02 00:57:07 +08:00
|
|
|
}
|
|
|
|
|
2023-04-04 19:48:07 +08:00
|
|
|
private void Twain_StateChanged(TwainAppSession session, STATE state)
|
2023-04-02 00:57:07 +08:00
|
|
|
{
|
2023-04-02 07:57:37 +08:00
|
|
|
lblState.Text = state.ToString();
|
2023-04-02 00:57:07 +08:00
|
|
|
}
|
|
|
|
|
|
|
|
protected override void OnHandleCreated(EventArgs e)
|
|
|
|
{
|
|
|
|
base.OnHandleCreated(e);
|
|
|
|
|
|
|
|
|
|
|
|
var hwnd = this.Handle;
|
2023-04-03 01:41:16 +08:00
|
|
|
var rc = twain.OpenDSM(hwnd);
|
2023-04-03 09:45:48 +08:00
|
|
|
twain.AddWinformFilter();
|
2023-04-02 00:57:07 +08:00
|
|
|
Debug.WriteLine($"OpenDSM={rc}");
|
2023-04-02 03:42:18 +08:00
|
|
|
}
|
|
|
|
|
|
|
|
protected override void OnClosing(CancelEventArgs e)
|
|
|
|
{
|
|
|
|
var finalState = twain.TryStepdown(STATE.S2);
|
|
|
|
Debug.WriteLine($"Stepdown result state={finalState}");
|
2023-04-03 09:45:48 +08:00
|
|
|
twain.RemoveWinformFilter();
|
2023-04-02 03:42:18 +08:00
|
|
|
base.OnClosing(e);
|
2023-04-02 00:57:07 +08:00
|
|
|
}
|
2023-04-02 07:15:41 +08:00
|
|
|
|
|
|
|
private void btnSelect_Click(object sender, EventArgs e)
|
|
|
|
{
|
2023-04-03 01:41:16 +08:00
|
|
|
twain.ShowUserSelect();
|
2023-04-02 07:15:41 +08:00
|
|
|
}
|
|
|
|
|
|
|
|
private void btnEnumSources_Click(object sender, EventArgs e)
|
|
|
|
{
|
|
|
|
listSources.Items.Clear();
|
|
|
|
foreach (var ds in twain.GetSources())
|
|
|
|
{
|
|
|
|
listSources.Items.Add(ds);
|
|
|
|
}
|
|
|
|
}
|
2023-04-02 07:38:04 +08:00
|
|
|
|
|
|
|
private void btnSetDef_Click(object sender, EventArgs e)
|
|
|
|
{
|
|
|
|
if (listSources.SelectedItem is TW_IDENTITY_LEGACY ds)
|
|
|
|
{
|
2023-04-03 01:41:16 +08:00
|
|
|
twain.SetDefaultSource(ds);
|
2023-04-02 07:38:04 +08:00
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
private void btnOpen_Click(object sender, EventArgs e)
|
|
|
|
{
|
|
|
|
if (listSources.SelectedItem is TW_IDENTITY_LEGACY ds)
|
|
|
|
{
|
2023-04-02 07:57:37 +08:00
|
|
|
twain.TryStepdown(STATE.S3);
|
|
|
|
|
2023-04-03 01:41:16 +08:00
|
|
|
twain.OpenSource(ds);
|
2023-04-02 07:38:04 +08:00
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
private void btnClose_Click(object sender, EventArgs e)
|
|
|
|
{
|
2023-04-03 01:41:16 +08:00
|
|
|
twain.CloseSource();
|
2023-04-02 07:38:04 +08:00
|
|
|
}
|
2023-04-02 07:57:37 +08:00
|
|
|
|
|
|
|
private void btnOpenDef_Click(object sender, EventArgs e)
|
|
|
|
{
|
|
|
|
twain.TryStepdown(STATE.S3);
|
|
|
|
|
2023-04-03 01:41:16 +08:00
|
|
|
twain.OpenSource(twain.DefaultSource);
|
2023-04-02 07:57:37 +08:00
|
|
|
}
|
2023-04-02 21:07:30 +08:00
|
|
|
|
|
|
|
private void btnShowSettings_Click(object sender, EventArgs e)
|
|
|
|
{
|
|
|
|
twain.EnableSource(true, true);
|
|
|
|
}
|
2023-04-03 09:15:10 +08:00
|
|
|
|
|
|
|
private void btnStart_Click(object sender, EventArgs e)
|
|
|
|
{
|
|
|
|
twain.EnableSource(true, false);
|
|
|
|
}
|
2023-04-02 00:57:07 +08:00
|
|
|
}
|
|
|
|
}
|