Capslock

cudenetf Messages postés 448 Date d'inscription mardi 20 septembre 2005 Statut Membre Dernière intervention 26 juillet 2012 - 24 août 2006 à 08:22
Lutinore Messages postés 3246 Date d'inscription lundi 25 avril 2005 Statut Membre Dernière intervention 27 octobre 2012 - 4 juin 2007 à 09:01
bonjour,
je voudrais pouvoir activer automatiquement les majuscule ssur certains formulaires
j'ai essayé
            if (!Control.IsKeyLocked(Keys.CapsLock))
            {
                SendKeys.Send("{capslock}");
            }
mais quand je tape ds les champs text , celui ci est toujours en minuscules

Quelqu'un pourrait-il m'expliquer pourquoi?
[comme test g egalement ajouté        
    if (e.KeyCode == Keys.CapsLock)
            {
                if (!Control.IsKeyLocked(Keys.CapsLock))
                {
                    MessageBox.Show("Vous avez désactivé les majuscules!!\nVous en avez besoin pour le lecteur de code barre.");
                }
                else
                {
                    MessageBox.Show("Majuscules activées");
                }
            }

dans un événement keydown
et j'obtiens le message majuscules acitvées (mais elles ne le sont pas en vrai)

14 réponses

nerix27 Messages postés 86 Date d'inscription jeudi 23 octobre 2003 Statut Membre Dernière intervention 21 juin 2007 2
24 août 2006 à 11:30
Autre manière, sur l'événement TextChanged, tu peux mettre :


control.Text = control.Text.ToUpper();

où "control" est le nom de ton textbox...

C'est beaucoup mieux que de simuler l'appui d'une touche...
1
leprov Messages postés 1160 Date d'inscription vendredi 23 juillet 2004 Statut Membre Dernière intervention 21 octobre 2010 17
24 août 2006 à 10:29
si tes controles sont des textbox, tu as tout simplement la propriété CharacterCasing que tu peux passer sur "upper". sinon, tu peux tout simplement ne pas tenir compte de la casse utilisée par l'utilisateur.

string MaString = lecontroledesaisi.lastring;
MaString.ToUpper();
pas besoin de lui forcer l'activation de la touche majuscule (ce qui est dailleurs tres tres chiant quand une appli fait ca, dailleurs)
0
Lutinore Messages postés 3246 Date d'inscription lundi 25 avril 2005 Statut Membre Dernière intervention 27 octobre 2012 41
24 août 2006 à 11:12
0
cudenetf Messages postés 448 Date d'inscription mardi 20 septembre 2005 Statut Membre Dernière intervention 26 juillet 2012 2
24 août 2006 à 13:30
ok merci,
mais ds le cas d'appuie sur les touches numeriques en haut du clavier (ou d'un ordi portable) si j'appuie sur la touche je ne crois pas que cela change le & en 1 (par exemple).
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
cudenetf Messages postés 448 Date d'inscription mardi 20 septembre 2005 Statut Membre Dernière intervention 26 juillet 2012 2
24 août 2006 à 13:34
aussi merci a lutinore qui me renvoiue sur une question que j'avais deja poser precedemment; lol
par contre le probleme avec celle-ci est que meme lorsque je lancais mon appli sans lancer ce formulaire ou je voulais forcer le capslock(avec  
[ DllImport( "user32.dll", SetLastError = true ) ]
    private static extern uint SendInput( uint num, [ In ] KEYBDINPUT[ ] inputs, int size );),
cleui-ci se declenchait (par exemple je lancais un autre formulaire ocntenu ds le meme projet) et quand je revenais sous visual studio et ben ct en majuscule et ca a fini par me fatigué (lol).
0
cudenetf Messages postés 448 Date d'inscription mardi 20 septembre 2005 Statut Membre Dernière intervention 26 juillet 2012 2
24 août 2006 à 13:37
mais je comprends toujours pas pourquoi le sendkeys.send("{capslock}") ne fonctionne pas. ??
0
Lutinore Messages postés 3246 Date d'inscription lundi 25 avril 2005 Statut Membre Dernière intervention 27 octobre 2012 41
24 août 2006 à 14:52
"merci a lutinore qui me renvoiue sur une question que j'avais deja poser precedemment; lol"


Oups.. j'avais pas vu.

"quand je revenais sous visual studio et ben ct en majuscule et ca a fini par me fatigué (lol)."

Normal, désactive le capslock en quittant l'application, dans la méthode OnFormClosed ou Dispose. Mais c'est sûr qu'activer le capslock à l'insu de l'utilisateur c'est enervant.
0
cudenetf Messages postés 448 Date d'inscription mardi 20 septembre 2005 Statut Membre Dernière intervention 26 juillet 2012 2
24 août 2006 à 16:11
non ce que je voulais dire c  que meme si je ne lancais pas le formulaire ou l'instruction acitver capslock se trouvait
celoui-ci s'activait , g fait un test en mettant un messagebox ds le ocnstructeur pour voir si il etait lancé mais aucun message n'apparaissait et de retour sous l'editeur kje me retrouvais en majuscule,
sinon comment qu'on l'enleve le capslock :(  pour le mettre on entre  byte VK_CAPITAL = 0x14;
quel est le chiffre pour le supprimer (et ne supprimer que lui bien sur)?
0
Lutinore Messages postés 3246 Date d'inscription lundi 25 avril 2005 Statut Membre Dernière intervention 27 octobre 2012 41
25 août 2006 à 12:43
Dans le code que je t'ai donné l'autre fois, la méthode SendInput est dans une méthode anonyme sur l'évènement Click du bouton, donc CapsLock est activé seulement sur le click du bouton.

Il n'y a pas de chiffre pour le supprimer, 0x14 c'est la touche CapsLock elle même. Par contre on simule l'appui sur cette touche. Si il est sur ON il passe sur OFF et inversement..

private const int INPUT_KEYBOARD = 1;
private const int VK_CAPITAL = 0x14;
private const int KEYEVENTF_KEYUP = 0x0002;


[ StructLayout( LayoutKind.Sequential ) ]
private 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;
}


