메뉴 막대에 AppleScript 출력을 표시하는 방법이 있습니까?


8

더 읽기 전에 : 나는 버틀러 및 유사한 프로그램 에 대해 알고 있습니다. 타사 앱 없이이 작업을 수행하는 내장 방법을 찾고 있습니다.

어쨌든 쉘 명령을 실행하는 AppleScript를 작성했습니다. Butler없이 상단의 메뉴 막대에 해당 출력을 표시하고 싶습니다. 어떻게해야합니까?


AppleScriptObjC 는 macOS (2014)의 일부 이므로 "Foundation"프레임 워크 (NSMenu의 방법 포함)를 사용하여 2012 년에는 불가능했던 것을 달성 할 수 있습니다. . . . . How-to-do-it에 대한 아래 답변을 참조하십시오!
clemsam lang

답변:


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의 일부 이므로 "Foundation"프레임 워크 (NSMenu의 방법 포함)를 사용하여 2012 년에는 불가능했던 것을 달성 할 수 있습니다.

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

1
예 –이 질문에 대한 답을 마지막으로 처리합니다 /programming/29168474/creating-a-simple-menubar-app-using-applescript. . . . . 그래도 다른 곳에서 찾아서 수정 한 마지막 줄 (시간의 절반)이 정확하지 않다는 것이 두렵습니다 . . . . . . 저는 프로그래머가 아니므로 코드를 이해하는 데 시간이 더 필요합니다.
clemsam lang

1
BTW 좋은 답변입니다. "dealloc ()"때문에 "몇 번 충돌 했습니까?" 나는 +1을 가질 것이다. 이 코드를 독립형 AppleScriptObjC 앱으로 사용하면 더 좋을 StatusItem's dealloc()것입니다. 스크립트 편집기가 아니라 실수로 충돌하는 AppleScriptObjC 앱에만 적용됩니다.
user3439894

FWIW 첫 번째 set myText to ...라인 코드 , 이전에 하나의 display dialog 명령은 정말 그러므로 다음의 코드를 기반으로 아무것도 필요가 전혀되지 않습니다 않습니다. 즉, 유일하게 사용되는 의이 myText애프터 할당 된 즉 display dialog 명령이 되어 실행 이전하여 아무것도로 설정 이유를 display dialog 명령하는 의 맥락에서 필요한 코딩되지 않는되지 않고 코드 현재 발표했다.
user3439894

1
대신 StatusItem's dealloc()또는 StatusItem's setTitle:""내가 사용하는 것 :current application's NSStatusBar's systemStatusBar()'s removeStatusItem:StatusItem
user3439894
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.