Я использую Ntwain для сканирования некоторых документов с сканера Kodak i5850 в простом приложении C# Console. Я могу использовать библиотеку для подключения к сканеру и запустить сканирование, но мне также нужно настроить принтер на сканере, чтобы распечатать некоторые данные в документ. У сканера есть эта функциональность, но он требует, чтобы я установил некоторые нестандартные возможности Twain для его использования.
ntwain, кажется, имеет довольно просто CapabilityId enum параметры, а не пользовательский int. В результате, несмотря на то, что конструктор на самом деле просто нуждается в значении UINT для идентификатора возможностей, я не могу передать один в конструктор, если я не изменяю определение capabilyId и сам перекомпиляю его, что кажется серьезным надзором. Я не смог найти какую -либо документацию об этом интерфейсе. Если это так, пример будет высоко оценен. Спасибо! < /P>
Пример кода для простого сканирования: < /p>
static void Main(string[] args)
{
var appId = TWIdentity.CreateFromAssembly(DataGroups.Image, Assembly.GetExecutingAssembly());
var session = new TwainSession(appId);
if (session.Open() != ReturnCode.Success)
{
Console.WriteLine("ERROR: Failed to open session.");
return;
}
session.TransferReady += (s, e) =>
{
Console.WriteLine("Transfer is ready!");
};
session.DataTransferred += (s, e) =>
{
Console.WriteLine("Data transfer triggered");
if (e.NativeData != IntPtr.Zero)
{
Console.WriteLine("Got scan data!");
}
else
{
Console.WriteLine("Failed to get scan data!");
}
};
session.SourceDisabled += (s, e) =>
{
Console.WriteLine("Source was disabled. Transfer complete.");
session.CurrentSource.Close();
session.Close();
};
Console.WriteLine("Sources:");
foreach (var ds in session)
{
Console.WriteLine(ds.Name);
}
Console.WriteLine("---------------------");
var source = session.First();
Console.WriteLine($"Selected source: {source.Name}");
if (source.Open() != ReturnCode.Success)
{
Console.WriteLine("ERROR: failed to open source.");
return;
}
Console.WriteLine($"supports printing? {source.Capabilities.CapPrinter.IsSupported}");
Console.WriteLine("Available printers: ");
var printers = source.Capabilities.CapPrinter.GetValues();
foreach (var printer in printers)
{
Console.WriteLine(printer.ToString());
}
Console.WriteLine($"Selected printer: {source.Capabilities.CapPrinter.GetCurrent().ToString()}");
// The typical source.Capabilities.CapPrinterEnabled, etc. doesn't work here because I'm using a Kodak scanner.
// How do I set a custom capability ID without modifying the lib??
// source.DGControl.Capability.Set(new TWCapability(CapabilityId.CustomBase, new TWOneValue() {Item = (uint)BoolType.True, ItemType = ItemType.Bool}));
source.Enable(SourceEnableMode.NoUI, false, IntPtr.Zero);
Console.WriteLine("End of main script.");
Console.ReadLine();
}
Подробнее здесь: https://stackoverflow.com/questions/797 ... -in-ntwain