public static extern ReturnCode DsmWin32( [In, Out] TW_IDENTITY origin, [In, Out] TW_IDENTITY destination, DataGroups dg, DataArgumentType dat, Message msg, ref TW_IMAGELAYOUT data);
/// <summary> /// Get/Set layout information... /// </summary> /// <param name="a_dg">Data group</param> /// <param name="a_msg">Operation</param> /// <param name="a_twimagelayout">IMAGELAYOUT structure</param> /// <returns>TWAIN status</returns> public STS DatImagelayout(DG a_dg, MSG a_msg, ref TW_IMAGELAYOUT a_twimagelayout) { STS sts; // Submit the work to the TWAIN thread... if ((m_threadTwain != null) && (m_threadTwain.ManagedThreadId != Thread.CurrentThread.ManagedThreadId)) { lock (m_lockTwain) { // Set our command variables... ThreadData threaddata = default(ThreadData); threaddata.twimagelayout = a_twimagelayout; threaddata.dg = a_dg; threaddata.msg = a_msg; threaddata.dat = DAT.IMAGELAYOUT; long lIndex = m_twaincommand.Submit(threaddata); // Submit the command and wait for the reply... CallerToThreadSet(); ThreadToCallerWaitOne(); // Return the result... a_twimagelayout = m_twaincommand.Get(lIndex).twimagelayout; sts = m_twaincommand.Get(lIndex).sts; // Clear the command variables... m_twaincommand.Delete(lIndex); } return (sts); } // Log it... if (Log.GetLevel() > 0) { Log.LogSendBefore(a_dg.ToString(), DAT.IMAGELAYOUT.ToString(), a_msg.ToString(), ImagelayoutToCsv(a_twimagelayout)); } // Windows... if (ms_platform == Platform.WINDOWS) { // Issue the command... try { if (m_blUseLegacyDSM) { sts = (STS)WindowsTwain32DsmEntryImagelayout(ref m_twidentitylegacyApp, ref m_twidentitylegacyDs, a_dg, DAT.IMAGELAYOUT, a_msg, ref a_twimagelayout); } else { sts = (STS)WindowsTwaindsmDsmEntryImagelayout(ref m_twidentitylegacyApp, ref m_twidentitylegacyDs, a_dg, DAT.IMAGELAYOUT, a_msg, ref a_twimagelayout); } } catch { // The driver crashed... Log.LogSendAfter(STS.BUMMER.ToString(), ""); return (STS.BUMMER); } } // Linux... else if (ms_platform == Platform.LINUX) { // Issue the command... try { if (TWAIN.GetMachineWordBitSize() == 32) { sts = (STS)LinuxDsmEntryImagelayout(ref m_twidentitylegacyApp, ref m_twidentitylegacyDs, a_dg, DAT.IMAGELAYOUT, a_msg, ref a_twimagelayout); } else { sts = (STS)Linux64DsmEntryImagelayout(ref m_twidentityApp, ref m_twidentityDs, a_dg, DAT.IMAGELAYOUT, a_msg, ref a_twimagelayout); } } catch { // The driver crashed... Log.LogSendAfter(STS.BUMMER.ToString(), ""); return (STS.BUMMER); } } // Mac OS X, which has to be different... else if (ms_platform == Platform.MACOSX) { // Issue the command... try { sts = (STS)MacosxDsmEntryImagelayout(ref m_twidentitymacosxApp, ref m_twidentitymacosxDs, a_dg, DAT.IMAGELAYOUT, a_msg, ref a_twimagelayout); } catch { // The driver crashed... Log.LogSendAfter(STS.BUMMER.ToString(), ""); return (STS.BUMMER); } } // Uh-oh... else { Log.LogSendAfter(STS.BUMMER.ToString(), ""); return (STS.BUMMER); } // Log it... if (Log.GetLevel() > 0) { Log.LogSendAfter(sts.ToString(), ImagelayoutToCsv(a_twimagelayout)); } // All done... return (AutoDatStatus(sts)); }
/// <summary> /// Convert the contents of a string to an image layout structure... /// </summary> /// <param name="a_twimagelayout">A TWAIN structure</param> /// <param name="a_szImagelayout">A CSV string of the TWAIN structure</param> /// <returns>True if the conversion is successful</returns> public bool CsvToImagelayout(ref TW_IMAGELAYOUT a_twimagelayout, string a_szImagelayout) { // Init stuff... a_twimagelayout = default(TW_IMAGELAYOUT); // Build the string... try { string[] asz = CSV.Parse(a_szImagelayout); // Sort out the frame... a_twimagelayout.Frame.Left.Whole = (short)double.Parse(asz[0]); a_twimagelayout.Frame.Left.Frac = (ushort)((double.Parse(asz[0]) - (double)a_twimagelayout.Frame.Left.Whole) * 65536.0); a_twimagelayout.Frame.Top.Whole = (short)double.Parse(asz[1]); a_twimagelayout.Frame.Top.Frac = (ushort)((double.Parse(asz[1]) - (double)a_twimagelayout.Frame.Top.Whole) * 65536.0); a_twimagelayout.Frame.Right.Whole = (short)double.Parse(asz[2]); a_twimagelayout.Frame.Right.Frac = (ushort)((double.Parse(asz[2]) - (double)a_twimagelayout.Frame.Right.Whole) * 65536.0); a_twimagelayout.Frame.Bottom.Whole = (short)double.Parse(asz[3]); a_twimagelayout.Frame.Bottom.Frac = (ushort)((double.Parse(asz[3]) - (double)a_twimagelayout.Frame.Bottom.Whole) * 65536.0); // And now the counters... a_twimagelayout.DocumentNumber = (uint)int.Parse(asz[4]); a_twimagelayout.PageNumber = (uint)int.Parse(asz[5]); a_twimagelayout.FrameNumber = (uint)int.Parse(asz[6]); } catch { return (false); } // All done... return (true); }
/// <summary> /// Convert the contents of a image layout to a string that we can show in /// our simple GUI... /// </summary> /// <param name="a_twimagelayout">A TWAIN structure</param> /// <returns>A CSV string of the TWAIN structure</returns> public string ImagelayoutToCsv(TW_IMAGELAYOUT a_twimagelayout) { try { CSV csv = new CSV(); csv.Add(((double)a_twimagelayout.Frame.Left.Whole + ((double)a_twimagelayout.Frame.Left.Frac / 65536.0)).ToString()); csv.Add(((double)a_twimagelayout.Frame.Top.Whole + ((double)a_twimagelayout.Frame.Top.Frac / 65536.0)).ToString()); csv.Add(((double)a_twimagelayout.Frame.Right.Whole + ((double)a_twimagelayout.Frame.Right.Frac / 65536.0)).ToString()); csv.Add(((double)a_twimagelayout.Frame.Bottom.Whole + ((double)a_twimagelayout.Frame.Bottom.Frac / 65536.0)).ToString()); csv.Add(a_twimagelayout.DocumentNumber.ToString()); csv.Add(a_twimagelayout.PageNumber.ToString()); csv.Add(a_twimagelayout.FrameNumber.ToString()); return (csv.Get()); } catch { return ("***error***"); } }
private static extern UInt16 MacosxDsmEntryImagelayout ( ref TW_IDENTITY_MACOSX origin, ref TW_IDENTITY_MACOSX dest, DG dg, DAT dat, MSG msg, ref TW_IMAGELAYOUT twimagelayout );
private static extern UInt16 Linux64DsmEntryImagelayout ( ref TW_IDENTITY origin, ref TW_IDENTITY dest, DG dg, DAT dat, MSG msg, ref TW_IMAGELAYOUT twimagelayout );
private static extern UInt16 WindowsTwaindsmDsmEntryImagelayout ( ref TW_IDENTITY_LEGACY origin, ref TW_IDENTITY_LEGACY dest, DG dg, DAT dat, MSG msg, ref TW_IMAGELAYOUT twimagelayout );