Google Groups no longer supports new Usenet posts or subscriptions. Historical content remains viewable.
Dismiss

Forcer en Majuscule...

0 views
Skip to first unread message

Bertrand

unread,
Apr 9, 2003, 3:26:29 PM4/9/03
to
Bonsoir à tous,

J'ai fouillé dans FAQ et je n'ai pas trouvé de réponse
(et pourtant, ce doit être une question récurante, ou j'ai pas vu ...)

Voila, dans un premier temps, je voudrais qu'au démarrage de mon
application, la touche "Majuscule" soit activée
(petite lumière "caps lock" allumée).

Est ce que, forcer tout le temps ce mode est possible ?
C'est à dire, que l'utilisateur ne puisse plus repasser en minuscule, le
temps de l'utilisation de mon appli bien sur (Pas seulement les minuscules
mais
aussi, la virgule, le point virgule, les deux points, etc...)

Merci pour vos réponses

--
Bertrand
Photo de Phare : http://mirabon.free.fr


François Picalausa

unread,
Apr 9, 2003, 3:43:51 PM4/9/03
to
Bonjour/soir,

Voici une fiche de la kb qui permet de changer l'état des touches caps
lock/num lock/scroll lock:
http://support.microsoft.com/default.aspx?kbid=177674

--
François Picalausa (MVP VB)
FAQ VB : http://faq.vb.free.fr
MSDN : http://msdn.microsoft.com

Zoury

unread,
Apr 9, 2003, 5:28:42 PM4/9/03
to
Salut Bertrand!

Je ne crois pas que ce soit la solution idéale. Les gens n'aiment que l'on joue avec leur configuration..Si l'utilisateur passe à un
autre logiciel tu as de forte chance qu'il soit frustré de se rendre compte que sont capslock à été enfoncé et que les premiers mots
qu'il à entrés soit en majuscule et qu'il doivent tout retaper sans le capslock. De plus en revenant à ton logiciel, le capslock ne
sera plus à activé...

Je te conseillerais donc plutôt de modifier les caractères lors de la saisie...

--
Cordialement
Zoury

Microsoft Visual Basic MVP
******************************************
La FAQ VB - http://faq.vb.free.fr/index.php?rubrique=0
API-Guide, maîtriser les APIs - http://www.allapi.net/agnet/apiguide.shtml
Mz-Tools, add-in pour VB - http://www.mztools.com/
******************************************
"Bertrand" <mirabon_p...@free.fr> wrote in message news:3e947496$0$28340$626a...@news.free.fr...
: Bonsoir à tous,

:
:

LEVAILLANT

unread,
Apr 10, 2003, 5:41:15 AM4/10/03
to
Salut Bertrand,

...Et dans ce cas,
j'ai un jeu de routines sympa
qui gèrent les couleurs à l'entrée/sortie des objets
et la nature de caractères filtrés, majuscules inclues.

Si tu le souhaites, je te les envoie par mel.

Bienvenue à tous
Hervé

"Zoury" <yanick_...@hotmail.com> a écrit dans le message de news:
#VArh7t$CHA....@TK2MSFTNGP10.phx.gbl...

Bertrand

unread,
Apr 10, 2003, 1:31:20 AM4/10/03
to

"Zoury" <yanick_...@hotmail.com> a écrit dans le message news:
#VArh7t$CHA....@TK2MSFTNGP10.phx.gbl...

> Salut Bertrand!
>
> Je ne crois pas que ce soit la solution idéale. Les gens n'aiment que l'on
joue avec leur configuration..Si l'utilisateur passe à un
> autre logiciel tu as de forte chance qu'il soit frustré de se rendre
compte que sont capslock à été enfoncé et que les premiers mots
> qu'il à entrés soit en majuscule et qu'il doivent tout retaper sans le
capslock. De plus en revenant à ton logiciel, le capslock ne
> sera plus à activé...
>
> Je te conseillerais donc plutôt de modifier les caractères lors de la
saisie...


Bonjour Zoury

