AppleScript có được ứng dụng hoạt động


13

Làm cách nào tôi có thể chạy mã (ví dụ display dialog("test")) bằng AppleScript chỉ khi Ứng dụng "Finder" hiện đang được tập trung / hoạt động.


Ừm, nếu ứng dụng đã hoạt động, bạn nhắm đến điều gì bằng cách kích hoạt lại nó?
Kent

stackoverflow.com/questions/3718520/ nhàn rỗi có liên quan mặc dù không giải quyết được vấn đề.
William

Bạn cần làm rõ câu hỏi của bạn. Kịch bản trong câu trả lời của tôi hoạt động, đối với một định nghĩa nhất định về 'tác phẩm', nghĩa là nó báo cáo chính xác liệu Finder có ở trên cùng hay không.
Tetsujin

@Tetsujin được cập nhật
William

Làm thế nào bạn sẽ khởi chạy ứng dụng Applescript? Tất nhiên, nhấp đúp vào nó sẽ luôn hiển thị Trình tìm kiếm ở vị trí 'thứ 2 đến cuối cùng'. Thay đổi câu trả lời - điều này sẽ hoạt động nếu được gọi từ Trình chỉnh sửa tập lệnh, nhưng 'không thành công' nếu nhấp đúp vào Trình tìm kiếm, vì nó cho kết quả dương tính giả
Tetsujin

Câu trả lời:


18

Điều này sẽ hoạt động nếu tập lệnh được gọi từ Script Editor, vì nó 'tránh đường' để kiểm tra ứng dụng tiếp theo, nhưng sẽ thất bại nếu nhấp đúp từ Finder, vì Finder sẽ luôn ở cuối dòng.

tell application "System Events"
    set frontmostProcess to first process where it is frontmost
    set visible of frontmostProcess to false
    repeat while (frontmostProcess is frontmost)
        delay 0.2
    end repeat
    set secondFrontmost to name of first process where it is frontmost
    set frontmost of frontmostProcess to true
end tell

tell application (path to frontmost application as text)
    if "Finder" is in secondFrontmost then
        display dialog ("Finder was last in front")
    else
        display dialog (secondFrontmost & " was last in front")
    end if
end tell

Để lại câu trả lời trước đây cho hậu thế

Từ chối toàn bộ câu trả lời sau khi không đọc đúng câu hỏi ban đầu ;-)

tell application "System Events"
    set activeApp to name of first application process whose frontmost is true
    if "Finder" is in activeApp then
        display dialog ("test")
    else
        display dialog ("test2")
    end if
end tell

+1 Mặc dù giải pháp đề xuất của bạn dường như không hoạt động. Tôi nhận được "thử nghiệm" miễn là ứng dụng được mở và không nhất thiết là nó có hoạt động hay không.
William

một câu trả lời đã được chỉnh sửa lại
Tetsujin

hoàn thành viết lại, bây giờ tôi trở lại máy tính để bàn của mình - điều này bây giờ thực hiện chính xác những gì bạn yêu cầu.
Tetsujin

2
bạn cũng có thể thay thế lệnh hộp thoại thứ hai bằng display dialog (activeApp)để xác nhận chính xác những gì tập lệnh nghĩ là trên cùng.
Kent

1
Hãy cẩn thận với điều này - một số tên ứng dụng của ứng dụng (ví dụ tell application "app_name":) khác với tên quy trình của chúng (ví dụ set frontmost of process "app_process" to true:).
BallpointBen
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.