Có cách nào để đầu ra AppleScript được hiển thị trong thanh thực đơn không?


8

Trước khi đọc thêm: Tôi biết về quản gia và các chương trình tương tự. Tôi đang tìm kiếm một cách BUILT-IN để làm điều này mà không cần ứng dụng của bên thứ ba.

Dù sao, tôi đã viết một AppleScript chạy lệnh shell. Tôi muốn hiển thị đầu ra đó trong thanh thực đơn ở đầu ... không có Butler, làm sao tôi có thể làm điều này?


AppleScriptObjC là một phần của macOS (2014), có thể sử dụng khung "Foundation" (bao gồm các phương thức của NSMothy) để đạt được những gì có thể không thể có trong năm 2012 .. . . . . Xem câu trả lời của tôi dưới đây về Cách thực hiện!
clemsam lang 16/12/18

Câu trả lời:


2

Nói chung, không có chương trình của bên thứ ba, chẳng hạn như Growl, không có cách nào được xây dựng để làm điều này.

Tuy nhiên, bạn có thể viết một kịch bản hoặc chương trình khác như chương trình tôi tìm thấy ở đây cung cấp dịch vụ menulet cho bạn. Tôi chắc chắn rằng tích hợp Growl sẽ dễ thực hiện hơn nhiều.


1

Không có cách nào được xây dựng để thực hiện việc này trong OS X. Tuy nhiên, bằng cách sử dụng Growl , bạn có thể có thông báo. Đây là một kịch bản mẫu cho điều đó:

--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

Điều đó sẽ hiển thị này:

Và nếu bạn cũng bật thông báo khác:

Các kỹ thuật tiên tiến hơn được mô tả ở đây.


1

AppleScriptObjC là một phần của macOS, nên có thể sử dụng khung "Foundation" (bao gồm các phương thức của NSMothy) để đạt được những gì có thể không thể thực hiện được vào năm 2012.

Tôi đã tìm thấy một tập lệnh thú vị để tạo các menu tùy chỉnh từ bên trong AppleScript; từ đây tôi trích xuất mã phù hợp để đặt văn bản vào thanh menu của macOS . Trong thực tế, nó chỉ sử dụng "tiêu đề" của menu để chèn một số nội dung.

Để chứng minh điều này, tôi đã triển khai một tập lệnh hộp thoại rất cơ bản yêu cầu người dùng nhập văn bản (chờ 6 giây), sau đó sẽ được hiển thị trong thanh menu tạm thời (5 giây).
Đây là:

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  

Mã AppleScript này có thể được sử dụng trong bất kỳ tập lệnh nào của bạn. (Phần "hộp thoại" của nó là tùy chọn)

user3439894 đã giúp đóng "menu" của tôi, xem dòng cuối cùng của tập lệnh. Cảm ơn rất nhiều!


Bạn có tình cờ có một liên kết đến mã nguồn ban đầu mà bạn nhận được câu trả lời của mình không? Nó sẽ là tốt đẹp để xem. Cảm ơn.
dùng3439894

1
Có - đó là trong xử lý cuối cùng của câu trả lời được chấp nhận cho câu hỏi này : /programming/29168474/creating-a-simple-menubar-app-using-applescript. . . . . Tôi mặc dù sợ hãi, mà dòng cuối cùng của tôi (chỉ hoạt động một nửa số thời điểm đó) mà tôi tìm thấy ở một nơi khác -Và adapted- là KHÔNG đúng . . . . . . Tôi không phải là lập trình viên nên tôi cần thêm thời gian để hiểu mã.
clemsam lang

1
BTW Đó là một câu trả lời hay và nếu không phải là "nó đã bị sập vài lần - vì" dealloc () "?" Tôi sẽ có +1. Một số thực phẩm cho suy nghĩ mặc dù ... nếu bạn sử dụng mã này như một ứng dụng AppleScriptObjC độc lập, có thể điều đó sẽ tốt hơn, sau đó StatusItem's dealloc()chỉ áp dụng cho ứng dụng AppleScriptObjC chứ không phải Script Editor và vô tình làm hỏng nó.
dùng3439894

FWIW set myText to ...Dòng đầu tiên, dòng trước display dialog lệnh thực sự không làm gì dựa trên mã tiếp theo và do đó hoàn toàn không cần thiết. Nói cách khác, chỉ được sử dụng giá trị của myTextlà cái được gán sau khi display dialog lệnh được chạy và tại sao cài đặt nó vào bất cứ điều gì trước khi các display dialog lệnh là không sử dụng mã hóa và không cần thiết trong bối cảnh đang hiện trình bày.
dùng3439894

1
Thay vì StatusItem's dealloc()hoặc StatusItem's setTitle:""tôi sẽ sử dụng:current application's NSStatusBar's systemStatusBar()'s removeStatusItem:StatusItem
user3439894 15/12/18
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.