0

Applescript モジュールを使用して Python で AppleScript 関数を作成していますが、次の関数の一般化に問題があります。

scpt = applescript.AppleScript('''
    on code()
        tell application "System Events"
            key code 123 using command down
        end tell
    end code
''')

次のように、キーコードとキーダウン変数を入力パラメーターにできるようにします。

scpt = applescript.AppleScript('''
    on code(kc, extras)
        tell application "System Events"
            key code kc extras
        end tell
    end code
''')

しかし、次の実行時エラーが発生します。

Traceback (most recent call last):
File "<stdin>", line 1, in <module>
File "example.py", line 28, in <module>
   ''')
File "build/bdist.macosx-10.7-intel/egg/applescript/__init__.py", line 49, in __init__

applescript.ScriptError: Expected end of line but found application constant or consideration. (-2741) range=410-414

そのため、構文に何か問題があると思います。

Mac 0SX 10.7.5、python 2.7.1 を使用しています。

編集

このコードは、example.py という名前の python モジュールにあります。モジュール内のコードとまったく同じコードを次に示します。

import applescript

scpt = applescript.AppleScript('''
    on code(kc, extras)
        tell application "System Events"
            key code kc extras
        end tell
    end code
''')

次のようにコマンドラインから呼び出しています。

$ python
Python 2.7.1 (r271:86832, Aug  5 2011, 03:30:24)
[GCC 4.2.1 (Based on Apple Inc. build 5658) (LLVM build 2335.15.00)] on darwin
Type "help", "copyright", "credits" or "license" for more information.
>>> import example as e
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
  File "example.py", line 9, in <module>
    ''')
  File "build/bdist.macosx-10.7-intel/egg/applescript/__init__.py", line 49, in __init__

applescript.ScriptError: Expected end of line but found identifier. (-2741) range=90-96

ここで、9 行目はモジュールの最後の行です -- ''')。

4

2 に答える 2

1

私の推測では、間違ったクラスの変数を渡していると思います。私はこのようなことをします。常に文字列を渡し、コードで変数を適切なクラスに変換するように自分に言い聞かせます。コマンド/オプション/コントロール タイプ キーなどの適切なクラスをシステム イベントに渡すのは難しいため、これを行います。これらには、システム イベントだけが理解できる独自のクラスがあります。それ以外の方法でそれらを渡す方法がわかりません。

したがって、すべての文字列を使用すると、単純な if ステートメントで残りを処理できます。また、アプリケーション変数も追加したことに注意してください。キーストロークを発行すると、キーストロークは最前面のアプリケーションに発行されるため、キーストロークを実行する前に、対象とするアプリケーションを「アクティブ化」して最前面に配置することをお勧めします。

基本的なAppleScriptコードは次のとおりです...

on code(appName, theNum, theModifier)
    tell application appName to activate
    delay 0.2

    set theNum to theNum as number
    tell application "System Events"
        if theModifier is "command" then
            key code theNum using command down
        else if theModifier is "option" then
            key code theNum using option down
        else if theModifier is "control" then
            key code theNum using control down
        else if theModifier is "shift" then
            key code theNum using shift down
        end if
    end tell
end code

次に、次のようなもので実行できます(すべての文字列を渡していることに注意してください)...

code("Safari", "123", "command")
于 2013-10-14T16:56:33.960 に答える
0

py-applescript モジュールは、 (型) および(列挙子) オブジェクトを定義するためのクラスを提供AETypeします。用語のサポートがないため、アプリケーションの SDEF を AppleScript Editor からエクスポートし、対応する 4 文字のコード (例: -> 、-> ) を検索する必要があります。例:AEEnumclassconstantdocumentb"docu"Unicode textb"utxt"

#!/usr/bin/python2.7

import applescript

# AppleScript 'constants' (four-char codes taken from 'System Events.sdef')
command_down = applescript.AEEnum("Kcmd")
control_down = applescript.AEEnum("Kctl")
option_down = applescript.AEEnum("Kopt")
shift_down = applescript.AEEnum("Ksft")


scpt = applescript.AppleScript('''
    on code(kc, extras)
        tell application "System Events"
            key code kc using extras
        end tell
    end code
''')

scpt.call("code", 45, [command_down, option_down]) # Cmd-Opt-N
于 2013-10-21T19:39:58.410 に答える