Advertisement
Guest User

Untitled

a guest
Feb 8th, 2016
58
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 3.15 KB | None | 0 0
  1. import ctypes
  2.  
  3. SendInput = ctypes.windll.user32.SendInput
  4.  
  5. PUL = ctypes.POINTER(ctypes.c_ulong)
  6.  
  7. class KeyBdInput(ctypes.Structure):
  8. _fields_ = [("wVk", ctypes.c_ushort),
  9. ("wScan", ctypes.c_ushort),
  10. ("dwFlags", ctypes.c_ulong),
  11. ("time", ctypes.c_ulong),
  12. ("dwExtraInfo", PUL)]
  13.  
  14. class HardwareInput(ctypes.Structure):
  15. _fields_ = [("uMsg", ctypes.c_ulong),
  16. ("wParamL", ctypes.c_short),
  17. ("wParamH", ctypes.c_ushort)]
  18.  
  19. class MouseInput(ctypes.Structure):
  20. _fields_ = [("dx", ctypes.c_long),
  21. ("dy", ctypes.c_long),
  22. ("mouseData", ctypes.c_ulong),
  23. ("dwFlags", ctypes.c_ulong),
  24. ("time",ctypes.c_ulong),
  25. ("dwExtraInfo", PUL)]
  26.  
  27. class Input_I(ctypes.Union):
  28. _fields_ = [("ki", KeyBdInput),
  29. ("mi", MouseInput),
  30. ("hi", HardwareInput)]
  31.  
  32. class Input(ctypes.Structure):
  33. _fields_ = [("type", ctypes.c_ulong),
  34. ("ii", Input_I)]
  35.  
  36. def getKeyCode(unicodeKey):
  37. k = unicodeKey
  38. curKeyCode = 0
  39. if k == "up": curKeyCode = 0x26
  40. elif k == "down": curKeyCode = 0x28
  41. elif k == "left": curKeyCode = 0x25
  42. elif k == "right": curKeyCode = 0x27
  43. elif k == "home": curKeyCode = 0x24
  44. elif k == "end": curKeyCode = 0x23
  45. elif k == "insert": curKeyCode = 0x2D
  46. elif k == "pgup": curKeyCode = 0x21
  47. elif k == "pgdn": curKeyCode = 0x22
  48. elif k == "delete": curKeyCode = 0x2E
  49. elif k == "n": curKeyCode = 0x0D
  50.  
  51. if curKeyCode == 0:
  52. return 0, int(unicodeKey.encode("hex"), 16), 0x0004
  53. else:
  54. return curKeyCode, 0, 0
  55.  
  56. def PressKey(unicodeKey):
  57. key, unikey, uniflag = getKeyCode(unicodeKey)
  58.  
  59. extra = ctypes.c_ulong(0)
  60. ii_ = Input_I()
  61. ii_.ki = KeyBdInput( key, unikey, uniflag, 0, ctypes.pointer(extra) )
  62. x = Input( ctypes.c_ulong(1), ii_ )
  63. ctypes.windll.user32.SendInput(1, ctypes.pointer(x), ctypes.sizeof(x))
  64.  
  65. def ReleaseKey(unicodeKey):
  66. key, unikey, uniflag = getKeyCode(unicodeKey)
  67. extra = ctypes.c_ulong(0)
  68. ii_ = Input_I()
  69. ii_.ki = KeyBdInput( key, unikey, uniflag + 0x0002, 0, ctypes.pointer(extra) )
  70. x = Input( ctypes.c_ulong(1), ii_ )
  71. ctypes.windll.user32.SendInput(1, ctypes.pointer(x), ctypes.sizeof(x))
  72.  
  73. import keyPress
  74. import msvcrt
  75. import threading
  76.  
  77. def getKey():
  78.  
  79. k = msvcrt.getch()
  80.  
  81. # Escaped Key: 224 is on the keyboard, 0 is on the numpad
  82. if int(k.encode("hex"), 16) == 224 or int(k.encode("hex"), 16) == 0:
  83. k = msvcrt.getch()
  84. if k == "H": k = "up"
  85. elif k == "P": k = "down"
  86. elif k == "K": k = "left"
  87. elif k == "M": k = "right"
  88. elif k == "G": k = "home"
  89. elif k == "O": k = "end"
  90. elif k == "R": k = "insert"
  91. elif k == "I": k = "pgup"
  92. elif k == "Q": k = "pgdn"
  93. elif k == "S": k = "delete"
  94.  
  95. # Fix weird linebreak
  96. if k == "r":
  97. k = "n"
  98.  
  99. return k
  100.  
  101.  
  102. def actualGetKeys():
  103. while True:
  104. k = getKey()
  105. keyPress.PressKey(k)
  106. keyPress.ReleaseKey(k)
  107.  
  108. def getKeys():
  109. p = threading.Thread(target=actualGetKeys)
  110. p.daemon = True
  111. p.start()
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement