APISOFT tester la touche VERR MAJ

APISOFT tester la touche VERR MAJ - VB/VBA/VBS - Programmation

Marsh Posté le 24-07-2009 à 15:46:36    

Bonjour,
 
J'ai un problème dans le logiciel de comptabilité APISOFT qui est codé (il me semble) en VBScript.
 
Lors de l'ouverture d'une Vue (une fenêtre qui nous montre toutes les données de la base de données) j'ai un champs "CODE" qui désigne l'id de la ligne. Cet ID est TOUJOURS en majuscule, par contre,  
lors ce qu'on ouvre la vue et qu'on cherche un code (ID) on tape en minuscule.
 
Je voudrais faire un script tout simple qui fait que lorsque la touche CAPSLOCK est désactivé, je l'active, sinon je ne fais rien.
quelque chose comme ça:
 

Code :
  1. 'definitions des fonctions
  2. set WshShell = CreateObject("WScript.Shell" )
  3. 'ouverture:
  4. If CapsLockOn = False Then
  5.     WshShell.SendKeys "{CAPSLOCK}"
  6. End If


 
Le problème c'est qu'il ne détecte pas le "if CapsLockOn" (je ne sais pas pourquoi mais j'ai suposé que la fonction n'était pas native)  
 
J'ai alors chercher un moyen sur google de détecter l'etat d'une touche VERR MAJ et j'ai trouver ce script :
 
 

Code :
  1. ' Declare Type for API call:
  2.       Private Type OSVERSIONINFO
  3.         dwOSVersionInfoSize As Long
  4.         dwMajorVersion As Long
  5.         dwMinorVersion As Long
  6.         dwBuildNumber As Long
  7.         dwPlatformId As Long
  8.         szCSDVersion As String * 128   '  Maintenance string for PSS usage
  9.       End Type
  10.       ' API declarations:
  11.       Private Declare Function GetVersionEx Lib "kernel32" _
  12.          Alias "GetVersionExA" _
  13.          (lpVersionInformation As OSVERSIONINFO) As Long
  14.       Private Declare Sub keybd_event Lib "user32" _
  15.          (ByVal bVk As Byte, _
  16.           ByVal bScan As Byte, _
  17.           ByVal dwFlags As Long, ByVal dwExtraInfo As Long)
  18.       Private Declare Function GetKeyboardState Lib "user32" _
  19.          (pbKeyState As Byte) As Long
  20.       Private Declare Function SetKeyboardState Lib "user32" _
  21.          (lppbKeyState As Byte) As Long
  22.       ' Constant declarations:
  23.       Const VK_NUMLOCK = &H90
  24.       Const VK_SCROLL = &H91
  25.       Const VK_CAPITAL = &H14
  26.       Const KEYEVENTF_EXTENDEDKEY = &H1
  27.       Const KEYEVENTF_KEYUP = &H2
  28.       Const VER_PLATFORM_WIN32_NT = 2
  29.       Const VER_PLATFORM_WIN32_WINDOWS = 1
  30. Private Sub Command1_Click()
  31.       Dim o As OSVERSIONINFO
  32.       Dim NumLockState As Boolean
  33.       Dim ScrollLockState As Boolean
  34.       Dim CapsLockState As Boolean
  35.       o.dwOSVersionInfoSize = Len(o)
  36.       GetVersionEx o
  37.       Dim keys(0 To 255) As Byte
  38.       GetKeyboardState keys(0)
  39.       ' NumLock handling:
  40.       NumLockState = keys(VK_NUMLOCK)
  41.       If NumLockState <> True Then    'Turn numlock on
  42.         If o.dwPlatformId = VER_PLATFORM_WIN32_WINDOWS Then  '=== Win95/98
  43.           keys(VK_NUMLOCK) = 1
  44.           SetKeyboardState keys(0)
  45.         ElseIf o.dwPlatformId = VER_PLATFORM_WIN32_NT Then   '=== WinNT
  46.         'Simulate Key Press
  47.           keybd_event VK_NUMLOCK, &H45, KEYEVENTF_EXTENDEDKEY Or 0, 0
  48.         'Simulate Key Release
  49.           keybd_event VK_NUMLOCK, &H45, KEYEVENTF_EXTENDEDKEY _
  50.              Or KEYEVENTF_KEYUP, 0
  51.         End If
  52.       End If
  53.       ' CapsLock handling:
  54.       CapsLockState = keys(VK_CAPITAL)
  55.       If CapsLockState <> True Then    'Turn capslock on
  56.         If o.dwPlatformId = VER_PLATFORM_WIN32_WINDOWS Then  '=== Win95/98
  57.           keys(VK_CAPITAL) = 1
  58.           SetKeyboardState keys(0)
  59.         ElseIf o.dwPlatformId = VER_PLATFORM_WIN32_NT Then   '=== WinNT
  60.         'Simulate Key Press
  61.           keybd_event VK_CAPITAL, &H45, KEYEVENTF_EXTENDEDKEY Or 0, 0
  62.         'Simulate Key Release
  63.           keybd_event VK_CAPITAL, &H45, KEYEVENTF_EXTENDEDKEY _
  64.              Or KEYEVENTF_KEYUP, 0
  65.         End If
  66.       End If
  67.       ' ScrollLock handling:
  68.       ScrollLockState = keys(VK_SCROLL)
  69.       If ScrollLockState <> True Then    'Turn Scroll lock on
  70.         If o.dwPlatformId = VER_PLATFORM_WIN32_WINDOWS Then  '=== Win95/98
  71.           keys(VK_SCROLL) = 1
  72.           SetKeyboardState keys(0)
  73.         ElseIf o.dwPlatformId = VER_PLATFORM_WIN32_NT Then   '=== WinNT
  74.         'Simulate Key Press
  75.           keybd_event VK_SCROLL, &H45, KEYEVENTF_EXTENDEDKEY Or 0, 0
  76.         'Simulate Key Release
  77.           keybd_event VK_SCROLL, &H45, KEYEVENTF_EXTENDEDKEY _
  78.             Or KEYEVENTF_KEYUP, 0
  79.         End If
  80.       End If
  81.     End Sub


 
 
