小编gim*_*and的帖子

如果应用程序正在运行,如何在不启动的情况下检查AppleScript - 通过osascript实用程序

请考虑以下AppleScript:

on is_running(appName)
    tell application "System Events" to (name of processes) contains appName
end is_running

set safRunning to is_running("Safari")
if safRunning then
    tell application "Safari"
      -- Stuff I only want executed if Safari is running goes here.
    end tell
    return "Running"
else
    return "Not running"
end if
Run Code Online (Sandbox Code Playgroud)

问题:当我通过osascript命令行实用程序运行时,如果Safari未运行,它将启动并且脚本报告"正在运行".这不是我想要或期望的行为.请注意,在AppleScript编辑器中运行时,它可以按预期/预期工作.

这是一个osascript错误/已知问题吗?或者是因为我失踪的原因而在某种程度上是预期的行为?任何人都可以按需要让它工作吗?(顺便说一下,我正在运行OSX 10.7.5;我看不到如何osascript报告版本号).

如果你注释掉tell/ end telllines,它的行为就像我期望的那样:如果Safari没有运行,它就不会启动它,并打印"Not running".所以在我看来,tell是什么导致Safari被启动,但它不需要实际执行,只是出现在脚本中......?有一阵子,我想知道,如果这也许只是如何tell应该工作,但由于它并不像这样的AppleScript编辑工作,我想不是...

事实上,这是另一个具有类似行为的茜草版本:

on is_running(appName)
    tell application "System Events" to (name …
Run Code Online (Sandbox Code Playgroud)

safari macos applescript osascript

44
推荐指数
3
解决办法
5万
查看次数

不使用osascript或appscript从Python调用AppleScript?

有没有办法从python执行(并获得)AppleScript代码的结果而不使用osascript命令行实用程序或appscript(我不想使用它(我认为?)因为它不再开发/支持/推荐)?

理由:在我刚刚发布的另一个问题中,我描述了一个奇怪/不受欢迎的行为,我正在通过运行AppleScript来体验osascript.因为我实际上是从python脚本调用它,我想知道是否有办法osascript完全绕行,因为这似乎是问题所在 - 但是appscript(显而易见的选择?)现在看起来有风险......

python macos applescript

13
推荐指数
2
解决办法
1万
查看次数

如何防止双击HTML5画布外的文本选择?

(在我尝试的每个浏览器中)双击HTML5画布选择紧跟canvas元素后面的任何文本.我宁愿将点击限制在画布上.

(注:我不想完全禁用文本选择(例如像这样):如果您双击它应选择文本我只是不希望点击到从画布"泄漏".)

这可能吗?

这是一个简单的页面,演示了这个问题.

javascript css html5 canvas

8
推荐指数
1
解决办法
5881
查看次数

这个简单的Haskell函数是否已经有一个众所周知的名字?

我刚刚编写了这个函数,它只需要一对第二个值在一些monad中,并"拉出monad"来覆盖整个对.

unSndM :: Monad m => (a, m c) -> m (a, c)
unSndM (x, y) = do y' <- y
                   return (x, y')
Run Code Online (Sandbox Code Playgroud)

是否有更好的和/或更短或无点甚至标准的表达方式?

打开-XTupleSections后,我已经达到以下目的了...

unSndM' :: Monad m => (a, m c) -> m (a, c)
unSndM' (x, y) = y >>= return . (x,)
Run Code Online (Sandbox Code Playgroud)

谢谢!

monads haskell tuples

8
推荐指数
3
解决办法
1272
查看次数

如何使用非沙箱,非全局(用户?)包"cabal-dev ghci"?

我正在尝试cabal-dev一个我正在研究的项目; 该项目是一个图书馆,并且cabal-dev很好地构建了它的沙盒版本 - 但是我的部分工作流程遇到了麻烦......

我有一个脚本,scratch.hs(cabal-dev我预先)我会加载ghci进行尝试.当然,scratch.hs随着时间的推移,变化的内容取决于我正在处理的功能. scratch.hs不是库代码库的一部分,它只是我个人的刮擦空间,而我正在研究它.

现在,为了获得ghci加载沙箱的会话,我可以cabal-dev ghci,然后加载scratch.hs到那个.问题是这(通过设计,明智地)排除了我的用户包数据库,所以如果scratch.hs引用不在我的库中的包的模块build-depends(这不是不合理的 - 它毕竟不是库的一部分),那些包不是看得见,所以我得到一个错误,如:

scripts/scratch.hs:8:8:
    Could not find module `Data.Aeson.Generic':
      It is a member of the hidden package `aeson-0.3.2.11'.
      Perhaps you need to add `aeson' to the build-depends in your .cabal file.
      Use -v to see a list of the files searched for.
Failed, modules loaded: none.
Run Code Online (Sandbox Code Playgroud)

其中,在这种情况下,scratch.hs要进口Data.Aeson.Generic …

haskell ghci cabal libraries cabal-install

8
推荐指数
1
解决办法
1666
查看次数

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
查看次数