AppleScript出力をメニューバーに表示する方法はありますか?


8

さらに読む前に:私は執事や同様のプログラムについて知っています。サードパーティのアプリなしでこれを行うための組み込みの方法を探しています。

とにかく、私はシェルコマンドを実行するAppleScriptを作成しました。その出力を上部のメニューバーに表示したい...バトラーなしでこれを行うにはどうすればよいですか?


以来AppleScriptObjCは MacOSの(2014)の一部であり、2012年に、おそらく不可能だったものを達成するために、その「財団」の枠組み(税込。NSMenuのメソッド)を使用することが可能です。。。。。操作方法については、以下の私の回答をご覧ください。
clemsam lang 2018

回答:


2

一般的に、Growlなどのサードパーティプログラムがなければ、これを行うための組み込みの方法はありません。

ただし、メニューレットサービスを提供するスクリプトや他のプログラム(ここで見つけものなど)を作成することもできます。Growlの統合ははるかに簡単に実現できると思います。


1

OS Xでこれを行う組み込みの方法はありません。ただし、Growlを使用すると、通知を受け取ることができます。そのためのサンプルスクリプトを次に示します。

--Make sure Growl is running
tell application "System Events"
    set isRunning to (count of (every process whose bundle identifier is "com.Growl.GrowlHelperApp")) > 0
end tell

if isRunning then
    tell application id "com.Growl.GrowlHelperApp"
        set the allNotificationsList to ¬
            {"Test Notification", "Another Test Notification"}
        --Notifications can be enabled in System Preferences>Growl>Applications>Display Options
        set the enabledNotificationsList to ¬
            {"Test Notification"}
        register as application ¬
            "Growl AppleScript Sample" all notifications allNotificationsList ¬
            default notifications enabledNotificationsList ¬
                    -- Set the icon. You can use any icon from any application
            icon of application "AppleScript Editor"

        notify with name ¬
            "Test Notification" title ¬
            "Test Notification" description ¬
            "This is a test AppleScript notification." application name "Growl AppleScript Sample"

        notify with name ¬
            "Another Test Notification" title ¬
            "Another Test Notification :) " description ¬
            "Alas — you won't see me until you enable me..." application name "Growl AppleScript Sample"

    end tell
end if

これはこれを表示するはずです:

他の通知も有効にしている場合:

ここでは、より高度な手法について説明します。


1

以来AppleScriptObjCは MacOSのの一部であり、2012年に、おそらく不可能だったものを達成するために、その「財団」の枠組み(税込。NSMenuのメソッド)を使用することが可能です。

AppleScript内からカスタムメニューを作成する興味深いスクリプトを見つけました。これから、macOSのメニューバーにテキスト配置するための適切なコードを抽出しました。実際には、コンテンツの挿入にメニューの「タイトル」のみを使用しています。

これを示すために、テキスト入力(6秒待機)をユーザーに要求する非常に基本的なダイアログスクリプトを実装しました。このスクリプトは、メニューバーに一時的に(5秒)表示されます。
ここにあります:

use framework "Foundation"
use framework "AppKit"
use scripting additions
property StatusItem : missing value
property newMenu : class "NSMenu"

display dialog "Write something:" default answer "" giving up after 6
set myText to text returned of the result
if myText is "" then set myText to "TOOOOO slow … try again !"
set myText to ">>    " & myText & "    <<"

set bar to current application's NSStatusBar's systemStatusBar
set StatusItem to bar's statusItemWithLength:-1.0
StatusItem's setTitle:myText
set newMenu to current application's NSMenu's alloc()'s initWithTitle:"Custom"
StatusItem's setMenu:newMenu

delay 5
current application's NSStatusBar's systemStatusBar()'s ¬
        removeStatusItem:StatusItem  

このAppleScriptコードは、任意のスクリプトで使用できます。(その「ダイアログ」部分はオプションです...)

user3439894 は「メニュー」を閉じるのに役立ちました。スクリプトの最後の行を参照してください。どうもありがとう!


あなたがたまたまあなたがあなたの答えを導き出した元のソースコードへのリンクを持っていますか?見るといいですね。ありがとう。
user3439894 2018

1
はい–これは、この質問に対する受け入れられた回答の最後のハンドラにあります:/programming/29168474/creating-a-simple-menubar-app-using-applescript。。。。。しかし、私が恐れているのは、別の場所で見つけて適応させた私の最後の行(半分の時間)が正しくないことです。。。。。。私はプログラマーではないので、コードを理解するのにもう少し時間が必要です。
clemsam lang 2018

1
ところでそれはいい答えです、そうでなければ「数回クラッシュしました-"dealloc()のために?"」+1します。ただし、このコードをスタンドアロンのAppleScriptObjCアプリとして使用する場合は、おそらくそれがよりStatusItem's dealloc()適切であり、AppleScriptObjCアプリにのみ適用可能であり、Script Editorではなく誤ってクラッシュする可能性があります。
user3439894 2018

FWIW コードの最初のset myText to ...行(コマンドの前の行)は、次のコードに基づいて実際には何も実行しないため、まったく必要ありません。つまり、のみ使用価値のは、後に割り当てられたものであるコマンドをされ実行前には何に設定する理由はコマンドがのコンテキストで必要なコーディング未使用とではありませんコード現在提示します。display dialog myTextdisplay dialog display dialog
user3439894

1
代わりに、StatusItem's dealloc()またはStatusItem's setTitle:""使用します:current application's NSStatusBar's systemStatusBar()'s removeStatusItem:StatusItem
user3439894 '15
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.