2011-07-29 6 views
2

パワーポイント/ pdfプレゼンテーションをプログラムで制御する必要があります(4方向のキーストロークは、前後のスライドに移動するには最低限必要です)。PPプレゼンテーションを制御するためのPythonを介したキーボード・キー押下イベントの生成方法は?

OS Xでこれを行うには、どのライブラリ/モジュール/フレームワークをPythonで使用できますか?

WindowsとC#(またはOS XとQuartz)でこれを行うことについて多くの議論がありましたが、特にPythonでは何もありませんでした。クロスプラットフォームのライブラリ/フレームワークはさらに優れています。

全体的に、私はOS X上でPythonを使ってプレゼンテーションをプログラム的に制御したいと考えています(趣味プロジェクトの一部として、そして私自身の短いプレゼンテーションでも役に立ちます)。

+0

申し訳ありませんが私の答えを削除し、何とか[タグ:osx]を見逃して、ごめんなさい! – Trufa

答えて

0

あなたはここにPyQtまたはwxPython

を試すことができるのPyQtでキーを押して処理する方法のためのリンクです - http://www.saltycrane.com/blog/2008/01/how-to-capture-tab-key-press-event-with/

とwxPythonのために - http://www.wxpython.org/docs/api/wx.KeyEvent-class.htmlhttp://zetcode.com/wxpython/events/

+2

ありがとうございますが、** keypressイベントを収集するためのこれらのモジュールではありませんか?私が間違っている場合は教えてください。プレゼンテーションを次のスライドにコードを移動するために、イベントを生成したい。 – AJJ

+0

たとえば、1分のタイマーが終了した後、次のスライドに移動したいとします。ですから、1分後にプレゼンテーションウィンドウに「前方キー」イベントを生成するコマンドを書きたいと思います。 – AJJ

+0

申し訳ありませんが、私はあなたがプレゼンテーションプログラムをPythonで作成していると仮定しました。一つの提案と私はこれがPythonではないことを知っていますが、AppleScriptを見ましたか?クロスプラットフォームPythonライブラリがキーボードイベントをオペレーティングシステムに送るのは、私が遭遇した唯一の事はwxPythonを使うことです - http://wxpython-users.1045709.n5.nabble.com/Create-a-mouse-keyboard -event-and-the-underlying-OS-td4400077.html – arunkumar

0

はあなたがQuartzライブラリを使用することができますPython、例えば

# DEMO 
if __name__ == '__main__': 
    keyboard = Keyboard() 
    if sys.platform == "darwin": 
     keyboard.Type('Hello World!') 
    elif sys.platform == "win32": 
     print("Error: Platform not supported!") 

現在のウィンドウ上Hello World!テキストを入力してシミュレートします:ここで

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

import sys 
import time 
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'   : 0x3C, 
     '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) 

は、クラスの上使用してデモコードです。

上記のコードをシェルスクリプトとして実行できます。 keyboard.py fileへのリンクを確認します。

関連する質問:Generate keyboard events

関連する問題