Unter dem aktuellen Windows 10 habe ich auch Probleme mit den Tablet-Tasten und der Bildschirmrotation, trotz X60.
Ich habe mich nun etwas mit der Windows-Tastaturphilosophie auseinander gesetzt und habe mir die folgende Loesung ueberlegt, welche ausschliesslich mit der Display.exe auskommt.
Der Ansatz: Die Tasten werden von Windows auf verschiedene Weise angesprochen.
1) Scancodes: Jeder Taste ist ein fester Scancode-Wert zugeordnet. Dieser macht sie unabhaengig von der langessprachlichen Tastaturbelegung eindeutig ansprechbar. Das bekannte Konzept existiert so schon seit den ersten IBM-PCs. Gluecklicherweise haben bei den ersten Thinkpad-Tablets auch die Zusatztasten normale Scancodes. Es handelt sich also technisch um neu definierte Zusatztasten der Tastatur mit Scancodes, welche bisher nirgendwo anders verwenet wurden. Die Rotationstaste hat den Scancode 0x6c (Hex).
2) Die zweite Saeule des Ansatzes basiert auf dem Umgang von Windows mit Zusatztasten, wie Lautstaerke hoch, Browser starten, Taschenrechner starten... Hier handelt es sich um die so genannten Appkeys. Diese haben unterschiedliche interne Nummern, welche genau definierten Aufgaben zugewiesen wurden.
Hier eine Auflistung der Tasten mit den internen Appkey-Nummern:
Code:
1 Back (Internet browser)
2 Forward (Internet browser)
3 Refresh (Internet browser)
4 Stop (Internet browser)
5 Search
6 Favourites
7 Web Home
8 Mute volume
15 Mail
16 Media
17 My Computer
18 Calculator
24 Mute microphone
25 Lower microphone volume
26 Raise microphone volume
27 Help
28 Find
29 New
30 Open
31 Close
32 Save
33 Print
34 Undo
35 Redo
36 Copy
37 Cut
38 Paste
39 Reply
40 Forward (mail)
41 Send
42 Spelling checker
43 Toggle dictation and command/control
44 Toggle microphone
45 Corrections
Quelle:
https://groups.google.com/g/microsoft.public.fr.windowsxp/c/zZolgM6PC4o/m/sRJv2NtrB-8J
Die Auflistung ist Rueckwaerts zu verstehen. Die Tasten muessen vorhanden sein. Dann loest beispielsweise die Send-Taste das Appkey-Event 41 aus. Oder die Taschenrechnertaste das Event 18. Diese Werte sind allerdings als Windows-intern zu sehen. Nach außen haben auch diese Zusatztasten ganz normale, klassische Scan-Codes. Die Taschenrechnertaste hat z.B. den Scancode 21 E0.
Das Schoene daran ist: Es sind zwar in Windows Standardvorgehensweisen definiert, wie mit so einem Appkey-Event umzugehen ist. Allerdings laesst sich das umdefinieren.:thumbup:
z.B.
[HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\Explorer\AppKey\18]
"ShellExecute"=""C:\\Windows\\System32\\cmd.exe""
trage ich unter HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\Explorer\AppKey\18 einen Schluessel ShellExecute mit dem Verweis auf cmd.exe ein, so startet die Taschenrechnertaste die Eingabeaufforderung.
Ich habe nun fuer meine Loesung
a) das Taschenrechnertastenevent missbraucht, um mit Display.exe eine Displayrotation auszuloesen.
davor habe ich
b) die Rotationstaste am Monitor umbelegt, dass sie nach Windows-Verstaendnis eine Taschenrechnertaste ist.
Die finale .Reg-Datei schaut so aus:
Code:
Windows Registry Editor Version 5.00
[HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Keyboard Layout]
"Scancode Map"=hex:00,00,00,00,00,00,00,00,02,00,00,00,21,e0,6c,00,00,00,00,00
[HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\Explorer\AppKey\18]
"ShellExecute"="C:\\Program Files\\Display.exe (Rotation)\\rotate.lnk"
Die Scancode Map-Zeile biegt die Rotationstaste auf Taschenrechner um.
00,00,00,00,00,00,00,00,02,00,00,00 ist der vorgegebene Header.
21,e0,6c,00 erledigt das Umbelegen. 21 E0 ist der Scan-Code der Taschenrechnertaste, welche es am X60 nicht gibt. 6C 00 ist der Scan-Code der Rotationstaste.
Die letzten vier 00 sind wieder fix vorgegeben.
Weitere Umbelegungspaeaerchen koennen hinter das vorhandene Tastenpaar angefuegt werden. Dann ist die 02 im Header immer um 1 hochzuzaehlen. Am Ende stehen immer vier 00.
Im zweiten Schluessel wird bei ausgeloestem Appkey-Event 18 (Taschenrechner) auf eine Verknuepfung im Programmverzeichnis von display64.exe verwiesen, welche wiederum "C:\Program Files\Display.exe (Rotation)\display64.exe" /rotate cw aufruft.
In der ersten Fassung stand da direkt
"C:\\Program Files\\Display.exe (Rotation)\\display64.exe /rotate cw"
allerdings poppte dann bei jeder Rotation kurzzeitig ein Konsolenfenster auf. In der Verknuepfungsdatei ist hingegen eingestellt, dass display64.exe minimiert zu starten ist, was die Sache etwas eleganter macht.
Bei mir war nach der Bearbeitung der Registry noch ein Neustart erforderlich, um die Einstellungen zu uebernehmen.
Ich habe die Taschenrechnertaste genommen, weil hierzu schon ein Registry-Einstrag vorhanden war. Ich weiss nicht, ob irgendwelche Bedingungen bzgl Tastatur erfuellt sein muessen, oder ob man jeden Appkey missbrauchen kann... Man braucht wohl auf jedenfall den Scancode mit passendem Appkey-Code der umzunutzenden Funktion, sowie den Scancode der richtigen Hardwaretaste. Da gibt es ja zahlreiche Quellen im Netz und Programme, welche Scancodes anzeigen können.
Die umzubiegende Appkey-Funktion sollte man natürlich nicht irgendwann brauchen. Würde ich z.B. nun an mein X60 eine Tastatur mit Taschenrechner-Taste anschließen, würde aufgrund der Umdefinition ein Druck auf diese Taste eine Bildschirmrotation auslösen. Ideal wäre es daher natürlich, wenn man in Windows eigene Appkeys definieren könnte. Allerdings habe ich hierzu noch nichts gefunden.