@@ -226,14 +226,33 @@ class AccessibleTableCellInfo(Structure):
226226 ]
227227
228228MAX_KEY_BINDINGS = 50
229- ACCESSIBLE_SHIFT_KEYSTROKE = 1
230- ACCESSIBLE_CONTROL_KEYSTROKE = 2
231- ACCESSIBLE_META_KEYSTROKE = 4
232- ACCESSIBLE_ALT_KEYSTROKE = 8
233- ACCESSIBLE_ALT_GRAPH_KEYSTROKE = 16
234- ACCESSIBLE_BUTTON1_KEYSTROKE = 32
235- ACCESSIBLE_BUTTON2_KEYSTROKE = 64
236- ACCESSIBLE_BUTTON3_KEYSTROKE = 128
229+ ACCESSIBLE_SHIFT_KEYSTROKE = 1
230+ ACCESSIBLE_CONTROL_KEYSTROKE = 2
231+ ACCESSIBLE_META_KEYSTROKE = 4
232+ ACCESSIBLE_ALT_KEYSTROKE = 8
233+ ACCESSIBLE_ALT_GRAPH_KEYSTROKE = 16
234+ ACCESSIBLE_BUTTON1_KEYSTROKE = 32
235+ ACCESSIBLE_BUTTON2_KEYSTROKE = 64
236+ ACCESSIBLE_BUTTON3_KEYSTROKE = 128
237+ ACCESSIBLE_FKEY_KEYSTROKE = 256 # F key pressed, character contains 1-24
238+ ACCESSIBLE_CONTROLCODE_KEYSTROKE = 512 # Control code key pressed, character contains control code.
239+
240+ # The supported control code keys are:
241+ ACCESSIBLE_VK_BACK_SPACE = 8
242+ ACCESSIBLE_VK_DELETE = 127
243+ ACCESSIBLE_VK_DOWN = 40
244+ ACCESSIBLE_VK_END = 35
245+ ACCESSIBLE_VK_HOME = 36
246+ ACCESSIBLE_VK_INSERT = 155
247+ ACCESSIBLE_VK_KP_DOWN = 225
248+ ACCESSIBLE_VK_KP_LEFT = 226
249+ ACCESSIBLE_VK_KP_RIGHT = 227
250+ ACCESSIBLE_VK_KP_UP = 224
251+ ACCESSIBLE_VK_LEFT = 37
252+ ACCESSIBLE_VK_PAGE_DOWN = 34
253+ ACCESSIBLE_VK_PAGE_UP = 33
254+ ACCESSIBLE_VK_RIGHT = 39
255+ ACCESSIBLE_VK_UP = 38
237256
238257class AccessibleKeyBindingInfo (Structure ):
239258 _fields_ = [
@@ -827,3 +846,46 @@ def terminate():
827846 bridgeDll = None
828847 windll .kernel32 .FreeLibrary (h )
829848 isRunning = False
849+
850+
851+ JABKeyControlCodesToLabels = {
852+ ACCESSIBLE_VK_UP : "uparrow" ,
853+ ACCESSIBLE_VK_DOWN : "downarrow" ,
854+ ACCESSIBLE_VK_LEFT : "leftarrow" ,
855+ ACCESSIBLE_VK_RIGHT : "rightarrow" ,
856+ ACCESSIBLE_VK_KP_UP : "numpad8" ,
857+ ACCESSIBLE_VK_KP_DOWN : "numpad2" ,
858+ ACCESSIBLE_VK_KP_LEFT : "numpad4" ,
859+ ACCESSIBLE_VK_KP_RIGHT : "numpad6" ,
860+ ACCESSIBLE_VK_BACK_SPACE : "backspace" ,
861+ ACCESSIBLE_VK_INSERT : "insert" ,
862+ ACCESSIBLE_VK_DELETE : "delete" ,
863+ ACCESSIBLE_VK_HOME : "home" ,
864+ ACCESSIBLE_VK_END : "end" ,
865+ ACCESSIBLE_VK_PAGE_UP : "pageup" ,
866+ ACCESSIBLE_VK_PAGE_DOWN : "pagedown"
867+ }
868+
869+ # Do not include ACCESSIBLE_FKEY_KEYSTROKE and ACCESSIBLE_CONTROLCODE_KEYSTROKE
870+ # as these are not really modifiers
871+ JABKeyModifiersToLabels = {
872+ ACCESSIBLE_BUTTON3_KEYSTROKE : "button3" ,
873+ ACCESSIBLE_BUTTON2_KEYSTROKE : "button2" ,
874+ ACCESSIBLE_BUTTON1_KEYSTROKE : "button1" ,
875+ ACCESSIBLE_ALT_GRAPH_KEYSTROKE : "altgraph" ,
876+ ACCESSIBLE_ALT_KEYSTROKE : "alt" ,
877+ ACCESSIBLE_META_KEYSTROKE : "meta" ,
878+ ACCESSIBLE_CONTROL_KEYSTROKE : "control" ,
879+ ACCESSIBLE_SHIFT_KEYSTROKE : "shift"
880+ }
881+
882+
883+ def _getKeyLabels (modifiers , character ):
884+ keys = [v for m , v in JABKeyModifiersToLabels .items () if modifiers & m ]
885+ if modifiers & ACCESSIBLE_FKEY_KEYSTROKE :
886+ keys .append ("F{}" .format (ord (character )))
887+ elif modifiers & ACCESSIBLE_CONTROLCODE_KEYSTROKE :
888+ keys .append (JABKeyControlCodesToLabels .get (ord (character ), character ))
889+ else :
890+ keys .append (character )
891+ return keys
0 commit comments