Ce petit programme permet de générer un clavier virtuel utilisable avec n'importe quel programme.
Dans ce cas, je fais appel à NOTEPAD.EXE mais on peut le faire fonctionner avec n'importe quel autre programme du momment qu'on connait le nom de la fenêtre (celui qui apparaît dans la barre des tâches et/ou quand on fait CTRL+ALT+DEL).
Ce code n'est pas très étoffé mais il s'agit d'une bonne base.
Source / Exemple :
Option Explicit
Private mbLoaded As Boolean
Private Declare Function SetWindowPos Lib "user32" (ByVal hwnd As Long, _
ByVal hWndInsertAfter _
As Long, ByVal X _
As Long, ByVal Y _
As Long, ByVal cx _
As Long, ByVal cy _
As Long, ByVal wFlags _
As Long) As Long
Public Function ToujoursVisible(frm As Form)
'permet de garder la form en avant plan (uniquement avec le programme compilé)
Dim Resultat As Long
Const Flags = &H2 Or &H1 Or &H40 Or &H10
Resultat = SetWindowPos(frm.hwnd, -1, 0, 0, 0, 0, Flags)
End Function
Private Sub LoadKeyboard()
Dim lCpt As Long
Dim lCurr As Long
Dim lRow As Long
Dim lCol As Long
Dim lTemp As Long
Dim sTemp As String
On Error GoTo Erreur
'création ou redimensionnement du clavier
cmdBtn(0).Width = Me.ScaleWidth / 20
cmdBtn(0).Height = (Me.ScaleHeight - 100) / 5
lTemp = 0
sTemp = ""
'touches normales
For lCpt = 1 To 59
sTemp = ""
Select Case lCpt
Case 1:
lCol = 1
lRow = 1
lTemp = 38
sTemp = "&&"
Case 2:
lTemp = 233
Case 3:
lTemp = 64
Case 4:
lTemp = 39
Case 5:
lTemp = 35
Case 6:
lTemp = 40
Case 7:
lTemp = 232
Case 8:
lTemp = 33
Case 9:
lTemp = 231
Case 10:
lTemp = 123
Case 11:
lTemp = 224
Case 12:
lTemp = 125
Case 13:
lTemp = 41
Case 14:
lTemp = 176
Case 15:
lTemp = 45
Case 16:
lTemp = 95
Case 17:
lRow = 2
lCol = 1
lTemp = 97
Case 18:
lTemp = 122
Case 19:
lTemp = 101
Case 20:
lTemp = 114
Case 21:
lTemp = 116
Case 22:
lTemp = 121
Case 23:
lTemp = 117
Case 24:
lTemp = 105
Case 25:
lTemp = 111
Case 26:
lTemp = 112
Case 27:
lTemp = 91
Case 28:
lTemp = 93
Case 29:
lTemp = 42
Case 30:
lTemp = 36
Case 31:
lTemp = 92
Case 32:
lRow = 3
lCol = 1
lTemp = 113
Case 33:
lTemp = 115
Case 34:
lTemp = 100
Case 35:
lTemp = 102
Case 36:
lTemp = 103
Case 37:
lTemp = 104
Case 38:
lTemp = 106
Case 39:
lTemp = 107
Case 40:
lTemp = 108
Case 41:
lTemp = 109
Case 42:
lTemp = 37
Case 43:
lTemp = 60
Case 44:
lTemp = 62
Case 45:
lTemp = 43
Case 46:
lRow = 4
lCol = 1
lTemp = 119
Case 47:
lTemp = 120
Case 48:
lTemp = 99
Case 49:
lTemp = 118
Case 50:
lTemp = 98
Case 51:
lTemp = 110
Case 52:
lTemp = 63
Case 53:
lTemp = 44
Case 54:
lTemp = 46
Case 55:
lTemp = 59
Case 56:
lTemp = 58
Case 57:
lTemp = 47
Case 58:
lTemp = 61
Case 59:
lRow = 5
lCol = 1
lTemp = 32
End Select
If Not mbLoaded Then Load cmdBtn(lCpt)
If Trim$(sTemp) <> "" Then
cmdBtn(lCpt).Caption = sTemp
Else
cmdBtn(lCpt).Caption = Chr(lTemp)
End If
cmdBtn(lCpt).Width = Me.ScaleWidth / 20
cmdBtn(lCpt).Height = (Me.ScaleHeight - 100) / 5
Select Case lRow
Case 1:
cmdBtn(lCpt).Move (lCol * 10) + (cmdBtn(0).Width * (lCol - 1)), 10
Case 2:
cmdBtn(lCpt).Move (lCol * 10) + (cmdBtn(0).Width * (lCol - 1)) + (cmdBtn(0).Width * 0.5), 20 + cmdBtn(0).Height
Case 3:
cmdBtn(lCpt).Move (lCol * 10) + (cmdBtn(0).Width * (lCol - 1)) + cmdBtn(0).Width, 30 + (cmdBtn(0).Height * 2)
Case 4:
cmdBtn(lCpt).Move (lCol * 10) + (cmdBtn(0).Width * (lCol - 1)) + (cmdBtn(0).Width * 1.5), 40 + (cmdBtn(0).Height * 3)
Case 5:
cmdBtn(lCpt).Move (lCol * 10) + (cmdBtn(0).Width * (lCol - 1)) + (cmdBtn(0).Width * 2), 50 + (cmdBtn(0).Height * 4), cmdBtn(0).Width * 10
End Select
cmdBtn(lCpt).Tag = "C" & lTemp
cmdBtn(lCpt).Visible = True
lCol = lCol + 1
Next
'touches numériques
lCurr = 0
For lCpt = 60 To 70
If Not mbLoaded Then Load cmdBtn(lCpt)
cmdBtn(lCpt).Caption = lCurr
cmdBtn(lCpt).Tag = "C" & Asc(CStr(lCurr))
Select Case lCurr
Case 0:
cmdBtn(lCpt).Move Me.ScaleWidth - 20 - (cmdBtn(0).Width * 2), (cmdBtn(0).Height * 3) + 40
Case 1:
cmdBtn(lCpt).Move Me.ScaleWidth - 30 - (cmdBtn(0).Width * 3), (cmdBtn(0).Height * 2) + 30
Case 2:
cmdBtn(lCpt).Move Me.ScaleWidth - 20 - (cmdBtn(0).Width * 2), (cmdBtn(0).Height * 2) + 30
Case 3:
cmdBtn(lCpt).Move Me.ScaleWidth - 10 - cmdBtn(0).Width, (cmdBtn(0).Height * 2) + 30
Case 4:
cmdBtn(lCpt).Move Me.ScaleWidth - 30 - (cmdBtn(0).Width * 3), cmdBtn(0).Height + 20
Case 5:
cmdBtn(lCpt).Move Me.ScaleWidth - 20 - (cmdBtn(0).Width * 2), cmdBtn(0).Height + 20
Case 6:
cmdBtn(lCpt).Move Me.ScaleWidth - 10 - cmdBtn(0).Width, cmdBtn(0).Height + 20
Case 7:
cmdBtn(lCpt).Move Me.ScaleWidth - 30 - (cmdBtn(0).Width * 3), 10
Case 8:
cmdBtn(lCpt).Move Me.ScaleWidth - 20 - (cmdBtn(0).Width * 2), 10
Case 9:
cmdBtn(lCpt).Move Me.ScaleWidth - 10 - cmdBtn(0).Width, 10
End Select
cmdBtn(lCpt).Width = Me.ScaleWidth / 20
cmdBtn(lCpt).Height = (Me.ScaleHeight - 100) / 5
cmdBtn(lCpt).Visible = True
lCurr = lCurr + 1
Next
'touches de fonction
'backspace
lCpt = lCpt + 1
If Not mbLoaded Then Load cmdBtn(lCpt)
cmdBtn(lCpt).Caption = "<---"
cmdBtn(lCpt).Tag = "F" & 9
cmdBtn(lCpt).Move cmdBtn(59).Left + cmdBtn(59).Width + cmdBtn(0).Width, cmdBtn(59).Top, cmdBtn(0).Width * 3, (Me.ScaleHeight - 100) / 5
cmdBtn(lCpt).Visible = True
'enter
lCpt = lCpt + 1
If Not mbLoaded Then Load cmdBtn(lCpt)
cmdBtn(lCpt).Caption = "ENTER"
cmdBtn(lCpt).Tag = "F" & 13
cmdBtn(lCpt).Move cmdBtn(lCpt - 1).Left + cmdBtn(lCpt - 1).Width + cmdBtn(0).Width, cmdBtn(lCpt - 1).Top, cmdBtn(0).Width * 3, (Me.ScaleHeight - 100) / 5
cmdBtn(lCpt).Visible = True
'shift
lCpt = lCpt + 1
If Not mbLoaded Then Load cmdBtn(lCpt)
cmdBtn(lCpt).Caption = "MAJ"
cmdBtn(lCpt).Tag = "S"
cmdBtn(lCpt).Move 10, cmdBtn(lCpt - 1).Top, cmdBtn(59).Left - (cmdBtn(0).Width / 2), (Me.ScaleHeight - 100) / 5
cmdBtn(lCpt).Visible = True
Fin:
Exit Sub
Erreur:
Resume Fin
End Sub
Private Sub cmdBtn_Click(Index As Integer)
Dim sAPP As String
On Error GoTo Erreur
Me.Enabled = False
sAPP = "Sans titre - Bloc-notes"
If Left(cmdBtn(Index).Tag, 1) <> "S" Then
cmdBtn(Index).BackColor = vbWhite
AppActivate sAPP
DoEvents
If Left(cmdBtn(Index).Tag, 1) = "C" Then
If Asc(cmdBtn(Index).Caption) > 96 And Asc(cmdBtn(Index).Caption) < 123 Then
If cmdBtn(74).BackColor = vbWhite Then
SendKeys "+" & "{" & cmdBtn(Index).Caption & "}"
Else
SendKeys "{" & cmdBtn(Index).Caption & "}"
End If
Else
SendKeys "{" & Chr(Val(Right(cmdBtn(Index).Tag, Len(cmdBtn(Index).Tag) - 1))) & "}"
End If
Else
If Left(cmdBtn(Index).Tag, 1) = "F" Then
If cmdBtn(Index).Caption = "ENTER" Then
SendKeys "{ENTER}"
Else
SendKeys "{BACKSPACE}"
End If
End If
End If
DoEvents
cmdBtn(Index).BackColor = -2147483633
Else
If cmdBtn(Index).BackColor = vbWhite Then
cmdBtn(Index).BackColor = -2147483633
Else
cmdBtn(Index).BackColor = vbWhite
End If
End If
Fin:
If Index <> 74 Then cmdBtn(Index).BackColor = -2147483633
Me.Enabled = True
Exit Sub
Erreur:
MsgBox Err.Number & " : " & Err.Description
Resume Fin
End Sub
Private Sub Form_Load()
mbLoaded = False
LoadKeyboard
ToujoursVisible Me
mbLoaded = True
End Sub
Private Sub Form_Resize()
LoadKeyboard
End Sub
Conclusion :
ce code doit être inséré dans un formulaire et sur ce formulaire, il doit y avoir un controle appelé cmdBtn de type Command Button avec un index à 0 qui en plus doit être invisible
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.