كيف يمكنني التحقق من إذا كان الماسح الضوئي في الوتر (C#, .صافي توين)

StackOverflow https://stackoverflow.com/questions/100284

  •  01-07-2019
  •  | 
  •  

سؤال

أنا باستخدام .صافي توين رمز من http://www.codeproject.com/KB/dotnet/twaindotnet.aspx?msg=1007385#xx1007385xx في التطبيق.عندما أحاول مسح صورة عند الماسح الضوئي لا في الوتر ، تجميد التطبيق.

كيف يمكنني معرفة ما إذا كان يتم توصيل الجهاز باستخدام توين السائق ؟

هل كانت مفيدة؟

المحلول

ربما أنا أخذ السؤال حرفيا ، ولكن باستخدام توين API ، فإنه ليس من الممكن أن تحقق إذا كان توصيل جهاز في أيتوصيل الطاقة.توين معيار يحدد القدرة لهذا الغرض يسمى CAP_DEVICEONLINE ، ولكن هذه الميزة سيئة تصور عدد قليل جدا من السائقين تنفيذ ذلك بشكل صحيح أنه لا جدوى في الممارسة العملية.

أقرب يمكنك الحصول على هذا:فتح الجهاز (MSG_OPENDS):تقريبا جميع السائقين سوف تحقق من الجهاز جاهزة عند فتحها, و سيتم عرض مربع حوار خطأ للمستخدم. لا يوجد توين آلية قمع أو الكشف عن هذا الحوار بعض السائقين سوف تسمح للمستخدم تصحيح المشكلة في هذه الحالة (التطبيق الخاص بك) سوف لا تعرف أبدا كانت هناك مشكلة.بعض السائقين سوف تسمح للمستخدم إلغاء ، وفي هذه الحالة MSG_OPENDS العملية سوف تفشل على الأرجح العودة TWRC_CANCEL ولكن ربما TWRC_FAILURE

بعض برامج التشغيل TWAIN سيتم فتح دون خطأ على الرغم من أن الجهاز هو خارج الخط.مثل هذا السائق قد return FALSE إلى استعلام من CAP_DEVICEONLINE.مثل هذا السائق ربما سوف تفعل الجهاز-على الانترنت تحقق عند تمكين الجهاز مع MSG_ENABLEDS ثم إذا كان الجهاز ليس على الخط ، يمكنك الحصول على الخطأ الحوار إلى المستخدم ، وذلك على النحو الوارد أعلاه.

جانبا وتغط:ويا هو 'الحديثة' ولكن أيضا أقل بكثير شاملة لإجراء المسح الضوئي من توين في تجربتي غير قابل للاستخدام متعدد المسح الضوئي من وحدة تغذية المستندات.ويا المصممين و مشرفي يبدو أن لا يفهم أو يهتم الماسحات الضوئية الأخرى من المستهلكين المنخفضة نهاية المسطحة.انها جيدة لجميع الكاميرات.

نصائح أخرى

لقد بدأت مع نفس التعليمات البرمجية المصدر التي قمت بتحميلها من CodeProject, ولكن انتقلت معظم التعليمات البرمجية في الحاسوب.cs الذي يبدأ المسح الضوئي الماسح الضوئي الدرجة.من أجل التحقق من مسح الأخطاء أدعو الطريقة التالية بدلا من الدعوة توين.اكتساب مباشرة:

enum AcquireResult
{
    OK = 0,
    InitFailed = 1,
    DeviceIDFailed = 2,
    CapabilityFailed = 3,
    UserInterfaceError = 4
}
private void StartScan()
{
    if (!_msgFilter)
    {
        _parent.Enabled = false;
        _msgFilter = true;
        Application.AddMessageFilter(this);
    }
    AcquireResult ar = _twain.Acquire();
    if (ar != AcquireResult.OK)
    {
        EndingScan();
        switch (ar)
        {
            case AcquireResult.CapabilityFailed:
                throw new Exception("Scanner capability setup failed");
            case AcquireResult.DeviceIDFailed:
                throw new Exception("Unable to determine device identity");
            case AcquireResult.InitFailed:
                throw new Exception("Scanner initialisation failed");
            case AcquireResult.UserInterfaceError:
                throw new Exception("Error with the Twain user interface");
            default:
                throw new Exception("Document scanning failed");
        }
    }
}

وعادة ما يشرع المسح حدث في موضوع منفصل من أجل التطبيق لا تجميد في حين أن المسح هو في التقدم.

فقط إضافة هذه التعليمة البرمجية على TwainCommand (cmd)

case TwainCommand.Null:
    {
     EndingScan();
     tw.CloseSrc();
             Msgbox("There is no device or the scannning has been cancelled.");
     break;
    }

هذا وسوف تظهر إذا كانت أنظمة الكشف عن أي جهاز أو المسح قد تم إلغاؤها.

يمكنك التحقق في التسجيل.في:

HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Class\{6bdd1fc6-810f-11d0-bec7-08002be2092f} كل الماسح الضوئي التي تم الكشف عنها هي المذكورة في المفاتيح الفرعية.

بدءا من 0000, تذهب من خلال وإذا تحقق CreateFileName القيمة الفارغة أو البيانات.

إذا كان لديه بيانات إنه توصيل الماسح الضوئي ، إذا كان فارغا, لا يوجد اتصال.

لقد حاول القيام بذلك ولكن لا تعمل جيدا مع توين mybe محاولة WIA

mybe جرب هذا:

على بوتون تشغيل الماسح الضوئي

timer1.Interval = 30000;

switch (cmd)
{
case TwainCommand.TransferReady:

{
..........
}

default:

{
timer1.Start();
break;
}

على الحدث جهاز ضبط الوقت القراد

{
EndingScan();
tw.CloseSrc();
}
مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top