Bubuss
Messages postés147Date d'inscriptionsamedi 7 juin 2003StatutMembreDernière intervention 8 décembre 2007
-
16 mars 2007 à 16:22
Lutinore
Messages postés3246Date d'inscriptionlundi 25 avril 2005StatutMembreDernière intervention27 octobre 2012
-
13 août 2010 à 13:09
Salut tt lmonde,
Je suis en train de chercher à faire un num pad virtuel à la manière du clavier virtuel de windows pour que ma fenetre ou mon programme actif (tel que le bloc note par exemple) reçoive l'evenement clavier du chiffre que je souhaite
Je me suis renseigné sur la fonction SendInput() et j'ai téléchargé quelques exemples de code mais je ne saisi pas du tout comment cette méthode s'implémente..
Auriez vous un exemple en C# de l'utilisation de cette fonction pour appeler un evenement clavier ?
Merci
Lutinore
Messages postés3246Date d'inscriptionlundi 25 avril 2005StatutMembreDernière intervention27 octobre 201241 17 mars 2007 à 05:29
Salut, pourtant on a donné pas mal d'exemples de SendInput dans le forum. Regardes aussi la classe managée SendKeys.
[ StructLayout( LayoutKind.Sequential ) ]
internal struct KEYBDINPUT
{
public uint type;
public ushort vk;
public ushort scan;
public uint flags;
public uint time;
public UIntPtr extraInfo;
private uint padding0;
private uint padding1;
}
[ System.Security.SuppressUnmanagedCodeSecurity ]
internal static class Win32
{
public const int INPUT_KEYBOARD = 1;
public const int KEYEVENTF_KEYUP = 0x0002;
public static readonly int SIZEOF_INPUT = Marshal.SizeOf( typeof( KEYBDINPUT ) );
[ DllImport( "user32.dll", SetLastError = true ) ]
public static extern uint SendInput( uint num, [ In ] KEYBDINPUT[ ] inputs, int size );
cudenetf
Messages postés448Date d'inscriptionmardi 20 septembre 2005StatutMembreDernière intervention26 juillet 20122 10 août 2010 à 07:33
Bonjour , c'est la seule info que j'ai trouvé sur le sujet (assez simple) , je l'ai donc testé mais quand je clique sur le bouton je n'ai qu'une lettre qui apparait.
ie: je clique sur a : j'ai "a" ds le textbox, je clique sur "b" , j'ai "b" et non "ab"
aussi j'aimerais pouvoir le faire depuis un autre formulaire qui serait mon clavier... que dois je passer comme argument ? (si je veux travailler sur des datagrids par exemple) merci
cudenetf
Messages postés448Date d'inscriptionmardi 20 septembre 2005StatutMembreDernière intervention26 juillet 20122 10 août 2010 à 12:01
J'ai aussi des formes modales et je n'arrive donc pas a taper sur mon clavier virtuel
alors que j'ai testé avec celui de windows cela fonctionne...
il arrive a completer automatiquement les cases sur lequel ya le focus (sans qu'on ai a lui dire ou ya le focus )
bref il fonctionne réellement comme un clavier
le seul probleme c'est sa taille ...
comment puis obtenir le meme comportement ???
Vous n’avez pas trouvé la réponse que vous recherchez ?
Lutinore
Messages postés3246Date d'inscriptionlundi 25 avril 2005StatutMembreDernière intervention27 octobre 201241 13 août 2010 à 12:32
Salut, SendInput simule le clavier, donc ça va écrire là où se trouve le focus mais si tu utilises ton propre clavier virtuel (une forme à toi) au moment ou tu cliques sur ta forme c'est elle qui va prendre le focus ou du moins l'un de ses cntrôles enfants. Il faut donc que ton clavier virtuel soit une application qui ne gère pas le focus, c'est possible il faut se renseigner sur les styles Win32 et sur la fonction SetStyles.
Lutinore
Messages postés3246Date d'inscriptionlundi 25 avril 2005StatutMembreDernière intervention27 octobre 201241 13 août 2010 à 13:09
Un exemple de début de clavier virtuel, j'utilise le style WS_EX_NOACTIVATE mais ça produit un petit effet de bord, la fenêtre n'est plus très réactive.
[i]namespace MyKeyboard
{
public partial class Form1 : Form
{
public Form1( )
{
InitializeComponent( );
Button a = new Button( );
a.Text = "a";
a.Size = new Size( 32, 32 );
a.Location = new Point( 10, 10 );
a.Parent = this;
a.Click += new EventHandler( Button_Click );
Button b = new Button( );
b.Text = "b";
b.Size = new Size( 32, 32 );
b.Location = new Point( 48, 10 );
b.Parent = this;
b.Click += new EventHandler( Button_Click );
}