标签: applescript

Applescript 将 Safari 选项卡拆分为新窗口

我正在尝试编写一个脚本,将当前+所有下一个选项卡拆分到一个新窗口 \xe2\x80\x94 中,这对于组织非常有用。

\n\n

完全有可能获取当前和所有下一个选项卡的 URL,创建一个新窗口并在新选项卡中加载所有这些 URL,然后关闭原始窗口 \xe2\x80\x93 中的选项卡,但这看起来非常麻烦,慢的。

\n\n

那么,有没有什么方法可以将一组 Safari 选项卡移动到新窗口,而无需实际重新加载 URL?

\n

safari macos tabs applescript

5
推荐指数
1
解决办法
632
查看次数

AppleScript:循环应用程序窗口;将每个都放在前面并触发其他应用程序中的操作?

简洁版本

我想编写一些AppleScript,它会迭代应用程序的(非最小化)窗口,并为每个应用程序将其带到前面并触发另一个应用程序BTT(将移动窗口)中的某些内容。目的是将应用程序的所有窗口移动到同一位置。移动部分已处理(由 BTT),我只需要帮助使这种情况发生在应用程序的所有窗口上。

长版

(这个问题涉及BetterTouchTool,但它并不是真正的问题 - 我认为 - 我怀疑你不需要了解任何有关 BTT 的知识来回答......)

我正在尝试编写一个 AppleScript 脚本(当我将其简化为最简单的版本时)激活一些应用程序,并循环遍历其所有窗口,为每个窗口触发 BetterTouchTool“命名触发器”。指定触发器的工作是将当前窗口移动到某个位置,但其细节并不重要。

我觉得这应该很简单,但我似乎无法找到正确的方法。我已经尝试过对它进行货物崇拜,但我没有取得任何进展(除了怀疑我需要涉及“系统事件”)......我是一名经验丰富的程序员,但我从未深入研究过 AppleScript 和发现它做事的方式相当奇怪/令人困惑。

到目前为止,我正在工作的是一个不会在窗口上循环的版本,因此它只会点击“第一个”(在某种意义上的“第一个”,这似乎是“该应用程序最近活跃的”) )。

例如,以下作品。(我已将其硬编码到 VSCode,尽管在我尝试编写的完整内容中,它会迭代应用程序名称列表以及为它们运行的​​触发器。)

on run
    if application "Visual Studio Code" is running then
        tell application "Visual Studio Code" to activate
        tell application "BetterTouchTool"
            trigger_named "Move window: monitor 4k: core"
        end tell
    end if
end run
Run Code Online (Sandbox Code Playgroud)

这样就会激活 VSCode,然后告诉 BTT 运行命名触发器以将当前窗口移动到屏幕上的某个位置。效果是最近使用的 VSCode 窗口被移动。

好的,这是一个不错的开始,但我想对所有VSCode 窗口(或者理想情况下,当前可见桌面上的所有非最小化窗口)执行此操作。

BTT 的 AppleScript 界面似乎不支持针对特定窗口 - 它只适用于任何活动的应用程序/窗口,因此我需要以某种方式激活/将窗口置于前面(?),然后调用 BTT 触发器。

我想我需要这样的东西(暂时忽略忽略最小化窗口的问题): …

macos applescript

5
推荐指数
1
解决办法
2432
查看次数

如何从 SwiftUI 视图内部运行 AppleScript?

我对基本的SwiftUI有了更多的了解,但现在我想扩展我的应用程序,为我实际做一些有关系统组件的事情。基本上,我想从我的应用程序内部运行AppleScript,在 Mac Mail 中创建签名。脚本本身非常简单:

// Generates a signature in Mac Mail
tell application "Mail"
    set newSig to make new signature with properties {name:"The Signature Name"}
    set content of newSig to "My New Signature Content"
end tell
Run Code Online (Sandbox Code Playgroud)

我创建了一个带有按钮的视图,该按钮应该执行脚本:

import SwiftUI

struct SomeView: View {

    @State var status = ""

