''' <summary>
''' Diese Funktion kann die ScanCodes also die Tastaturbefehle umsetzen um z.B. Tasten zu vertauschen oder zu deaktivieren.
''' Nach der Umbelegung muss der Computer neugestartet werden damit die ScanCodes angewendet werden.
''' </summary>
''' <param name="ScanCodes">
''' Hier kann man ein oder mehrere ByteArrays angeben wobei das Array immer eine länge von 4 haben muss.
''' Die ersten 2 Einträge im Array stellt den Tastencode dar welcher mit dem alten Code ersetzt werden soll
''' und die letzten beiden Einträge im Array stellen den Tastencode dar der ersetzt werden soll.
''' Die Taste ESCAPE hat den Tastencode 0x01,0x00 und die Taste A hat den Tastencode 0x1E,0x00.
''' Wenn man nun die Taste ESCAPE und A vertausche will muss man als Parameter folgendes angeben:
''' SetScanCodes(New Byte() {0x01, 0x00, 0x1E, 0x00}, New Byte() {0x1E, 0x00, 0x01, 0x00})
''' Statt 0x muss man natürlich die Hex Formatierung von VB verwenden (hier in XML nicht darstellbar).
''' Das erste ByteArray setzt auf die ESC-Taste die A-Taste und das zweite ByteArray setzt auf die A-Taste die ESC-Taste
''' </param>
''' <remarks>
''' Weitere Informationen gibt es hier: http://winfaq.de/faq_html/Content/tip1575.htm
''' Eine Liste der ScanCodes findet man hier: http://winfaq.de/faq_html/Content/tip1576.htm
''' </remarks>
Public Sub SetScanCodes(ByVal ParamArray ScanCodes() As Object)
'Hier noch mal das Beispiel um ESC mit A zu vertauschen:
'SetScanCodes(New Byte() {&H1, &H0, &H1E, &H0}, New Byte() {&H1E, &H0, &H1, &H0})
Dim CodeArray As New List(Of Byte)
Dim CodeCount As Byte = ScanCodes.Length + 1
CodeArray.AddRange(New Byte() {&H0, &H0, &H0, &H0}) 'Header
CodeArray.AddRange(New Byte() {&H0, &H0, &H0, &H0}) 'Header
CodeArray.AddRange(New Byte() {Hex(CodeCount), &H0, &H0, &H0}) 'Anzahl
For i As Integer = 0 To ScanCodes.Length - 1
CodeArray.AddRange(ScanCodes(i))
Next
CodeArray.AddRange(New Byte() {&H0, &H0, &H0, &H0}) 'Abschluss
Microsoft.Win32.Registry.SetValue("HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Keyboard Layout", _
"Scancode Map", CodeArray.ToArray, Microsoft.Win32.RegistryValueKind.Binary)
End Sub