shadowbrokers-exploits/windows/exploits/ZIBE/pyreadline/keysyms/keysyms.py
2017-04-14 11:45:07 +02:00

133 lines
No EOL
5.2 KiB
Python

# -*- coding: utf-8 -*-
#*****************************************************************************
# Copyright (C) 2003-2006 Gary Bishop.
# Copyright (C) 2006 Jorgen Stenarson. <jorgen.stenarson@bostream.nu>
#
# Distributed under the terms of the BSD License. The full license is in
# the file COPYING, distributed as part of this software.
#*****************************************************************************
import winconstants as c32
from pyreadline.logger import log
from ctypes import windll
import ctypes
# table for translating virtual keys to X windows key symbols
from common import validkey, KeyPress, make_KeyPress_from_keydescr
code2sym_map = {c32.VK_CANCEL: u'cancel',
c32.VK_BACK: u'backspace',
c32.VK_TAB: u'tab',
c32.VK_CLEAR: u'clear',
c32.VK_RETURN: u'return',
c32.VK_SHIFT: u'shift_l',
c32.VK_CONTROL: u'control_l',
c32.VK_MENU: u'alt_l',
c32.VK_PAUSE: u'pause',
c32.VK_CAPITAL: u'caps_lock',
c32.VK_ESCAPE: u'escape',
c32.VK_SPACE: u'space',
c32.VK_PRIOR: u'prior',
c32.VK_NEXT: u'next',
c32.VK_END: u'end',
c32.VK_HOME: u'home',
c32.VK_LEFT: u'left',
c32.VK_UP: u'up',
c32.VK_RIGHT: u'right',
c32.VK_DOWN: u'down',
c32.VK_SELECT: u'select',
c32.VK_PRINT: u'print',
c32.VK_EXECUTE: u'execute',
c32.VK_SNAPSHOT: u'snapshot',
c32.VK_INSERT: u'insert',
c32.VK_DELETE: u'delete',
c32.VK_HELP: u'help',
c32.VK_F1: u'f1',
c32.VK_F2: u'f2',
c32.VK_F3: u'f3',
c32.VK_F4: u'f4',
c32.VK_F5: u'f5',
c32.VK_F6: u'f6',
c32.VK_F7: u'f7',
c32.VK_F8: u'f8',
c32.VK_F9: u'f9',
c32.VK_F10: u'f10',
c32.VK_F11: u'f11',
c32.VK_F12: u'f12',
c32.VK_F13: u'f13',
c32.VK_F14: u'f14',
c32.VK_F15: u'f15',
c32.VK_F16: u'f16',
c32.VK_F17: u'f17',
c32.VK_F18: u'f18',
c32.VK_F19: u'f19',
c32.VK_F20: u'f20',
c32.VK_F21: u'f21',
c32.VK_F22: u'f22',
c32.VK_F23: u'f23',
c32.VK_F24: u'f24',
c32.VK_NUMLOCK: u'num_lock,',
c32.VK_SCROLL: u'scroll_lock',
c32.VK_APPS: u'vk_apps',
c32.VK_PROCESSKEY: u'vk_processkey',
c32.VK_ATTN: u'vk_attn',
c32.VK_CRSEL: u'vk_crsel',
c32.VK_EXSEL: u'vk_exsel',
c32.VK_EREOF: u'vk_ereof',
c32.VK_PLAY: u'vk_play',
c32.VK_ZOOM: u'vk_zoom',
c32.VK_NONAME: u'vk_noname',
c32.VK_PA1: u'vk_pa1',
c32.VK_OEM_CLEAR: u'vk_oem_clear',
c32.VK_NUMPAD0: u'numpad0',
c32.VK_NUMPAD1: u'numpad1',
c32.VK_NUMPAD2: u'numpad2',
c32.VK_NUMPAD3: u'numpad3',
c32.VK_NUMPAD4: u'numpad4',
c32.VK_NUMPAD5: u'numpad5',
c32.VK_NUMPAD6: u'numpad6',
c32.VK_NUMPAD7: u'numpad7',
c32.VK_NUMPAD8: u'numpad8',
c32.VK_NUMPAD9: u'numpad9',
c32.VK_DIVIDE: u'divide',
c32.VK_MULTIPLY: u'multiply',
c32.VK_ADD: u'add',
c32.VK_SUBTRACT: u'subtract',
c32.VK_DECIMAL: u'vk_decimal'
}
VkKeyScan = windll.user32.VkKeyScanA
def char_to_keyinfo(char, control=False, meta=False, shift=False):
k=KeyPress()
vk = VkKeyScan(ord(char))
if vk & 0xffff == 0xffff:
print u'VkKeyScan("%s") = %x' % (char, vk)
raise ValueError, u'bad key'
if vk & 0x100:
k.shift = True
if vk & 0x200:
k.control = True
if vk & 0x400:
k.meta = True
k.char=chr(vk & 0xff)
return k
def make_KeyPress(char, state, keycode):
control = (state & (4+8)) != 0
meta = (state & (1+2)) != 0
shift = (state & 0x10) != 0
if control and not meta:#Matches ctrl- chords should pass keycode as char
char = chr(keycode)
elif control and meta: #Matches alt gr and should just pass on char
control = False
meta = False
try:
keyname=code2sym_map[keycode]
except KeyError:
keyname = u""
out = KeyPress(char, shift, control, meta, keyname)
return out
if __name__==u"__main__":
import startup