begin process at 2012 02 04 09:19:49
  Trouver un code source :
 
dans
 
Accueil > 

Code

 > 

Périphériques

 > LIBRAIRIE RAWINPUT .NET

LIBRAIRIE RAWINPUT .NET


 Information sur la source

Note :
10 / 10 - par 3 personnes
10,00 / 10

  • 1

  • 2

  • 3

  • 4

  • 5

  • 6

  • 7

  • 8

  • 9

  • 10
Catégorie :Périphériques Source .NET ( DotNet ) Classé sous :usb, hid, souris, clavier, input Niveau :Expert Date de création :26/07/2007 Date de mise à jour :03/02/2010 18:17:39 Vu / téléchargé :13 433 / 782

Auteur : Lutinore

Ecrire un message privé
Commentaire sur cette source (15)
Ajouter un commentaire et/ou une note

 Description

Cliquez pour voir la capture en taille normale
RawInput .NET est un wrapper managé de l'API Win32 du même nom, qui permet de gérer tous les périphériques répondant à la norme USB/HID ainsi que de gérer plusieurs souris ou plusieurs claviers. (chose que même DirectInput ne sait pas faire.)

J'ai fait le choix de faire un wrapper assez proche de la librairie originale, (une unique classe et un seul évènement statique pour tous les types de périphériques) ce qui permet de garder de bonnes performances et ne nécessite pas d'apprentissage si on connait la version Win32.


 Conclusion

La documentation n'est pas compilée, l'éditeur de Visual Studio n'affiche qu'une partie de l'aide, utilisez par exemple l'explorateur d'objets pour visualiser certaines remarques contenues dans les commentaires XML.

 Fichier Zip

Les Membres Club peuvent télécharger directement un fichier contenu dans le zip sans télécharger le zip en entier !

Télécharger le zip


 Historique

27 juillet 2007 08:45:55 :
Correction d'un bug mineur.
28 juillet 2007 10:56:58 :
La description du device n'est plus une chaine vide sous Windows XP.
03 février 2010 18:17:40 :
Version 1.1

 Sources de la même categorie

Source .NET (Dotnet) GETPORTCOM AMELIORÉ par BarthOlivier
Source avec Zip Source .NET (Dotnet) OBTENIR LA LISTE DES PÉPRIPHÉRIQUES ÉJECTABLES (LES CLÉS USB... par ShareVB
Source avec Zip Source avec une capture USB DETECTOR 3.0 par ZackSword
Source avec Zip Source avec une capture USB DETECTOR VERSION 2.0 par wolf145
Source avec Zip Source .NET (Dotnet) LIRE ET CHANGER LA LUMINOSITÉ DES ÉCRANS LCD (DE PORTABLE) C... par ShareVB

 Sources en rapport avec celle ci

Source avec Zip Source avec une capture USB DETECTOR VERSION 2.0 par wolf145
Source avec Zip Source .NET (Dotnet) SIMULATION D'ÉVÉNEMENTS CLAVIER ET SOURIS par mastercatz
Source avec Zip Source avec une capture Source .NET (Dotnet) DÉSACTIVATION CLAVIER ET SOURIS par Bidou
Source avec Zip Source .NET (Dotnet) DX9 : TUTORIEL 5 - DIRECTINPUT : SOURIS ET CLAVIER par clemox
Source avec Zip Source avec une capture Source .NET (Dotnet) BIG BROTHER IS WATCHING YOU par pisko

Commentaires et avis

Commentaire de Bidou le 26/07/2007 11:46:29 administrateur CS

Hé bien, elle s'est fait attendre cette première source dit-moi !
On espère que de similaires arriveront bientôt ;-)

Commentaire de Lutinore le 26/07/2007 12:20:24 administrateur CS

Dans 4 ans la prochaine :D

Commentaire de coq le 26/07/2007 18:57:05 administrateur CS

Lol
Bien, j'ajoute celà à la liste des trucs à regarder, ça peut être bon à savoir :-)

Commentaire de TheSin le 27/07/2007 10:22:57

