begin process at 2012 02 13 19:27:32
  Trouver un code source :
 
dans
 
Accueil > 

Code

 > 

API

 > EN REMPLACEMENT DE SENDKEYS

EN REMPLACEMENT DE SENDKEYS


 Information sur la source

Note :
6,67 / 10 - par 3 personnes
6,67 / 10

  • 1

  • 2

  • 3

  • 4

  • 5

  • 6

  • 7

  • 8

  • 9

  • 10
Catégorie :API Niveau :Débutant Date de création :01/07/2002 Date de mise à jour :01/07/2002 16:06:26 Vu :8 871

Auteur : Derrick soft

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

 Description

Généralement,  SendKeys n'est pas recommandé dans un environnement de production, car la séquence de clé est interprétée par la fenêtre actuellement active. De toutes évidence, cela peut créer des comportements imprévisible, à tout le moins qu'on peut dire, dans le cas où une autre application recevrait le focus lorsque votre code initie le SendKeys. Un cas extrême est d'envoyer un "Y" à une application qui attendait une confirmation pour reformater votre disque principal. Donc, en définitive, éviter d'utiliser SendKey.

Source

  • ' Déclare un Type en prévision d'un appel d'API futur
  • Private Type OSVERSIONINFO
  • dwOSVersionInfoSize As Long
  • dwMajorVersion As Long
  • dwMinorVersion As Long
  • dwBuildNumber As Long
  • dwPlatformId As Long
  • szCSDVersion As String * 128 ' Maintenance pour utilisation de PSS
  • End Type
  • ' API, déclarations:
  • 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
  • ' Constants, déclarations:
  • 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
  • Function IsCapsLockOn() As Boolean
  • Dim o As OSVERSIONINFO
  • o.dwOSVersionInfoSize = Len(o)
  • GetVersionEx o
  • Dim keys(0 To 255) As Byte
  • GetKeyboardState keys(0)
  • IsCapsLockOn = keys(VK_CAPITAL)
  • End Function
  • Sub ToggleCapsLock()
  • Dim o As OSVERSIONINFO
  • o.dwOSVersionInfoSize = Len(o)
  • GetVersionEx o
  • Dim keys(0 To 255) As Byte
  • GetKeyboardState keys(0)
  • If o.dwPlatformId = VER_PLATFORM_WIN32_WINDOWS Then '=====Win95
  • 'Bascule capslock
  • keys(VK_CAPITAL) = Abs(Not keys(VK_CAPITAL))
  • SetKeyboardState keys(0)
  • ElseIf o.dwPlatformId = VER_PLATFORM_WIN32_NT Then '=====WinNT
  • 'Simule Key Press>
  • keybd_event VK_CAPITAL, &H45, KEYEVENTF_EXTENDEDKEY Or 0, 0
  • 'Simule Key Release
  • keybd_event VK_CAPITAL, &H45, KEYEVENTF_EXTENDEDKEY _
  • Or KEYEVENTF_KEYUP, 0
  • End If
  • End Sub
  • Function IsNumLockOn() As Boolean
  • Dim o As OSVERSIONINFO
  • o.dwOSVersionInfoSize = Len(o)
  • GetVersionEx o
  • Dim keys(0 To 255) As Byte
  • GetKeyboardState keys(0)
  • IsNumLockOn = keys(VK_NUMLOCK)
  • End Function
  • Sub ToggleNumLock()
  • Dim o As OSVERSIONINFO
  • o.dwOSVersionInfoSize = Len(o)
  • GetVersionEx o
  • Dim keys(0 To 255) As Byte
  • GetKeyboardState keys(0)
  • If o.dwPlatformId = VER_PLATFORM_WIN32_WINDOWS Then '=====Win95
  • keys(VK_NUMLOCK) = Abs(Not keys(VK_NUMLOCK))
  • SetKeyboardState keys(0)
  • ElseIf o.dwPlatformId = VER_PLATFORM_WIN32_NT Then '=====WinNT
  • 'Simule Key Press
  • keybd_event VK_NUMLOCK, &H45, KEYEVENTF_EXTENDEDKEY Or 0, 0
  • 'Simule Key Release
  • keybd_event VK_NUMLOCK, &H45, KEYEVENTF_EXTENDEDKEY _
  • Or KEYEVENTF_KEYUP, 0
  • End If
  • End Sub
  • Function IsScrollLockOn()
  • Dim o As OSVERSIONINFO
  • o.dwOSVersionInfoSize = Len(o)
  • GetVersionEx o
  • Dim keys(0 To 255) As Byte
  • GetKeyboardState keys(0)
  • IsScrollLockOn = keys(VK_SCROLL)
  • End Function
  • Sub ToggleScrollLock()
  • Dim o As OSVERSIONINFO
  • o.dwOSVersionInfoSize = Len(o)
  • GetVersionEx o
  • Dim keys(0 To 255) As Byte
  • GetKeyboardState keys(0)
  • If o.dwPlatformId = VER_PLATFORM_WIN32_WINDOWS Then '=====Win95
  • keys(VK_SCROLL) = Abs(Not keys(VK_SCROLL))
  • SetKeyboardState keys(0)
  • ElseIf o.dwPlatformId = VER_PLATFORM_WIN32_NT Then '=====WinNT
  • 'Simule Key Press
  • keybd_event VK_SCROLL, &H45, KEYEVENTF_EXTENDEDKEY Or 0, 0
  • 'Simule Key Release
  • keybd_event VK_SCROLL, &H45, KEYEVENTF_EXTENDEDKEY Or KEYEVENTF_KEYUP, 0
  • End If
  • End Sub
  • Sub mySendKeys(sKeys As String, Optional bWait As Boolean = False)
  • Dim bNumLockState As Boolean
  • Dim bCapsLockState As Boolean
  • Dim bScrollLockState As Boolean
  • bNumLockState = IsNumLockOn()
  • bCapsLockState = IsCapsLockOn()
  • bScrollLockState = IsScrollLockOn()
  • SendKeys sKeys, bWait
  • If IsNumLockOn() <> bNumLockState Then
  • ToggleNumLock
  • End If
  • If IsCapsLockOn() <> bCapsLockState Then
  • ToggleCapsLock
  • End If
  • If IsScrollLockOn() <> bScrollLockState Then
  • ToggleScrollLock
  • End If
  • End Sub
  • Function fSendKeys(sKeys As String, Optional bWait As Boolean = False)
  • ' En faire une fonction, qu'on puisse l'appeler à partir de macro
  • mySendKeys sKeys, bWait
  • End Function
' Déclare un  Type en prévision d'un appel d'API futur
      Private Type OSVERSIONINFO
        dwOSVersionInfoSize As Long
        dwMajorVersion As Long
        dwMinorVersion As Long
        dwBuildNumber As Long
        dwPlatformId As Long
        szCSDVersion As String * 128   '  Maintenance  pour utilisation de  PSS
      End Type

      ' API, déclarations:
      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

      ' Constants,  déclarations:
      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

Function IsCapsLockOn() As Boolean
        Dim o As OSVERSIONINFO

        o.dwOSVersionInfoSize = Len(o)
        GetVersionEx o
        Dim keys(0 To 255) As Byte
        GetKeyboardState keys(0)
        IsCapsLockOn = keys(VK_CAPITAL)
End Function

Sub ToggleCapsLock()
        Dim o As OSVERSIONINFO

        o.dwOSVersionInfoSize = Len(o)
        GetVersionEx o
        Dim keys(0 To 255) As Byte
        GetKeyboardState keys(0)

        If o.dwPlatformId = VER_PLATFORM_WIN32_WINDOWS Then  '=====Win95
        'Bascule capslock
            keys(VK_CAPITAL) = Abs(Not keys(VK_CAPITAL))
            SetKeyboardState keys(0)
        ElseIf o.dwPlatformId = VER_PLATFORM_WIN32_NT Then   '=====WinNT
          'Simule  Key Press>
            keybd_event VK_CAPITAL, &H45, KEYEVENTF_EXTENDEDKEY Or 0, 0
          'Simule Key Release
            keybd_event VK_CAPITAL, &H45, KEYEVENTF_EXTENDEDKEY _
               Or KEYEVENTF_KEYUP, 0
        End If
End Sub

Function IsNumLockOn() As Boolean
        Dim o As OSVERSIONINFO
        
        o.dwOSVersionInfoSize = Len(o)
        GetVersionEx o
        Dim keys(0 To 255) As Byte
        GetKeyboardState keys(0)
        IsNumLockOn = keys(VK_NUMLOCK)
End Function

Sub ToggleNumLock()
        Dim o As OSVERSIONINFO
                
        o.dwOSVersionInfoSize = Len(o)
        GetVersionEx o
        Dim keys(0 To 255) As Byte
        GetKeyboardState keys(0)

          If o.dwPlatformId = VER_PLATFORM_WIN32_WINDOWS Then  '=====Win95
                keys(VK_NUMLOCK) = Abs(Not keys(VK_NUMLOCK))
                SetKeyboardState keys(0)
          ElseIf o.dwPlatformId = VER_PLATFORM_WIN32_NT Then   '=====WinNT
          'Simule Key Press
            keybd_event VK_NUMLOCK, &H45, KEYEVENTF_EXTENDEDKEY Or 0, 0
          'Simule Key Release
            keybd_event VK_NUMLOCK, &H45, KEYEVENTF_EXTENDEDKEY _
               Or KEYEVENTF_KEYUP, 0
          End If
        
End Sub

Function IsScrollLockOn()
        Dim o As OSVERSIONINFO
        
        o.dwOSVersionInfoSize = Len(o)
        GetVersionEx o
        Dim keys(0 To 255) As Byte
        GetKeyboardState keys(0)
        IsScrollLockOn = keys(VK_SCROLL)
End Function

