2017-08-02 6 views
-1

私はプログラムを書いているので、キーボードを使わずにタイプすることができるPythonプログラムがあります。基本的にキーコードを使ってMacキーボードをシミュレートします。しかし、私は大文字のシミュレーション方法を知らない。また、文字 '>'を使用したいと思いますが、Unicodeしか見つけられません。誰でも大文字用の別のキーコードを見つけるか、大文字が現れるようにシフトと文字の両方を同時に使う方法を見つけることができますか?PythonのmacOSキーボードシミュレーションでのシフト文字?

これが起こる方法がない場合、誰かがキーコードの代わりに各文字のUnicodeを使用する方法を私に示してもらえますか?

誰もが私が何を意味するかについて混乱している場合は、ここでのプログラムです:

#!/usr/bin/python 
# Script simulating keyboard events in macOS. 
# See: https://stackoverflow.com/q/13564851/55075 

import sys 
import time 
import string 
from Quartz.CoreGraphics import CGEventCreateKeyboardEvent 
from Quartz.CoreGraphics import CGEventPost 
from Quartz.CoreGraphics import kCGHIDEventTap 
#from Quartz.CoreGraphics import CFRelease # Python releases things automatically. 

class Keyboard(): 
    shiftChars = { 
    '~': '`', 
    '!': '1', 
    '@': '2', 
    '#': '3', 
    '$': '4', 
    '%': '5', 
    '^': '6', 
    '&': '7', 
    '*': '8', 
    '(': '9', 
    ')': '0', 
    '_': '-', 
    '+': '=', 
    '{': '[', 
    '}': ']', 
    '|': '\\', 
    ':': ';', 
    '"': '\'', 
    '<': ',', 
    '>': '.', 
    '?': '/' 
    } 


    keyCodeMap = { 
    'a'    : 0x00, 
    's'    : 0x01, 
    'd'    : 0x02, 
    'f'    : 0x03, 
    'h'    : 0x04, 
    'g'    : 0x05, 
    'z'    : 0x06, 
    'x'    : 0x07, 
    'c'    : 0x08, 
    'v'    : 0x09, 
    'b'    : 0x0B, 
    'q'    : 0x0C, 
    'w'    : 0x0D, 
    'e'    : 0x0E, 
    'r'    : 0x0F, 
    'y'    : 0x10, 
    't'    : 0x11, 
    '1'    : 0x12, 
    '2'    : 0x13, 
    '3'    : 0x14, 
    '4'    : 0x15, 
    '6'    : 0x16, 
    '5'    : 0x17, 
    '='    : 0x18, 
    '9'    : 0x19, 
    '7'    : 0x1A, 
    '-'    : 0x1B, 
    '8'    : 0x1C, 
    '0'    : 0x1D, 
    ']'    : 0x1E, 
    'o'    : 0x1F, 
    'u'    : 0x20, 
    '['    : 0x21, 
    'i'    : 0x22, 
    'p'    : 0x23, 
    'l'    : 0x25, 
    'j'    : 0x26, 
    '\''    : 0x27, 
    'k'    : 0x28, 
    ';'    : 0x29, 
    '\\'    : 0x2A, 
    ','    : 0x2B, 
    '/'    : 0x2C, 
    'n'    : 0x2D, 
    'm'    : 0x2E, 
    '.'    : 0x2F, 
    '~'    : 0x32, 
    'k.'    : 0x41, 
    'k*'    : 0x43, 
    'k+'    : 0x45, 
    'kclear'   : 0x47, 
    'k/'    : 0x4B, 
    'k\n'   : 0x4C, 
    'k-'    : 0x4E, 
    'k='    : 0x51, 
    'k0'    : 0x52, 
    'k1'    : 0x53, 
    'k2'    : 0x54, 
    'k3'    : 0x55, 
    'k4'    : 0x56, 
    'k5'    : 0x57, 
    'k6'    : 0x58, 
    'k7'    : 0x59, 
    'k8'    : 0x5B, 
    'k9'    : 0x5C, 

    # keycodes for keys that are independent of keyboard layout 
    '\n'    : 0x24, 
    '\t'    : 0x30, 
    ' '    : 0x31, 
    'del'   : 0x33, 
    'delete'   : 0x33, 
    'esc'   : 0x35, 
    'escape'   : 0x35, 
    'cmd'   : 0x37, 
    'command'  : 0x37, 
    'shift'   : 0x38, 
    'caps lock'  : 0x39, 
    'option'   : 0x3A, 
    'ctrl'   : 0x3B, 
    'control'  : 0x3B, 
    'right shift' : 0x3C, 
    'rshift'   : 0xFFFF, 
    'right option' : 0x3D, 
    'roption'  : 0x3D, 
    'right control' : 0x3E, 
    'rcontrol'  : 0x3E, 
    'fun'   : 0x3F, 
    'function'  : 0x3F, 
    'f17'   : 0x40, 
    'volume up'  : 0x48, 
    'volume down' : 0x49, 
    'mute'   : 0x4A, 
    'f18'   : 0x4F, 
    'f19'   : 0x50, 
    'f20'   : 0x5A, 
    'f5'    : 0x60, 
    'f6'    : 0x61, 
    'f7'    : 0x62, 
    'f3'    : 0x63, 
    'f8'    : 0x64, 
    'f9'    : 0x65, 
    'f11'   : 0x67, 
    'f13'   : 0x69, 
    'f16'   : 0x6A, 
    'f14'   : 0x6B, 
    'f10'   : 0x6D, 
    'f12'   : 0x6F, 
    'f15'   : 0x71, 
    'help'   : 0x72, 
    'home'   : 0x73, 
    'pgup'   : 0x74, 
    'page up'  : 0x74, 
    'forward delete' : 0x75, 
    'f4'    : 0x76, 
    'end'   : 0x77, 
    'f2'    : 0x78, 
    'page down'  : 0x79, 
    'pgdn'   : 0x79, 
    'f1'    : 0x7A, 
    'left'   : 0x7B, 
    'right'   : 0x7C, 
    'down'   : 0x7D, 
    'up'    : 0x7E 
    } 

    # See: https://stackoverflow.com/q/3202629/55075 
    def toKeyCode(self, c): 
    shiftKey = False 
    # Letter 
    if c.isalpha(): 
     if not c.islower(): 
      shiftKey = True 
      c = c.lower() 
    if c in Keyboard.shiftChars: 
     shiftKey = True 
     c = Keyboard.shiftChars[c] 
    if c in Keyboard.keyCodeMap: 
     keyCode = Keyboard.keyCodeMap[c] 
    else: 
     keyCode = ord(c) 
    return keyCode, shiftKey 

    def KeyDown(self, k): 
    keyCode, shiftKey = self.toKeyCode(k) 

    time.sleep(0.0001) 

    if shiftKey: 
     CGEventPost(kCGHIDEventTap, CGEventCreateKeyboardEvent(None, 0x38, True)) 
     time.sleep(0.0001) 

    CGEventPost(kCGHIDEventTap, CGEventCreateKeyboardEvent(None, keyCode, True)) 
    time.sleep(0.0001) 

    if shiftKey: 
     CGEventPost(kCGHIDEventTap, CGEventCreateKeyboardEvent(None, 0x38, False)) 
     time.sleep(0.0001) 

    def KeyUp(self, k): 
    keyCode, shiftKey = self.toKeyCode(k) 

    time.sleep(0.0001) 

    CGEventPost(kCGHIDEventTap, CGEventCreateKeyboardEvent(None, keyCode, False)) 
    time.sleep(0.0001) 

    def KeyPress(self, k): 
    keyCode, shiftKey = self.toKeyCode(k) 

    time.sleep(0.0001) 

    if shiftKey: 
     CGEventPost(kCGHIDEventTap, CGEventCreateKeyboardEvent(None, 0x38, True)) 
     time.sleep(0.0001) 

    CGEventPost(kCGHIDEventTap, CGEventCreateKeyboardEvent(None, keyCode, True)) 
    time.sleep(0.0001) 

    CGEventPost(kCGHIDEventTap, CGEventCreateKeyboardEvent(None, keyCode, False)) 
    time.sleep(0.0001) 

    if shiftKey: 
     CGEventPost(kCGHIDEventTap, CGEventCreateKeyboardEvent(None, 0x38, False)) 
     time.sleep(0.0001) 

    def Type(self, text): 
    for key in text: 
     self.KeyDown(key) 
     self.KeyUp(key) 

    def click(self, x): 
    self.KeyDown(x) 
    self.KeyUp(x) 

# DEMO 
if __name__ == '__main__': 
    keyboard = Keyboard() 
    if sys.platform == "darwin": 
     keyboard.Type('Hello world!') 
     keyboard.click('>') 

編集:これがdownvotedなっている理由を私は知りません。これは正当な質問です。私が作っているこのプロジェクトを終了するには答えが必要です。どんな助言も非常に役に立ちます。なぜ誰かがこれが下落しているのを知っているなら、コメントで説明してください。

答えて

0

私はList of Virtual Key Codesあなたが答えを見つけるのを助けることを願っています。

+0

いいえ、役に立たなかったです。しかし、ありがとう。私は特にmacOSのキーコードが必要であり、また、私が見つけたすべてのキーコードリストは、小文字であろうと資本であろうと、一般的な文字のコードしか持たない。私はそれを具体的に大文字を入力する方法を知らない。 –

関連する問題