Sympa :-)
Je ne connaissais pas RawInput, ça peut servir :-)
DirectInput gère plusieurs claviers/souris, mais ne permet pas de les utiliser en même temps, un seul périphérique de même type à la fois :(.
Pratique.

Commentaire de Lutinore le 27/07/2007 10:38:32 administrateur CS

TheSin > merci, oui c'est bien de cela que je parle :

"On Microsoft Windows XP, DirectInput enumerates only one mouse and one keyboard device, referred to as the system mouse and the system keyboard. These devices represent the combined output of all mice and keyboards respectively on a system. For information about how to read from multiple mice or keyboards individually on Windows XP, see the WM_INPUT documentation."

Commentaire de Lutinore le 01/08/2007 14:15:20 administrateur CS

Microsoft a sorti récemment MultiPoint SDK une sorte de wrapper autour de l'API RawInput pour .NET 3.0 (WPF) uniquement mais ça semble moins souple et moins rapide que ma petite librairie. :p

Commentaire de coq le 01/08/2007 18:59:27 administrateur CS

Exactement ! :p

Commentaire de djine le 27/10/2008 22:50:01 10/10

Très bonne source, je cherchais ça depuis longtemps !

Cependant, j'ai un tabletPC, et lorsque je tente d'utiliser le stylet et la souris en même temps, l'un ou autre se met attente jusqu'à ce qu'un nouvel événement se produise (exemple : MouseUp ou MouseDown).

Donc pas de possibilité d'utiliser le mouvement du stylet et de la souris en parallèle.

Si quelqu'un a une idée, je suis preneur !

9/10.

Commentaire de Lutinore le 28/10/2008 13:10:17 administrateur CS

Merci.. Je ne sais pas comment Windows gère le stylet, d'après ce que tu dis il simule une souris mais je ne vois pas pourquoi ça interfère avec l autre souris.

Avec ce code tu peux énumérer les périphèriques sur ton système.

foreach( RawDevice device in RawDevice.GetRawDevices( ) )
{
    RawInfo info = device.GetRawInfo( );
    string desc = String.Format
    (
        "Description: {0}\r\n" +
        "Handle: {1}\r\n" +
        "Type: {2}\r\n" +
        "Page: {3}\r\n" +
        "Usage: {4}",
        device.Description,
        device.Handle,
        device.RawType,
        info.UsagePage,
        info.Usage
    );
    MessageBox.Show( this, desc, "Info" );
}

Commentaire de djine le 28/10/2008 22:41:35

Voila la liste des devices de type mouse que j'obtiens sur mon portable sens aucune souris branché :
- Description: Wacom Mouse,Handle: 65615, Type: Mouse, Page: 1, Usage: 2 (WACOM -> tablet)
- Description: Souris HID,Handle: 65613, Type: Mouse, Page: 1, Usage: 2
- Description: Souris HID,Handle: 65611, Type: Mouse, Page: 1, Usage: 2
- Description: Synaptics PS/2 Port TouchPad,Handle: 65609, Type: Mouse, Page: 1, Usage: 2

Le mouvement du stylet ou touché génèrent bien l'event RawDevice_RawInput(...).
Il est d'ailleur tout a fait possible de recupèrer les coordonnées du stylet avec
(MouseData )args.GetRawData(), cependant, ce sont des coordonnées absoluts (contrairement à une souris). Ces coordonnées sont d'ailleurs bien plus précises que la souris. (X allant de 0 à 10000 pr donner une ordre d'idée).

En revanche, les soucis arrivent lorsque que l'on essai de récupérer des infos sur la source des donnée envoyé par l'event RawDevice_RawInput(). Dans le cas d'un mouvement de stylet, le handle est égale à 0, et il est impossible de vérifier la source des données par un GetRawDevice(), cela lance une exeption.

Comment se fait il que le handle est détècté correctement lors de l'initialisation :
ex : Description: Wacom Mouse,Handle: 65615, Type: Mouse, Page: 1, Usage: 2
Et que lors de l'evenement RawDevice_RawInput(), le handle soit 0.

Merci pour ton aide !

Commentaire de Lutinore le 29/10/2008 13:24:37 administrateur CS

Un handle à zéro signifie un device virtuel généré par Windows ou un device simulé depuis un autre et dans ce cas GetRawDevice( ) renvoie null puisque le device n'existe pas, c'est ce qui provoque une exception dans ton code. Mais même avec un handle à zéro tu devrais pouvoir utiliser ce device correctement sans qu'il interfère avec les autres souris.

Essaye d'utiliser le flag InputMode.BackgroundMode dans RegisterRawDevices pour voir si tu reçois les events du stylet avec son vrai handle.

Sinon tourne toi vers des API dédiées au tablet PC comme "RealTimeStylus".

Commentaire de TeBeCo le 21/11/2010 05:39:01

Ton bout de code remonte y a un petit bout de temps, il se peux donc que mes questions semblent dérangeantes ^^

je travaille actuellement sur une source (certes en C++) mais toujours sur les Raw Inputs.
J'interface une "Souris 3D" de chez 3DConnexion : http://www.3dconnexion.com/products/spaceexplorer.html
J'arrive "presque" à tout faire avec mon code ...
Cependant j'ai quelques interrogation,

La première concerne la structure RAWINPUTDEVICE : http://msdn.microsoft.com/en-us/library/ms645565(VS.85).aspx
en particulier les 2 membres
  USHORT usUsagePage;
  USHORT usUsage;
Je n'ai pas réussi à trouver de page montrant une table des valeur dedans, je suppose que les valeur dedans évolue dans le temps, mais je n'ai pas trouvé ne serait-ce que les standards. En bidouillant dans le code je sais que ma souris me renvois 0x01 et 0x08, mais je n'ai pas de référence pour comparer/comprendre cette valeur.

La deuxième concerne la lecture d'un paquet reçu via WM_INPUT, via un GetRawInputData( lParam, ....)
je récupère donc une structure du type RAWHID : http://msdn.microsoft.com/en-us/library/ms645549.aspx
et la je ne suis pas vraiment sur de savoir comment comprendre la doc pour les différent membre, si je comprend bien les 2premiers membres indique la taille et la quantité de "case" dans bRawData, qui lui est un pointeur sur le premier élément du tableau ?
si oui ... c'est la ou ca devient pas drôle mais ... j'ai pas trouvé de limite a la quantité d'info qu'on peux passé par packet, est ce que je doit en conclure qu'on peux en envoyé sans se poser de question sur la taille ?
De plus le device en question envoi sur le premier octet (donc bRawData[0]) une valeur me permettant de déterminer le type de message (bouton, rotation, translation).
En regardant le SDK (de la souris) en détails, j'ai remarqué que dans un exemple il récupère un pointeur à l'adresse bRawData[1] (celui ci pointe sur les valeur réelle de la souris). Problème étant ... x86 / x64 et Alignement,
1 : je pose pas ma question au bon endroit ?
2 : unsigned long value = *( (long *)(&(hid.bRawData[1])) ) <=== est ce que l'alignement va pas mettre le boxon la dedans sachant que je me suis récemment mis au C++ et que je dis probablement une connerie ....
3 : les pointeurs en x64 c'est jolie, mais ..., ca mettrait pas encore PLUS le dawa dans tout ca ? ou alors Windows saura le gérer au moment ou il allouera bRawData et qu'il écrira la valeur dedans
D : la réponse D


et enfin, dernier problème plutôt orienté Architecture et Performances et un peu plus détaché de cette source
durant mes recherche j'ai vu que pour récupérer les valeurs envoyées par la souris j'avais 2 moyen à ma disposition :
1 : via le WM_INPUT de ma fenêtre
2 : via la GetRawInputBuffer(...) dans une boucle + Timer
Dans ton code tu utilises la 2ieme méthode, pour des questions de simplicité et apprentissage j'ai utilisé la première. Sachant que je vais l'intégrer à des application intégrant un rendu 3D, que conseillerais-tu comme "schéma de traitement", je ne demande pas de code tout fait ou quoi, si j'utilise la première méthode, j'aurais des message différé vis-à-vis de la boucle de rendu et j'aurais a jonglé entre 2 état : actuel / dernier état lors du dernier rendu (multithreading de Dx11 mise a part sinon je vais crisé), si j'utilise la méthode 2, il faudra que je traite (je présume) l'intégralité du buffer jusqu'à épuisement + filtrer les type de paquet (rotation, boutton ...) pour être sur de l'état "final" (le device envoi 1 paquet par action, il n'émet pas en continu)


Et finalement :
"Dans 4 ans la prochaine :D"
Gaffe te restes qu'un ans

Commentaire de Lutinore le 25/11/2010 18:45:58 administrateur CS

Salut, tu trouveras les valeurs dans "Universal Serial Bus HID Usage Tables" :

http://www.usb.org/
http://www.usb.org/developers/devclass_docs/Hut1_11.pdf

Ton périphérique semble être reconnu comme un "Multi-axis controler".

Je ne comprends pas bien quand tu parles de la limite de taille des packets à envoyer, Rawinput permet de recevoir les données du hardware mais pas d'en envoyer ni de les simuler.

Le membre RAWHID.dwSizeHid contient la taille des données envoyées par le device, c'est une structure dont seul le fabriquant connait la disposition mais en tâtonnant on devine très vite la disposition.

Cette structure peut avoir été envoyée plusieurs fois et dans ce cas RAWHID.dwCount indique le nombre. (en pratique il semble que ce soit toujours 1).

La taille du buffer RAWHID.bRawData est donc égale à dwSizeHid * dwCount.