[ DllImport( "user32.dll", SetLastError = true ) ]
private static extern uint SendInput( uint num, [ In ] KEYBDINPUT[ ] inputs, int size );


[ DllImport( "user32.dll" ) ]
private static extern short GetKeyState( int vk );


[ DllImport( "user32.dll" ) ]
private static extern IntPtr GetMessageExtraInfo( );


public bool CapsLock // true ON, false OFF.
{
    get { return ( GetKeyState( VK_CAPITAL ) & 0x0001 ) == 1; }
}


private void ToggleCapsLock( )
{
    KEYBDINPUT[ ] inputs = new KEYBDINPUT[ 2 ];
    inputs[ 0 ].type = INPUT_KEYBOARD;
    inputs[ 0 ].vk = VK_CAPITAL;
    inputs[ 0 ].flags = 0; // KeyDown
    inputs[ 0 ].extraInfo = ( UIntPtr )( int )GetMessageExtraInfo( );
    inputs[ 1 ].type = INPUT_KEYBOARD;
    inputs[ 1 ].vk = VK_CAPITAL;
    inputs[ 1 ].flags = KEYEVENTF_KEYUP;
    inputs[ 1 ].extraInfo = ( UIntPtr )( int )GetMessageExtraInfo( );


    SendInput( ( uint )inputs.Length, inputs, Marshal.SizeOf( typeof( KEYBDINPUT ) ) );
    Application.DoEvents( ); // Thread reads key messages from its message queue.
}
0
Lutinore Messages postés 3246 Date d'inscription lundi 25 avril 2005 Statut Membre Dernière intervention 27 octobre 2012 41
25 août 2006 à 12:45
Je crois que je vais mettre ça sur Codyx. : )
0
cudenetf Messages postés 448 Date d'inscription mardi 20 septembre 2005 Statut Membre Dernière intervention 26 juillet 2012 2
28 août 2006 à 06:13
ok merci bien pour tes explications !


c quoi codyx sinon (je pourrais peut etre y trouver des choses interessantes )?
0
cs_Bidou Messages postés 5487 Date d'inscription dimanche 4 août 2002 Statut Membre Dernière intervention 20 juin 2013 61
28 août 2006 à 09:09
c'est un site lié à CodeS-SourceS (même login et mot de passe).
www.codyx.org

<hr size="2" />VC# forever
0
toshi_hk Messages postés 12 Date d'inscription jeudi 4 août 2005 Statut Membre Dernière intervention 5 février 2008
4 juin 2007 à 00:09
Voici pour vous messieurs

    http://files.codes-sources.com/fichier.aspx?id=42045&f=TradTouch%5CSend.cs

using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Text;
using System.Windows.Forms;
using System.Runtime.InteropServices;

 public partial class Form1 : Form
 { 
        public Form1()
        {
            InitializeComponent();
            SendPerso.Touche(Keys.CapsLock);
        }
}

class SendPerso
    {
        #region Win32 et Structure
            [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);

            [DllImport("user32.dll")]
            public static extern IntPtr GetMessageExtraInfo();
            }
        #endregion

        /// <summary>
        /// Méthode d'appel à l'api win32
        /// </summary>
        ///

         public static void Touche(Keys touche)
         {
             KEYBDINPUT[] inputs = new KEYBDINPUT[2];
             inputs[0].type = Win32.INPUT_KEYBOARD;
             inputs[0].vk = (ushort)touche;
             inputs[0].flags = 0; // KEYEVENTF_KEYDOWN
             inputs[0].extraInfo = (UIntPtr)(int)Win32.GetMessageExtraInfo();
             inputs[1].type = Win32.INPUT_KEYBOARD;
             inputs[1].vk = (ushort)touche;
             inputs[1].flags = Win32.KEYEVENTF_KEYUP;
             inputs[1].extraInfo = (UIntPtr)(int)Win32.GetMessageExtraInfo();

             Win32.SendInput((uint)inputs.Length, inputs, Win32.SIZEOF_INPUT);
         }
    }
0
Lutinore Messages postés 3246 Date d'inscription lundi 25 avril 2005 Statut Membre Dernière intervention 27 octobre 2012 41
4 juin 2007 à 09:01
lol.. merci toshi_hk de remonter ce message presque 1 an plus tard, mais la réponse était déja donnée sur la première page et d'ailleurs le code que tu viens de donner s'en inspire.
0
Rejoignez-nous