隐藏扫描仪进度条窗口
本文关键字:窗口 扫描仪 隐藏 | 更新日期: 2023-09-27 18:30:48
我正在制作一个需要从扫描仪扫描图像的应用程序。
我的应用程序基于这个项目http://www.codeproject.com/Articles/171666/Twain-for-WPF-Applications-Look-Ma-No-Handles扫描部分工作出色。
但这是我的问题:我需要在不向用户显示任何窗口的情况下进行扫描。
上面的项目允许我不向用户显示扫描仪配置选项屏幕,但它仍然显示进度条。
当我打电话时,进度条显示(扫描开始)
DSixfer(
appid,
srcds,
TwDG.Image,
TwDAT.ImageNativeXfer,
TwMSG.Get,
ref hbitmap );
[DllImport("twain_32.dll", EntryPoint="#1")]
private static extern TwRC DSixfer( [In, Out] TwIdentity origin, [In] TwIdentity dest, TwDG dg, TwDAT dat, TwMSG msg, ref IntPtr hbitmap );
我搜索了所有参数,但看不到任何可以禁用进度条的参数。
所以我决定捕获正在创建的进度条窗口的事件,并将其隐藏(有更好的方法吗?),但事件没有被捕获。
首先,我创建一个临时窗口,因为我的应用程序将是一个窗口服务,还因为 TWAIN 需要一个与进度条关联的窗口句柄。
这是我的代码
HookProc WindowCreationProcedure = new HookProc(WindowCreationHookProc);
int hHook = SetWindowsHookEx(WH_SHELL,
WindowCreationProcedure,
(IntPtr)0,
AppDomain.GetCurrentThreadId()
);
System.Windows.Window tmpWindow = new System.Windows.Window();
tmpWindow.WindowState = WindowState.Minimized; //So that the window isn't showed
tmpWindow.Show();
我收到正在创建我的 tmpWindow 的事件,但没有收到进度条。我在这里错过了什么?
*编辑 : * 忘记在这篇文章中添加我的钩子功能
private const int WH_SHELL = 10;
private const int HSHELL_WINDOWCREATED = 1;
public static int WindowCreationHookProc(int nCode, IntPtr wParam, IntPtr lParam)
{
if (nCode == HSHELL_WINDOWCREATED)
{
Console.WriteLine("WINDOW CREATED");
return 1;
}
return 0;
}
当吐温的现成能力可用时,为什么要做所有这些事情。
只需将CAP_INDICATORS
值设置为 false,就是这样。 它的十六进制值为:0x100b
。
要阻止 TWAIN 弹出它的界面,您需要使用 ShowUI = FALSE 和 ModalUI = FALSE DG_CONTROL / DAT_USERINTERFACE / MSG_ENABLEDS
发送消息。下面是一些示例代码。
还可以在扫描期间获取增量状态,而不是在整个扫描中被阻止。不使用 ImageNativeXfer,而是使用内存块传输,从吐温规范的第 4-20 页开始描述。您可以在此处查看示例代码。