Soyez le premier à donner votre avis sur cette source.
Snippet vu 11 246 fois - Téléchargée 42 fois
' 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
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+
Je cherche en vain une solution pour envoyer du sendkeys vers un hwnd spécifique... Si quelqu'un sait.....
Vous n'êtes pas encore membre ?
inscrivez-vous, c'est gratuit et ça prend moins d'une minute !
Les membres obtiennent plus de réponses que les utilisateurs anonymes.
Le fait d'être membre vous permet d'avoir un suivi détaillé de vos demandes et codes sources.
Le fait d'être membre vous permet d'avoir des options supplémentaires.