C'est au sein d'une entreprise, ce n'est pas un logiciel commercial,
donc je sais ce que je veux faire mais je ne sais pas comment le faire.
Pas question de changer les minuscules en majuscules mais tout le clavier,
les chiffres et la ponctuations.
Si tu as une réponse merci...

Bertrand


François Picalausa

unread,
Apr 10, 2003, 3:40:23 PM4/10/03
to
Bonjour/soir,

Est-ce pour le changer uniquement dans un textbox ou est-ce que ça doit être
pour toutes les applications?

Dans le premier cas, tu peux adapter le code de la MSDN comme ceci:
Option Explicit

' Declare Type for API call:
Private Type OSVERSIONINFO
dwOSVersionInfoSize As Long
dwMajorVersion As Long
dwMinorVersion As Long
dwBuildNumber As Long
dwPlatformId As Long
szCSDVersion As String * 128 ' Maintenance string for PSS usage
End Type

' API declarations:

Private Declare Function GetVersionEx Lib "kernel32" _
Alias "GetVersionExA" _
(lpVersionInformation As OSVERSIONINFO) As Long

Private Declare Sub keybd_event Lib "user32" _
(ByVal bVk As Byte, _
ByVal bScan As Byte, _
ByVal dwFlags As Long, ByVal dwExtraInfo As Long)

Private Declare Function GetKeyboardState Lib "user32" _
(pbKeyState As Byte) As Long

Private Declare Function SetKeyboardState Lib "user32" _
(lppbKeyState As Byte) As Long

' Constant declarations:
Const VK_NUMLOCK = &H90
Const VK_SCROLL = &H91
Const VK_CAPITAL = &H14
Const KEYEVENTF_EXTENDEDKEY = &H1
Const KEYEVENTF_KEYUP = &H2
Const VER_PLATFORM_WIN32_NT = 2
Const VER_PLATFORM_WIN32_WINDOWS = 1

Private bWasLocked As Boolean

Private Sub Text1_GotFocus()

Dim keys(0 To 255) As Byte
GetKeyboardState keys(0)

bWasLocked = keys(VK_CAPITAL)

SetCapsLockOn
End Sub

Sub SetCapsLockOn()
Dim o As OSVERSIONINFO, keys(0 To 255) As Byte

o.dwOSVersionInfoSize = Len(o)
GetVersionEx o

GetKeyboardState keys(0)

If keys(VK_CAPITAL) <> 1 Then

If o.dwPlatformId = VER_PLATFORM_WIN32_WINDOWS Then '=== Win95/98
keys(VK_SCROLL) = 1
SetKeyboardState keys(0)
ElseIf o.dwPlatformId = VER_PLATFORM_WIN32_NT Then '=== WinNT
'Simulate Key Press
keybd_event VK_CAPITAL, &H45, KEYEVENTF_EXTENDEDKEY Or 0, 0
'Simulate Key Release
keybd_event VK_CAPITAL, &H45, KEYEVENTF_EXTENDEDKEY _
Or KEYEVENTF_KEYUP, 0
End If
End If
End Sub

Private Sub Text1_KeyDown(KeyCode As Integer, Shift As Integer)
If KeyCode <> 20 Then SetCapsLockOn
End Sub

Private Sub Text1_LostFocus()
Dim o As OSVERSIONINFO, keys(0 To 255) As Byte

o.dwOSVersionInfoSize = Len(o)
GetVersionEx o

GetKeyboardState keys(0)

If bWasLocked = False And keys(VK_CAPITAL) = 1 Then

If o.dwPlatformId = VER_PLATFORM_WIN32_WINDOWS Then '=== Win95/98
keys(VK_SCROLL) = 0
SetKeyboardState keys(0)
ElseIf o.dwPlatformId = VER_PLATFORM_WIN32_NT Then '=== WinNT
'Simulate Key Press
keybd_event VK_CAPITAL, &H45, KEYEVENTF_EXTENDEDKEY Or 0, 0
'Simulate Key Release
keybd_event VK_CAPITAL, &H45, KEYEVENTF_EXTENDEDKEY _
Or KEYEVENTF_KEYUP, 0
End If
End If
End Sub