    var body: some View {

        VStack(alignment: .center) {
            Button(action: {

                let source = """
                tell application \"Mail\"
                    set newSig to make new signature with properties {name: \"The …
Run Code Online (Sandbox Code Playgroud)

macos applescript swiftui

5
推荐指数
1
解决办法
1549
查看次数

LibreOffice:递归转换文件夹和子文件夹中的文档

我以 doc 格式存储了许多文件,这些文件只能在我的 mac 上使用 libreoffice 打开。

命令:

 ./soffice --headless --convert-to docx --outdir /home/user ~/Downloads/*.doc
Run Code Online (Sandbox Code Playgroud)

完全做了它应该做的事情:它将所有*.doc文件转换为 libreoffice*.docx文件。

我的问题是我有包含这些文件的文件夹和子文件夹。

有没有办法从起始目录搜索所有文件夹,并让“soffice”在每个文件夹中完成其工作,将新版本 ( ) 存储在找到*.docx原始版本 ( ) 的位置。*.doc

不幸的是,我不太熟悉苹果脚本或终端来完成这项工作。然而,数百个文件夹中有 8000 个 doc 文件需要更新为 docx。

感谢您的帮助。

applescript doc docx libreoffice

5
推荐指数
1
解决办法
987
查看次数

在任何应用程序中通过 Automator 以 Applescript 发送击键

我在 Automator 中设置了 Applescript 快速操作来离开 Zoom 会议。无论最前面是什么应用程序,我都想检查 Zoom 是否正在运行,如果是,则离开会议。

set appName to "Zoom.us"

if application appName is running then
    tell application id (id of application appName)
        activate
    end tell
    tell application "System Events"
        keystroke "w" using command down
        keystroke tab
        keystroke return
    end tell
end if
Run Code Online (Sandbox Code Playgroud)

有用!问题是,如果我正在参加 Zoom 会议,并且另一个应用程序位于最前面,我必须获得该应用程序的系统首选项的许可才能访问系统首选项。就像我在 Chrome 中一样,我必须允许 Chrome 发送击键。然后,Chrome 将始终有效。

我必须对每个可能的应用程序执行此操作。有没有一种方法可以在不通过大苏尔的安全措施的情况下进行按键操作?我不介意将变焦调到最前面。

applescript macos-big-sur

5
推荐指数
1
解决办法
8708
查看次数

在 macOS 上的任何应用程序中获取选定的文本

当用户按下全局快捷方式时,我试图获取选定的文本。无论当前聚焦的应用程序是 chrome、safari 还是 Microsoft Word,我的应用程序都应该读取当前选择的文本。

我正在尝试使用 AppleScript 来执行此操作,该脚本使用剪贴板进行黑客攻击。但这并不适用于所有应用程序。

func readSelectedText() {
    let script = """
    -- Back up clipboard contents:
    set savedClipboard to the clipboard

    -- Copy selected text to clipboard:
    tell application "System Events" to keystroke "c" using {command down}
    delay 1 -- Without this, the clipboard may have stale data.

    set theSelectedText to the clipboard

    delay 1 -- Without this delay, may restore clipboard before pasting.

    -- Restore clipboard:
    set the clipboard to savedClipboard

    return theSelectedText
    """

    var …
Run Code Online (Sandbox Code Playgroud)

macos applescript appkit swift

5
推荐指数
1
解决办法
1271
查看次数

如何使用Applescript应用程序包作为os x中的默认浏览器?

我的目标是使一个osx机器上点击的链接加载到启用了Apple事件的远程计算机上的safari中.为此,我正在尝试创建一个applescript应用程序,然后我在系统上创建默认浏览器.

我的Applecript看起来像这样:

on run argv
    set theurl to item 1 of argv
    set dest to "eppc://user:password@ipaddress"
    tell application "Safari" of machine dest
        activate
        open location theurl
    end tell
end run
Run Code Online (Sandbox Code Playgroud)

如果argv不是用于捕获url的合适方法,我将脚本简化为:

tell application "Safari"
    activate
    open location "http://www.google.com"
end tell
Run Code Online (Sandbox Code Playgroud)

然后我将其保存为应用程序,并告诉Safari该应用程序应该是默认浏览器,但是当我单击应用程序中的链接时,它完全忽略了我的AppleScript并在Safari中加载了url(不是我指定的url,我点击的网址).

为什么是这样 ?我是否需要为我的Applescript做一些特殊的操作才能充当浏览器?如果我通过双击它来运行我的AppleScript应用程序,它会完全按照它应该执行的操作,但如果我通过"默认浏览器"功能启动它,它根本不会运行,而是Safari接管.

如果有一些简单的事情,我做错了或不做,或者如果我完全错误的方式,请告诉我.

macos applescript

4
推荐指数
1
解决办法
1644
查看次数

有没有办法用Applescript触发Finder的"快速浏览"窗口?

我正在使用Applescript自动执行OSX Finder中的某些任务.该脚本打开一个文件夹并选择该文件夹中的第一个图像.我希望它也能打开"快速查看"窗口(就像用户按下空格键一样).

我确实找到了一种方法,可以使用qlmanage从命令行启动快速查看,但这会打开一个静态快速查看窗口,它不再与查找程序选择相关联.

代码到目前为止:

property folderPath : "/Volumes/Media/Images"

on run {}
    tell application "Finder"
        activate
            set imageFolder to folder (folderPath as POSIX file)
            set imageFile to first item of imageFolder
            select imageFile
            -- show quick look?
    end tell
end run
Run Code Online (Sandbox Code Playgroud)

macos applescript quicklook

4
推荐指数
2
解决办法
3865
查看次数

如何以编程方式将构建文件添加到Xcode4?

我一直在试图弄清楚如何以编程方式将文件添加到Xcode4项目中,看起来AppleScript将成为可行的方式,但是我遇到了"缺失值"错误.

这是我得到的代码:

tell application "Xcode"
    set theProject to first project
    set theTarget to first target of theProject
    set theBuildPhase to compile sources phase of theTarget
    tell first group of theProject
        set theFileRef to make new file reference with properties {full path:"/Users/jeff/Projects/XcodeTest/XcodeTest/MyViewController.h", name:"MyViewController.h", path:"XcodeTest/MyViewController.h", path type:group relative}
        add theFileRef to theProject
    end tell
    --tell theBuildPhase to make new build file with properties {build phase:theBuildPhase, name:"MyViewController.h", file reference:theFileRef, target:theTarget, project:theProject}
end tell
Run Code Online (Sandbox Code Playgroud)

我已经尝试了注释掉的行而不是add-command,但这也不起作用(我得到"缺失值").

'添加'错误是:

error "Xcode got an error: file reference id …
Run Code Online (Sandbox Code Playgroud)

applescript xcode4

4
推荐指数
1
解决办法
1909
查看次数

AppleScript:切割图像的一半?

是否可以使用AppleScript在一半中剪切图像并单独保存?

applescript image-manipulation cut

4
推荐指数
1
解决办法
1426
查看次数