Как установить пользовательские возможности в Ntwain?C#

Место общения программистов C#
Ответить
Anonymous
 Как установить пользовательские возможности в Ntwain?

Сообщение Anonymous »

Я использую 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
Ответить

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

Вернуться в «C#»