【问题标题】:How to check if option key is pressed at startup of a mac bash Application如何检查在启动mac bash应用程序时是否按下了选项键
【发布时间】:2014-09-16 05:43:11
【问题描述】:

我有一个相对简单的问题。

我有一些用 bash 编写的启动器的 mac 应用程序。 我想通过让其他人在启动应用程序时按下“option/alt”键时访问 config.app 或 /Contents/Resources 中的其他内容,为启动器添加一个小功能。有点像 iTunes 或 iPhoto,您可以在其中访问一些选项菜单。

我不知道纯 bash 中的代码应该是什么样子;我发现了一些使用 applescript 和/或 cocoa 钩子的例子,但没有一个纯粹是在 bash 中。

类似:if 'optionKeyDown'; then open "$WORKDIR/../Resources/config.app"

或者这在纯 bash 中根本不可能?

【问题讨论】:

    标签: macos bash startup


    【解决方案1】:

    这里有一个很好的解决方案:http://lists.apple.com/archives/applescript-users/2009/Sep/msg00374.html

    取以下代码:

    #import <Carbon/Carbon.h>
    
    int main (int argc, const char * argv[]) {
        unsigned int modifiers = GetCurrentKeyModifiers();
    
        if (argc == 1)
            printf("%d\n", modifiers);
    
        else {
    
            int i, result = 1;
            for (i = 1; i < argc; ++i) {
    
                if (0 == strcmp(argv[i], "shift"))
                    result = result && (modifiers & shiftKey);
    
                else if (0 == strcmp(argv[i], "option"))
                    result = result && (modifiers & optionKey);
    
                else if (0 == strcmp(argv[i], "cmd"))
                    result = result && (modifiers & cmdKey);
    
                else if (0 == strcmp(argv[i], "control"))
                    result = result && (modifiers & controlKey);
    
                else if (0 == strcmp(argv[i], "capslock"))
                    result = result && (modifiers & alphaLock);
    
            }
            printf("%d\n", result);
        }
        return 0;
    }
    

    将其粘贴到名为的文件中,例如键.m.

    然后像这样构建一个命令行实用程序:

    $ gcc keys.m -framework Carbon -o keys
    

    keys 可执行文件放在路径中的某个位置,例如/usr/local/bin,或者甚至与您的 bash 脚本位于同一目录中,然后您可以将其称为例如keys option 并检查返回的字符串是否为“0”或“1”。

    【讨论】:

    • 谢谢。可执行文件本身似乎输出了按键的具体数字,例如选项是 2048。我将如何使用 if 语句直接在 bash 中实现它?我试过了,但似乎有些不对劲:keys="$WORKDIR/keys" if [[ 'keys option' == '1' ]]
    • @devilhunter:如果您不传递 option 参数,即仅将其称为 keys 而不是 keys option,它只会返回 2048 作为选项。从终端的命令行尝试一下,看看它是如何工作的。
    猜你喜欢
    • 2014-04-23
    • 1970-01-01
    • 1970-01-01
    • 2023-03-03
    • 2012-05-10
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多