我希望使用托管web API的windows服务操作扫描仪。
我这样做的原因是能够使用ajax从javascript操作扫描仪,我不希望使用ActiveX。
因此,我构建了一个承载Web API的Windows服务。
我试图让web API启动扫描应用程序(为此必须绕过UAC),但我遇到了一致性问题(有时有效,有时无效)。
因此,目前web API的控制器内置了开始扫描的代码(而不是外部应用程序)。问题是我没有一个句柄来提供twain包装器(windows消息挂钩需要它)。
我尝试使用当前进程的MainWindowHandle,甚至尝试了一些愚蠢的操作,比如使用iexplore MainWindowHandle,结果出现了一个异常“初始化DSM时出错”。
作为我使用的twain库
TwainDotNet
操作代码为:
var p = Process.GetCurrentProcess();
_twain = new Twain(new WinFormsWindowMessageHook(p.MainWindowHandle));
有没有什么好办法可以解决这个问题?正如我在上面所写的,如果可以的话,我同意“窃取”另一个应用程序句柄(例如iexplore)
以下代码中的TwainDotNet类DataSourceManager构造函数引发异常:
TwainResult result = Twain32Native.DsmParent(
ApplicationId,
IntPtr.Zero,
DataGroup.Control,
DataArgumentType.Parent,
Message.OpenDSM,
ref windowHandle);
if (result == TwainResult.Success)
{
...
}
else
{
throw new TwainException("Error initialising DSM: " + result, result);
}
谢谢