2017-08-21 4 views
1

私は一度クリックすると、特定のパスのファインダウィンドウを起動するボタンをアプリケーションに持っています。私のアプリケーションを中心とした同じディスプレイにファインダウィンドウを表示

私はこの

NSString *picturesPath = [self getAppPicturesPath]; 

[[NSWorkspace sharedWorkspace] selectFile:nil inFileViewerRootedAtPath:picturesPath]; 

を使用しています問題は、私は、からは言うことができますアプリ、ディスプレイ1を実行している場合、ウィンドウがディスプレイ上の任意の位置に発売されるということである。2.

私のアプリケーションが実行されているディスプレイと同じディスプレイ上に、そのウィンドウが起動されるようにするにはどうしたらいいですか?

答えて

1

あなたのアプリがサンドボックス化されていない場合は、AppleScriptを使用してウィンドウの位置を設定することでそれを行うことができます。必要な画面のフレームを確認する必要があります。これはNSScreenを使用して行うことができます。私が手

import Cocoa 

for eachScreen in NSScreen.screens { 
    print(eachScreen.frame) 
} 

:私はこのコードを実行した場合たとえば、私の現在の設定上の(よりよいNSRectロギング用スウィフトが、しかし、Objective-Cの中に相当するものは十分に明らかである)

(0.0, 0.0, 1920.0, 1200.0) 
(-1440.0, -511.0, 1440.0, 900.0) 

あなたが見ることができるように、私の2番目の画面のフレームは、負の座標を持っているので、私はこのように、あそこに何かにウィンドウを移動した場合:

tell application "Finder" 
    set theFolder to folder POSIX file "/usr/bin" 
    open theFolder 
    set the position of the window of theFolder to {-885, 938} 
end tell 

これは、2番目の画面で終わります。

実際にスクリプトを実行する方法を知りたい場合は、いくつかのオプションがあります。 NSAppleScriptのひどいAPIを使うことができます。Scripting Bridgeの恐ろしいAPIを使うか、NSTask/Processを使って自分のDIYひどいAPIを作り、osascript -eにスクリプトを送ることができます。

+0

申し訳ありませんが、アプリがサンドボックス化されているとは言いませんでした。私はそれが問題ではないと想像したことはありません...とにかくあなたの答えはいくつかの人々のために有効です...サンドボックスアプリケーションのためにそれを行う方法はありますか? – SpaceDog

+1

残念ながら、私はあなたがサンドボックスしている間にこれを行うことはできないと思います。 –

+0

ありがとう!!!!!!!!!!答えは受け入れました。 – SpaceDog

関連する問題