Mais attention que celà n'empêche pas l'utilisateur d'entrer des minuscules
en presant sur shift+lettre... (ni d'appuyer sur caps lock pour le
désactiver dans cet exemple)

--
François Picalausa (MVP VB)
FAQ VB : http://faq.vb.free.fr
MSDN : http://msdn.microsoft.com

Zoury

unread,
Apr 10, 2003, 4:45:12 PM4/10/03
to
Salut Bertrand!

Cette exemple fait ce que tu veux.. ;O)

' tu peux ajouter un textbox pour tester...
' Form1
Option Explicit

Private Sub Form_Load()
HookKeyboard
End Sub

Private Sub Form_Unload(Cancel As Integer)
UnhookKeyboard
End Sub

' Module1
Option Explicit

Private Const WH_KEYBOARD = 2
Private Const VK_SHIFT = &H10
Private m_hHook As Long
Private Declare Function CallNextHookEx Lib "user32" (ByVal hHook As Long, ByVal ncode As Long, ByVal wParam As Long, lParam As Any)
As Long
Private Declare Function SetWindowsHookEx Lib "user32" Alias "SetWindowsHookExA" (ByVal idHook As Long, ByVal lpfn As Long, ByVal
hmod As Long, ByVal dwThreadId As Long) As Long
Private Declare Function UnhookWindowsHookEx Lib "user32" (ByVal hHook As Long) As Long
Private Declare Function GetKeyboardState Lib "user32" (pKeys As Byte) As Long
Private Declare Function SetKeyboardState Lib "user32" (pKeys As Byte) As Long

Public Function KeyboardProc(ByVal idHook As Long, ByVal wParam As Long, ByVal lParam As Long) As Long
If idHook >= 0 Then
Dim by(255) As Byte
GetKeyboardState by(0)
If (by(VK_SHIFT) And &H80) = 0 Then
by(VK_SHIFT) = by(VK_SHIFT) Or &H80
SetKeyboardState by(0)
End If
End If
KeyboardProc = CallNextHookEx(hHook, idHook, wParam, ByVal lParam)
End Function

Public Sub HookKeyboard()
m_hHook = SetWindowsHookEx(WH_KEYBOARD, AddressOf KeyboardProc, App.hInstance, App.ThreadID)
End Sub

Public Sub UnhookKeyboard()
UnShift
UnhookWindowsHookEx m_hHook
End Sub

' le shift semble resté collé... on le décolle avant de fermer..
Public Sub UnShift()
Dim by(255) As Byte
GetKeyboardState by(0)
If (by(VK_SHIFT) And &H80) = &H80 Then
by(VK_SHIFT) = by(VK_SHIFT) Xor &H80
SetKeyboardState by(0)
End If
End Sub

Comme expliqué dans l'exemple, le shift semble resté "collé" à la sortie du programme (si tu clique dans le code, c'est comme si
shift était encore enfoncé). la fonction UnShift le décolle (appuyer un coup sur shift également), cependant en mode compilation
cette appelle devrait être inutile étant donnée que le process meurt à la fermeture.. Mais si quelqu'un sait pourquoi..?

--
Cordialement
Zoury

Microsoft Visual Basic MVP
******************************************
La FAQ VB - http://faq.vb.free.fr/index.php?rubrique=0
API-Guide, maîtriser les APIs - http://www.allapi.net/agnet/apiguide.shtml
Mz-Tools, add-in pour VB - http://www.mztools.com/
******************************************

"Bertrand" <mirabon_p...@free.fr> wrote in message news:3e95c240$0$28760$626a...@news.free.fr...
:
: "Zoury" <yanick_...@hotmail.com> a écrit dans le message news:

:
:
:
:

Bertrand

unread,
Apr 18, 2003, 11:31:36 AM4/18/03
to

"Bertrand" <mirabon_p...@free.fr> a écrit dans le message news:
3e947496$0$28340$626a...@news.free.fr...

Bonjour,

Merci à tous pour vos réponses, j'ai pris l'exemple du MSDN
http://support.microsoft.com/default.aspx?kbid=177674 (post de François)

Bonne journée a tous...

0 new messages