더 읽기 전에 : 나는 버틀러 및 유사한 프로그램 에 대해 알고 있습니다. 타사 앱 없이이 작업을 수행하는 내장 방법을 찾고 있습니다.
어쨌든 쉘 명령을 실행하는 AppleScript를 작성했습니다. Butler없이 상단의 메뉴 막대에 해당 출력을 표시하고 싶습니다. 어떻게해야합니까?
더 읽기 전에 : 나는 버틀러 및 유사한 프로그램 에 대해 알고 있습니다. 타사 앱 없이이 작업을 수행하는 내장 방법을 찾고 있습니다.
어쨌든 쉘 명령을 실행하는 AppleScript를 작성했습니다. Butler없이 상단의 메뉴 막대에 해당 출력을 표시하고 싶습니다. 어떻게해야합니까?
답변:
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
다음이 표시되어야합니다.
다른 알림도 활성화 한 경우 :
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가 "메뉴"를 닫는 데 도움을주었습니다. 스크립트의 마지막 줄을 참조하십시오. 고마워요!
/programming/29168474/creating-a-simple-menubar-app-using-applescript
. . . . . 그래도 다른 곳에서 찾아서 수정 한 마지막 줄 (시간의 절반)이 정확하지 않다는 것이 두렵습니다 . . . . . . 저는 프로그래머가 아니므로 코드를 이해하는 데 시간이 더 필요합니다.
StatusItem's dealloc()
것입니다. 스크립트 편집기가 아니라 실수로 충돌하는 AppleScriptObjC 앱에만 적용됩니다.
set myText to ...
라인 코드 , 이전에 하나의 display dialog
명령은 정말 그러므로 다음의 코드를 기반으로 아무것도 필요가 전혀되지 않습니다 않습니다. 즉, 유일하게 사용되는 값 의이 myText
애프터 할당 된 즉 display dialog
명령이 되어 실행 이전하여 아무것도로 설정 이유를 display dialog
명령하는 의 맥락에서 필요한 코딩되지 않는되지 않고 코드 현재 발표했다.
StatusItem's dealloc()
또는 StatusItem's setTitle:""
내가 사용하는 것 :current application's NSStatusBar's systemStatusBar()'s removeStatusItem:StatusItem