Sub ToggleScrollLock()
        Dim o As OSVERSIONINFO
        
        o.dwOSVersionInfoSize = Len(o)
        GetVersionEx o
        Dim keys(0 To 255) As Byte
        GetKeyboardState keys(0)
        If o.dwPlatformId = VER_PLATFORM_WIN32_WINDOWS Then  '=====Win95
            keys(VK_SCROLL) = Abs(Not keys(VK_SCROLL))
            SetKeyboardState keys(0)
        ElseIf o.dwPlatformId = VER_PLATFORM_WIN32_NT Then   '=====WinNT
            'Simule Key Press
            keybd_event VK_SCROLL, &H45, KEYEVENTF_EXTENDEDKEY Or 0, 0
            'Simule Key Release
            keybd_event VK_SCROLL, &H45, KEYEVENTF_EXTENDEDKEY Or KEYEVENTF_KEYUP, 0
        End If
End Sub

Sub mySendKeys(sKeys As String, Optional bWait As Boolean = False)
Dim bNumLockState As Boolean
Dim bCapsLockState As Boolean
Dim bScrollLockState As Boolean
    bNumLockState = IsNumLockOn()
    bCapsLockState = IsCapsLockOn()
    bScrollLockState = IsScrollLockOn()
    SendKeys sKeys, bWait
    If IsNumLockOn() <> bNumLockState Then
        ToggleNumLock
    End If
    If IsCapsLockOn() <> bCapsLockState Then
        ToggleCapsLock
    End If
    If IsScrollLockOn() <> bScrollLockState Then
        ToggleScrollLock
    End If
End Sub

Function fSendKeys(sKeys As String, Optional bWait As Boolean = False)
' En faire une fonction, qu'on puisse l'appeler à partir de macro
    mySendKeys sKeys, bWait
End Function
 

 Conclusion

Auteur : Dev Ashish


 Sources du même auteur

Source avec Zip Source avec une capture PROGRAMMATION WSOCK32 EN VISUAL BASIC
CRÉER UNE TABLE ET DES CHAMPS DANS UNE BASE ACCESS
QUEL IP ET RÉSOUDRE LES ADRESSES
ÉNUMÉRATION DES COMPTES D'UN DOMAINE NT
TROUVER LE NOM DE LA CLASSE WINDOWS D'UNE APPLICATION EN COU...

 Sources de la même categorie

Source avec Zip Source .NET (Dotnet) .NET DEPENDENCY VIEWER : ARBRE DES DÉPENDANCES D'UN ASSEMBLY... par ShareVB
Source avec Zip Source .NET (Dotnet) UTILITAIRE SKYDRIVE par MasterShadows
Source avec Zip ROTATION RAPIDE D'IMAGE par trex70
Source avec Zip Source avec une capture ENUMERATION DES PORTS TCP ET IDENTIFCATION DU PROCESS (PID) ... par Renfield
Source avec Zip Source avec une capture MOUSE SPEED AND WEIGHT : RETOUR DE FORCE VIRTUEL ! par ScSami

Commentaires et avis

Commentaire de shadowmoy le 25/08/2002 02:05:51

excellent code un 10/10 pour la peine na !!!

Commentaire de NeoToto le 18/02/2004 14:25:38

Désolé, mais je vois pas l'interet : En quoi est ce que cette "encapsulation" du sendkeys empeche la perte du focus ? Un alt + tab mal placé, et on retombe sur le meme probleme.....

Je cherche en vain une solution pour envoyer du sendkeys vers un hwnd spécifique... Si quelqu'un sait.....

Commentaire de NeoToto le 18/02/2004 15:32:41

Et juste pour rendre a César ce qui lui revient, l'original de cette source est à http://www.mvps.org/accessfr/apis/api0046.htm

Commentaire de NeoToto le 18/02/2004 15:32:41

Et juste pour rendre a César ce qui lui revient, l'original de cette source est à http://www.mvps.org/accessfr/apis/api0046.htm

Commentaire de devsurf le 13/11/2008 15:42:19

Salut
Moi aussi, je cherche une alternative pour SENDKEY car j'un problème justement sur le copier/coller
si vous avez une idée, voir le lien vers ma question plus bas.

Sinon, en ce qui concerne le point soulevé par NeoTOTO, moi j'utilise une fonction  VBA nommée AppActivate  pour pointer sur un process (meme groupe que SendKey)

syntaxe: AppActivate  NoProcess
Exemple  AppActivate 5896

Le numero process est de type LONG qu'on doit récuperer de l'application concernée.

Exemple de mon code source:
(hprocess contient le numero de mon process Word)
    
    'Mise en forme de la variable sélectionnée
    strVariable = "blabla"
    
    'Copie dans l'applicatif
     Clipboard.Clear
    SendKeys "^c", True
    Clipboard.SetText strVariable

   AppActivate hProcess
    SendKeys "^v", True

Voila....
a+    
n.b.
Si vous avez une reponse sur ma question ci dessous , ca serait sympa
http://www.vbfrance.com/forum/sujet-PROBLEME-SUR-SENDKEYS-SENDKEYS-WORD-2003_1228335.aspx

a+

 Ajouter un commentaire




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,950 sec (3)

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