当前位置: 首页 > 知识库问答 >
问题:

AppleScript应用程序不允许发送按键

詹联
2023-03-14

我用苹果脚本做了一个叫做星期五的应用程序。当我告诉它“打开chrome”时,它会打开谷歌chrome,这是在脚本编辑器和脚本编辑器之外工作的。我也可以告诉它“打开一个新标签”,它会用击键打开一个新标签:

-- this boolean is the reason this script keeps runing
set condition to false
say "Welcome sir"
set commands to {"what is todays date", "what time is it", "what is the time", "what day is it", "what month is it", "which month is it", "friday you up", "friday", "friday you tere", "you there", "empty the trash", "take out the trash", "clean up", "new tab", "next tab", "back", "take a nap", "go to sleep", "take a rest", "wake up", "copy the link", "paste the link", "give me list of running apps", "open a folder", "open chrome", "open youtube", "open atom", "quit atom", "goodbye FRIDAY_AI", "okay thanks", "okay thank you", "thanks", "thank you", "good night", "good morning", "morning", "night", "hey friday"}
repeat until condition is true
    try
        tell application "SpeechRecognitionServer"
            set FRIDAY_AI to listen continuously for commands with identifier "mine" with section title "FRIDAY's Commands"
        end tell

    -- full date
    set todays_date to date string of (current date)
    -- day
    set todays_day to weekday of (current date) as string
    -- time
    set t to time string of (current date)
    -- month
    set m to month of (current date) as string


    -- time and day
    if FRIDAY_AI = "what is todays date" then
        say todays_date
    end if
    if FRIDAY_AI = "what time is it" then
        say t
    end if
    if FRIDAY_AI = "what is the time" then
        say t
    end if
    if FRIDAY_AI = "what day is it" then
        say todays_day
    end if
    if FRIDAY_AI = "what month is it" then
        say m
    end if
    if FRIDAY_AI = "which month is it" then
        say m
    end if
    -- end of time and day


    -- Clear trash --
    if FRIDAY_AI = "empty the trash" then
        tell application "Finder"
            empty the trash
        end tell
    end if

    -- FRIDAY --
    if FRIDAY_AI = "friday" then
        say "yes"
    end if

    if FRIDAY_AI = "friday you up" then
        say "for you sir, alllways"
    end if

    if FRIDAY_AI = "friday you there" then
        say "yes"
    end if

    if FRIDAY_AI = "you there" then
        say "yes"
    end if

    if FRIDAY_AI = "hey friday" then
        say "hey sir, waht can I do for you"
    end if
    -- END OF FRIDAY --


    if FRIDAY_AI = "take out the trash" then
        tell application "Finder"
            empty the trash
        end tell
    end if
    -- end of clear trash --

    -- QUITS EVERY APPLICATION --
    if FRIDAY_AI = "clean up" then
        say "cleaning up"
        delay 2
        say "goodbye sir"
        tell application "System Events" to set the visible of every process to true

        set white_list to {"Finder"}

        try
            tell application "Finder"
                set process_list to the name of every process whose visible is true
            end tell
            repeat with i from 1 to (number of items in process_list)
                set this_process to item i of the process_list
                if this_process is not in white_list then
                    tell application this_process
                        quit
                    end tell
                end if
            end repeat
        on error
            tell the current application to display dialog "An error has occurred!" & return & "This script will now quit" buttons {"Quit"} default button 1 with icon 0
        end try
    end if
    -------------------------------------


    -- SWITCH BETWEEN TABS TABS --
    if FRIDAY_AI = "new tab" then
        tell application "System Events"
            key code 17 using {command down}
        end tell
    end if
    --next tab --
    if FRIDAY_AI = "next tab" then
        tell application "System Events"
            key code 48 using {control down}
        end tell
    end if
    -- priveus tab --
    if FRIDAY_AI = "back" then
        tell application "System Events"
            key code 48 using {shift down, control down}
        end tell
    end if
    -- END OF SWITCH BETWEEN TABS --




    -- launches screen saver  
    if FRIDAY_AI = "take a nap" then
        try
            tell application id "com.apple.ScreenSaver.Engine" to launch
        end try
    end if
    if FRIDAY_AI = "go to sleep" then
        try
            tell application id "com.apple.ScreenSaver.Engine" to launch
        end try
    end if
    if FRIDAY_AI = "take a rest" then
        try
            tell application id "com.apple.ScreenSaver.Engine" to launch
        end try
    end if

    if FRIDAY_AI = "wake up" then
        tell application "System Events"
            key code 49
        end tell
    end if
    -- END OF SCREEN SAVER --





    if FRIDAY_AI = "give me list of running apps" then
        tell application "System Events"
            key code 53 using {command down, option down}
        end tell
    end if



    -- copy url --
    if FRIDAY_AI = "copy the link" then
        tell application "System Events"
            key code 37 using {command down}
            delay 0.5
            key code 8 using {command down}
        end tell
    end if

    -- paste url --
    if FRIDAY_AI = "paste the link" then
        tell application "System Events"
            key code 37 using {command down}
            delay 0.5
            key code 9 using {command down}
            keystroke return
        end tell
    end if




    if FRIDAY_AI = "open a folder" then
        log FRIDAY_AI
        tell application "Finder"
            activate
            make new Finder window
            set target of front window to home
        end tell
    end if

    if FRIDAY_AI = "open chrome" then
        tell application "Google Chrome"
            log FRIDAY_AI
            say "Opening Google Chrome sir"
            activate
        end tell
    end if

    (* if FRIDAY_AI = "open atom" then
    tell application "Atom"
        log FRIDAY_AI
        say "opening Atom"
        activate
    end tell
end if 

if FRIDAY_AI = "quit atom" then
    log FRIDAY_AI
    tell application "Atom" to quit
end if *)

    if FRIDAY_AI = "goodbye FRIDAY_AI" then
        log FRIDAY_AI
        say "goodbye sir"
        -- quit = exist the program completely--
        -- Stop the script- -
        exit repeat
    end if

    if FRIDAY_AI = "open youtube" then
        log FRIDAY_AI
        tell application "Google Chrome"
            activate
            open location "https://www.youtube.com/"
        end tell
    end if

    -- JUST PERSONAL COMMENTARY --
    if FRIDAY_AI = "thanks" then
        log FRIDAY_AI
        say "I am glad, I could be of help sir"
    end if

    if FRIDAY_AI = "okay thanks" then
        log FRIDAY_AI
        say "I am glad, I could be of help sir"
    end if

    if FRIDAY_AI = "thank you" then
        log FRIDAY_AI
        say "You're welcome sir"
    end if

    if FRIDAY_AI = "okay thank you" then
        log FRIDAY_AI
        say "You're welcome sir"
    end if

    if FRIDAY_AI = "good night" then
        log FRIDAY_AI
        say "Good night sir"
    end if

    if FRIDAY_AI = "night" then
        log FRIDAY_AI
        say "Good night sir"
    end if

    if FRIDAY_AI = "good morning" then
        log FRIDAY_AI
        say "Good morning sir"
    end if

    if FRIDAY_AI = "morning" then
        log FRIDAY_AI
        say "morning sir"
    end if

    -- END OF PERSONAL COMMENTARY --
    -- if an error occurs, it goes back and keep repeating
    on error
        set condition to false
    end try


