C# 隐藏扫描仪进度条窗口
我正在制作一个需要从扫描仪扫描图像的应用程序 我的申请基于这个项目 扫描部分工作良好 但我的问题是:我需要在不向用户显示任何窗口的情况下进行扫描 上述项目允许我不向用户显示扫描仪配置选项屏幕, 但它仍然显示进度条 当我调用时,进度条显示(扫描开始)C# 隐藏扫描仪进度条窗口,c#,winforms,winapi,events,hook,C#,Winforms,Winapi,Events,Hook,我正在制作一个需要从扫描仪扫描图像的应用程序 我的申请基于这个项目 扫描部分工作良好 但我的问题是:我需要在不向用户显示任何窗口的情况下进行扫描 上述项目允许我不向用户显示扫描仪配置选项屏幕, 但它仍然显示进度条 当我调用时,进度条显示(扫描开始) DSixfer( appid, srcds, TwDG.Image, TwDAT.ImageNativeXfer, TwMSG.Get, ref hbitmap ); [DllImport("twai
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_enables
,ShowUI=FALSE和ModalUI=FALSE。这是
也可以在扫描过程中获得增量状态,而不是在整个扫描过程中被阻止。不使用ImageNativeXfer,而是使用内存块传输,从的第4-20页开始介绍。您可以在windows vista&up中看到一个。窗口服务被禁止与桌面交互(这可能是您没有收到钩子事件的原因)。若要隔离问题,请尝试首先从非服务的应用程序执行此操作,查看是否在那里收到挂钩。如果是这样的话,您可以从服务启动一个桌面应用程序,该应用程序可以处理进度条的禁用。正因为如此,我所做的所有测试都来自windows窗体应用程序;)吐温在Windows上已经过时了。您需要升级到WIA(Windows图像采集)。我无法使用WIA,因为我的应用程序需要处理不支持WIA的旧扫描仪。您是否尝试将窗口置于桌面边界之外?类似于window.Left=-10000;window.Top=-10000;如果进度条相对于其父级显示,则它将不可见。