26/01/16 10:41
Neo1986
Buongiorno a tutti!
E' da parecchio che non scrivevo più!
Vorrei chiedervi un consiglio, sto realizzando una dll per la comunicazione con periferiche USB Hid, riesco tramite la libreria hid.dll a fare tutto cio che è necessario ma purtroppo mi sono bloccato a questo punto :
-) Una volta avviata la comunicazione con la periferica HID, per sapere quando viene connessa o disconnessa, molti utenti sui vari forum utilizzano il metodo :
per ricevere i vari eventi della periferica usb in questione.
Il Problema è il parametro ByVal hRecipient As IntPtr, praticamete tutti gli utenti dei forum gli passano come parametri Me.Handle e gestiscono gli eventi nel form principale dell'applicazione in questo modo :
Volendo integrare tutto in una classe, non posso utilizzare WndProc.... secondo voi come potrei ovviare al problema?
PS. un'alternativa sarebbe quella di controllare 'a mano' (in un piccolo loop temporizzato) lo stato della periferica usb.
E' da parecchio che non scrivevo più!
Vorrei chiedervi un consiglio, sto realizzando una dll per la comunicazione con periferiche USB Hid, riesco tramite la libreria hid.dll a fare tutto cio che è necessario ma purtroppo mi sono bloccato a questo punto :
-) Una volta avviata la comunicazione con la periferica HID, per sapere quando viene connessa o disconnessa, molti utenti sui vari forum utilizzano il metodo :
<DllImport("user32.dll", CharSet:=CharSet.Auto, SetLastError:=True)> Shared Function RegisterDeviceNotification _ (ByVal hRecipient As IntPtr, _ ByVal NotificationFilter As IntPtr, _ ByVal Flags As Int32) _ As IntPtr End Function
per ricevere i vari eventi della periferica usb in questione.
Il Problema è il parametro ByVal hRecipient As IntPtr, praticamete tutti gli utenti dei forum gli passano come parametri Me.Handle e gestiscono gli eventi nel form principale dell'applicazione in questo modo :
Protected Overrides Sub WndProc(ByRef m As Message) Try ' The OnDeviceChange routine processes WM_DEVICECHANGE messages. If m.Msg = WM_DEVICECHANGE Then OnDeviceChange(m) 'Trace.WriteLine("CAMBIO STATO PERIFERICA") End If ' Let the base form process the message. MyBase.WndProc(m) Catch ex As Exception DisplayException(Me.Name, ex) Throw End Try End Sub
Volendo integrare tutto in una classe, non posso utilizzare WndProc.... secondo voi come potrei ovviare al problema?
PS. un'alternativa sarebbe quella di controllare 'a mano' (in un piccolo loop temporizzato) lo stato della periferica usb.
aaa