end repeat

现在,上面的代码只在我在脚本编辑器上运行FRIDAY时有效,但在我将FRIDAY保存为应用程序并运行它时无效。

脚本编辑器和我的应用程序(星期五)具有可访问性,实际上星期五具有完整的磁盘可访问性。但它仍然无法发送按键。

我一直得到这个错误:

系统事件出错:星期五不允许发送击键。

如果你能帮我解决这个问题,我将非常感激,谢谢!

共有2个答案

陆飞捷
2023-03-14

您可以在无障碍设置中启用鼠标键并使用击键87。这就是我的自动点击器的工作原理。

傅越
2023-03-14

更新到macOS 10.15 Catalina时,我遇到了类似的问题。我去了系统偏好-

 类似资料:
  • 我知道这是服务器上的一个错误,在使用变量时,应该使用变量,但我已经在这里坐了2个小时,看不到错误。错误:我的代码:

  • 我编写了以下applescript来打开一个文档,同时在我的文字处理器应用程序中隐藏了一些恼人的持久工具栏。当我直接从脚本编辑器播放时,效果非常好。但当我把它变成一个应用程序,并尝试在阿尔弗雷德(而不是阿尔弗雷德2)中玩时,我得到了以下信息: 哦,我尝试了比“POSIX”更普通的路线,但都带来了相同的结果。此外,我正在运行最新版本的埃尔卡皮坦。

  • 当我在我的网站上加载页面时,我从一些PC上得到错误。 RefernotalLowedMapError 加载Google Maps JavaScript API的当前URL尚未添加到允许引用者列表中。请在谷歌云控制台检查您的API密钥的引用者设置。 参见API密钥 在我测试过的四台机器中,有三台在FireFox上工作正常。 一般来说,这意味着域不是作为引用添加到我的API控制台中,但它确实是,而且它

  • 我甚至不确定这是否可能,但这就是我想做的。 为用户提供共享某些内容的选项(例如库存项目)。这很容易处理和使用。但是,如果另一个人安装了相同的应用程序,该链接应该将他们带到我的应用程序,并将发送给他们的数据传递给他们(这样应用程序就可以向他们显示数据)。如果他们没有应用程序,它应该把他们带到应用商店,鼓励他们下载应用程序。 这可能吗?如果可能,如何做到?

  • 我试图写我的第一个每一个Android应用程序连接到我的树莓派和控制我的DSLR使用gphoto2库。我目前有一个非常粗糙的应用程序,有两个按钮,一个“连接”按钮和一个“捕获”按钮。 我可以连接到我的raspberry pi,但如果不使用以下命令从连接部分调用它,我无法将jsch会话传递到“捕获”按钮: 我希望代码使用“连接”按钮通过ssh连接,然后能够使用“捕获”按钮尽可能多次地拍照。欢迎任何问