Je te conseille vivement d'utiliser WM_INPUT c'est bien plus simple et beaucoup mieux documenté, j'ai fait un exemple avec GetRawInputBuffer pour montrer comment ça marche mais à mons avis cette méthode doit être reservée pour les périphériques qui génèrent beaucoup de données à la seconde comme des périphériques audio ou vidéo.

Commentaire de ilens le 02/12/2010 18:29:26

(Je suis Anglais - donc j'ecrit la francais tres mal!)

Quand j'utilise le DLL en VB.net, et je tick "Windows.Rawinput" le Namespace "System.Windows" ne marche en plus. par example, j'ai recu le message de compilation "'Form' is not a member of Windows". Si je ne tick pas "Windows.Rawinput", il n'y a plus le message, mais maintenant je voir "Name 'RawDevice' is not declared."

Aidez-mais, s'il vous plait!

When I install the RawInput.net DLL in VB.net, and I tick "Windows.Rawinput" in "References", the Namespace "System.Windows" does not work any more - for example, I get the compiler message "'Form' is not a member of Windows" against "system.windows.form.dialogresult.cancel". If I don't tick "Windows.Rawinput", I don't the Form error but I get "Name 'RawDevice' is not declared."

Commentaire de Lutinore le 02/12/2010 19:58:35 administrateur CS

hi, I don't know VB.NET..

The DLL is CLS-compliant and should be able to run in VB.NET.

I think you have a namespace conflict.

The only namespace useful is "Windows.RawInput"

Try to create an alias for the namespace.

Imports WinRawInput = Windows.RawInput

 Ajouter un commentaire


Discussions en rapport avec ce code source dans le forum

Simulation clavier/souris [ par Ordinastie ] Bonjour.Voial, mon but est de simuler l'appui d'une touche ou d'un s&#233;quence de touches du clavier.M'&#233;tant pench&#233; du cot&#233; de l'API Bloquer la souris et le clavier [ par sayed2005 ] je cherche comment bloquer la souris et le clavier d'un PC,a l'instar de NetS Récupérer positions souris et frappes clavier [ par guillaume_quest ] Bonjour à tous, Je voudais connaître une fonction qui permet de récupérer la position de ma souris par rapport au haut de la fenêtre (ou en haut de ma [Souris et Clavier] [ par KqMii ] Bonjours, J'aimerais savoir comment je pourais par exemple quand j'appuis sur la touche F4 cela simule un clic souris et Quand j'appuis sur F3 Cela et clavier et souris sans fil [ par ecr ] ecrBonsoir,Je viens d'acquérir un clavier et une souris sans fil Logitech Deluxe 660 Cordless Desktop, mais je n'ai aucun voyant qui m'indique si Verr problème de gestion de clavier et de souris [ par brunhoff ] bonjour dans un programme j'utilise un clavier visuel et l'utilisation du clavier "physique" pour pouvoir jouer &#224; 2 mais d&#232;s que je clique s communication usb hid en C# [ par koceila882 ] bonjour pour mon projet de fin d'étude j'en ai besoin de realiser une interface en c# pour pouvoir communiquer en usb hid .... je cherchais cherchai problème pour réaliser une IHM en C# qui dialogue avec un PIC18F4550 en USB(hid) [ par joseMiguel ] Bonjour, j'essaie de réaliser une petite IHM depuis un PC pour me connecter à un PIC18F4550 via l'USB . j'utilise la librairie hid de florian leitner Désactiver clavier [ par onde2chockgbkgb ] Bonjour à tous. Avant toute chose, je voudrais au préalable m'excuser de poster ici car je ne pense pas que ma demmande soit orienté dans le sens de lister les peripheriques usb de type imprimante ou copieur [ par benjion ] Bonjour,gros probleme pour demarrer mon code  je voudrais juste dans un premier temps qu'au forme load s'inscrive dans une list box d'un form l'enssem


Nos sponsors


Sondage...

Comparez les prix

CalendriCode

Février 2012
LMMJVSD
  12345
6789101112
13141516171819
20212223242526
272829    

Consulter la suite du CalendriCode

 
Développement réalisé par Nicolas SOREL (Nix) avec l'aide de : Cyril DURAND et Emmanuel (EBArtSoft), Merci à Vincent pour ses précieux conseils.
CodeS-SourceS.com© Toute reproduction même partielle est interdite sauf accord écrit du Webmaster
CodeS-SourceS.com© est une marque déposée tous droits réservés

Google Coop CodeS-SourceS Google Coop CodeS-SourceS
Temps d'éxécution de la page : 1,778 sec (4)

Nous contacter | Annoncer sur CodeS-SourceS | Mentions légales