Le problème est que sur ce logiciel la syntaxe:

Code :
  1. Dim keys(0 To 255) As Byte

est fausse !
 
j'ai donc changé pour Dim Keys tout cours, evidement, ça ne fonctionne pas.
Je suis un peu perdu, je ne comprend pas bien si c'est du langage VBScript ou pas, si j'ai fait une erreur ou autre...
 
Quelqu'un pourrait m'aider à trouver le moyen de TESTER l'ETAT de la touche VERR MAJ ?
 
Je vous remercie par avance,  
 
Prosciuto
 

Reply

Marsh Posté le 24-07-2009 à 15:46:36   

Reply

Marsh Posté le 24-07-2009 à 17:27:26    

Salut
dans un module


Option Explicit
 
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 SetKeyboardState Lib "user32" (lppbKeyState As Byte) As Long
Private Declare Function GetKeyState Lib "user32" (ByVal nVirtKey As Long) As Integer
Private Declare Function MapVirtualKey Lib "user32" Alias "MapVirtualKeyA" (ByVal wCode As Long, ByVal wMapType As Long) As Long
 
Private Const VK_CAPITAL = &H14
Private Const KEYEVENTF_EXTENDEDKEY = &H1
Private Const KEYEVENTF_KEYUP = &H2
 
Public Sub SetKeyState(ByVal Key As Long, ByVal State As Boolean)
    keybd_event Key, MapVirtualKey(Key, 0), KEYEVENTF_EXTENDEDKEY Or 0, 0
    keybd_event Key, MapVirtualKey(Key, 0), KEYEVENTF_EXTENDEDKEY Or KEYEVENTF_KEYUP, 0
    If Key = 20 And State = False Then
        keybd_event 16, 0, 0, 0
        keybd_event 16, 0, 2, 0
    End If
 
End Sub
 
Public Property Get CapsLock() As Boolean
    CapsLock = GetKeyState(VK_CAPITAL) = 1
End Property
 
Public Property Let CapsLock(ByVal Value As Boolean)
    SetKeyState VK_CAPITAL, Value
End Property


 
Dans un autre


Option Explicit
 
Sub BtnON()
    If CapsLock = False Then CapsLock = True
End Sub
 
Sub BtnOFF()
    If CapsLock = True Then CapsLock = False
End Sub

Reply

Marsh Posté le 24-07-2009 à 17:51:10    

Bonjour, Merci pour ta réponse et pour ton script rapide kiki29.
 
Cependant quand je l'insère dans le module j'ai ce message d'erreur:
 
"Expected end of Statement"
 
Quand je cherche quel ligne bogue, j'ai toujours des erreurs du genre "l'instruction doit être dans une classe"
 
De ce que j'ai vu ce logiciel accepte juste les formules du type :
 
sub Fonction
  Dim Variable
  IF Variable = False Then
     Variable = True
  END IF
End
 
Aurais tu une idée ?
 
Merci pour ton aide.

Reply

Marsh Posté le 27-07-2009 à 11:45:33    

Bonjour, j'ai réussi grâce à un autre forum sur ce post http://www.developpez.net/forums/d [...] ost4517859
 
En résumé, il faut utiliser un Wrapper pour acceder au API Windows.  
 

Code :
  1. VK_CAPITAL = 20
  2. Set oAPI = CreateObject ("DynamicWrapperX" )
  3. oAPI.Register "user32.dll", "GetKeyState", "i=l", "r=l"
  4. res = oAPI.GetKeyState(VK_CAPITAL)
  5. Select Case res
  6.   Case 0 MsgBox "Touche CapsLock inactive"
  7.   Case 1 MsgBox "Touche CapsLock active"
  8. End Select


 
Le lien du Wrapper que l'on ma fourni:

Code :
  1. http://contrib-vb.developpez.com/o [...] apperX/#LI


 
Bonne continuation et merci pour votre aide.

Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed