繁体   English   中英

隐藏扫描仪进度栏窗口

[英]Hiding scanner progress bar window

我正在制作一个需要从扫描仪扫描图像的应用程序。

我的应用程序基于此项目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 );

我搜索了所有参数,但看不到任何可能禁用进度条的参数。

因此,我决定捕获正在创建的进度栏窗口的事件,然后将其隐藏(是否有更好的方法?),但事件并未被捕获。

首先,我创建一个临时窗口,因为我的应用程序将是Windows服务,也因为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;
}

当Twain的现成功能可用时,为什么要做所有这些事情。

只需将CAP_INDICATORS值设置为false即可。 十六进制值为: 0x100b

要阻止TWAIN弹出界面,您需要发送消息DG_CONTROL / DAT_USERINTERFACE / MSG_ENABLEDS其中ShowUI = FALSE和ModalUI = FALSE。 这是一些示例代码

也有可能在扫描过程中获得增量状态,而不是在整个扫描过程中都处于阻塞状态。 您可以使用内存块传输(而不是使用ImageNativeXfer),从Twain Spec的第4-20页开始介绍。 您可以在此处查看示例代码

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM