RegisterDevicenOtifice يعود لاغية ولكن الإشعارات لا تزال مستنيمة

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

  •  20-08-2019
  •  | 
  •  

سؤال

أنا أستخدم RegisterDevicEnotification لمشاهدة التغييرات على جهاز USB ، باستخدام حدث WM_DeviceChange. ومع ذلك ، عندما أتصل بـ registerDevicenOtification () ، فإنه يعيد فارغًا لمقبض الإخطار ، والذي يجب أن يشير إلى أنه فشل. لكن getLasterror () يعيد error_success والإشعارات تمر بالفعل.
هذا يسبب مشكلة حقيقية عندما أحتاج لاحقًا إلى إلغاء التسجيل للإشعارات ثم إعادة التسجيل. نظرًا لأن المقبض الذي تم إرجاعه كان فارغًا ، لا يمكنني إعادة التسجيل. إذا حاولت ، فإن registerDevicenOtification () مجرد معلقة.

قانون بلدي على النحو التالي:

DEV_BROADCAST_HANDLE   devBrHdr;

::ZeroMemory( &devBrHdr,sizeof( DEV_BROADCAST_HANDLE ) );
devBrHdr.dbch_size = sizeof( DEV_BROADCAST_HANDLE );
devBrHdr.dbch_devicetype = DBT_DEVTYP_HANDLE;
devBrHdr.dbch_handle = m_hDriver;

m_hDevNotify = ::RegisterDeviceNotification( hWnd,&devBrHdr,DEVICE_NOTIFY_WINDOW_HANDLE );

M_Hdriver هو مقبض السائق ، الذي فتحته مسبقًا ، عند الاتصال بالجهاز (ماسح الباركود USB).

أي أفكار ما أفعله خطأ هنا؟

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

المحلول

  1. تأكد من أنك لا تقوم بإجراء مكالمة أخرى من واجهة برمجة تطبيقات WIN32 RegisterDeviceNotification و GetLastError.

  2. تحقق من قيمة devBrHdr.dbch_hdevnotify. يجب أن يحتوي على نفس المقبض الذي تم إرجاعه بواسطة RegisterDeviceNotification.

  3. كان m_hDriver القيمة التي تم الحصول عليها من مكالمة إلى CreateFile?

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top