2

OS X の Python からプログラムでウィンドウを移動しようとしています。

これを行う Stackoverflowで AppleScript のスニペットを見つけましたが、Python または別の「実際の」スクリプト言語で実行したいと考えています。

これは動作しない私の Python スクリプトです。それぞれの下に印刷コマンドの出力を書きました。

#!/usr/bin/python

from Foundation import *
from ScriptingBridge import *

app = SBApplication.applicationWithBundleIdentifier_("com.apple.SystemEvents")

finderProc = app.processes().objectWithName_("Finder")

print finderProc
# <SystemEventsProcess @0x74b641f0: SystemEventsProcess "Finder" of application "System Events" (29683)>

finderWin = finderProc.windows()[0]

print finderWin
# <SystemEventsWindow @0x74b670e0: SystemEventsWindow 0 of SystemEventsProcess "Finder" of application "System Events" (29683)>

print finderWin.name()
# Macintosh HD

finderWin.setBounds_([[20,20],[100,100]])
# no visible result

finderWin.setPosition_([20,20])

最後のコマンド (setPosition_) は、次の例外でクラッシュします。

Traceback (most recent call last):
  File "/Users/mw/Projekte/Python/winlist.py", line 17, in <module>
    finderWin.setPosition_([20,20])
AttributeError: 'SystemEventsWindow' object has no attribute 'setPosition_'

setBounds コマンドを機能させるにはどうすればよいですか?

4

2 に答える 2

3

System Events 経由で行う必要はありません (うまくいくとは思えません)。代わりに、Finder アプリで直接実行します。

from ScriptingBridge import *

app = SBApplication.applicationWithBundleIdentifier_("com.apple.Finder")
finderWin = app.windows()[0]
finderWin.setBounds_([[100,100],[100,100]])
finderWin.setPosition_([20,20])

Foundation のインポートも必要ありません。

于 2013-05-16T23:33:38.787 に答える
2

Python から OS X のアクセシビリティ API を操作したい場合は、atomacを試してください。System Events は、さまざまなシステム API の AppleScriptable ラッパーにすぎませんが、PyObjC やその他の Python ライブラリを使用すると、AS/SB のナンセンスに対処する必要なく、システム API に広範囲にアクセスできます。

--

ps システム環境設定の [アクセシビリティ] ペインで [補助デバイス] オプションを有効にする必要がある場合があります。そうしないと、ほとんどのアクセシビリティ機能が利用できなくなります。

于 2013-05-18T23:17:00.443 に答える