Kiểm tra nếu mũ khóa trong thiết bị đầu cuối


8

Có cách nào để truy vấn hệ thống để biết khóa mũ đang bật hay tắt từ dòng lệnh trong terminal.app không?


3
Sẽ không gõ một chữ cái cho bạn thấy ngay trạng thái của khóa mũ? Việc sử dụng thực tế của thông tin này là gì. Có lẽ bạn đang hỏi về vấn đề XY ?
bmike

Chính xác thì bạn đang cố đạt được điều gì? Có những tiện ích của bên thứ ba có thể cho bạn biết trạng thái của các phím bổ trợ, tuy nhiên không có gì riêng (được cài đặt theo mặc định) mà tôi biết, nhưng điều đó không có nghĩa là không có.
dùng3439894

2
Tôi đang sử dụng đèn LED để chỉ ra rằng nguồn đầu vào là tiếng Hy Lạp. Tôi muốn tắt nó chỉ khi nguồn đầu vào là tiếng Anh và khóa mũ bị tắt.
Tẩy răng

1
@Lawrence Bây giờ, đó là một thiết lập tuyệt vời. Nếu bạn muốn thêm nó vào câu hỏi - tuyệt vời. Tôi cá rằng rất nhiều người sẽ thích biết bạn đã hoàn thành việc sửa đổi đó như thế nào.
bmike

1
Tôi đã sử dụng Karabiner và busyloop / maclight từ Github.
Tẩy răng

Câu trả lời:


9

Có một mã dòng lệnh tuyệt vời được viết bởi Stefenk trên Macscripter

Mã của Stefen cho phép bạn phát hiện cmd, tùy chọn, điều khiển, dịch chuyển và khóa mũ.

Trong bài đăng của mình, anh ta cung cấp mã và mã zip tải xuống.

Bạn có thể tải xuống hoặc tự xây dựng trong Xcode bằng dự án nền tảng.

Tôi vừa thử nghiệm cả hai cách ở El Capitan và cả hai đều hoạt động.

Mã nếu bạn muốn xây dựng mã của riêng mình trong Xcode.app là:

#import <Carbon/Carbon.h>

int main(int argc, const char * argv[]) {
    @autoreleasepool {
        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;
}

---------- (cập nhật ->

Nếu bạn muốn biên dịch nó từ Terminal.app

Đặt mã vào một tệp văn bản đơn giản. Tôi chỉ sử dụng TextEdit.app và một tài liệu văn bản thuần túy.

cd vào cùng thư mục với tập tin của bạn. Đảm bảo rằng phần mở rộng là .m (.c cũng sẽ ổn)

Sau đó chạy.

gcc  -framework Carbon CheckModKeys.m -o CheckModKeys

CheckModKeys.m là tệp của bạn.

CheckModKeys là tên của ứng dụng được xuất ra.

<-)


Để phát hiện khóa, lệnh của bạn sẽ trông giống như:

/Users/UserName/MyFolder/CheckModKeys  capslock

1 hoặc 0 sẽ được trả lại.

1 cho

0 cho tắt


Tất cả các khoản tín dụng cho Stefen. Tôi chỉ nhớ anh ấy đã đăng cách này vào năm2009. Và nó vẫn hoạt động cho đến ngày hôm nay ..


Cảm ơn! Làm thế nào để tôi biên dịch này? Tôi đã thử gcc -o getmod getmod.cnhưng nó đã quay trở lại getmod.c:4:5: error: expected expression @autoreleasepool { ^ 1 error generated.
Toothrot

@Lawrence xem câu trả lời được cập nhật
markhunte

Tôi vẫn nhận được: `` Các ký hiệu không xác định cho kiến ​​trúc x86_64: "_objc_autoreleasePoolPop", được tham chiếu từ: _main trong hàm chính-93f6a5.o " x86_64 clang: error: lệnh linker không thành công với mã thoát 1 (sử dụng -v để xem lời gọi) ``
Toothrot

những gì hệ điều hành bạn làm điều này trên
markhunte

1
Trò chuyện đã biến mất và tôi cũng không thể biên dịch nó. Nơi bạn có thể biên dịch nó, @Toothrot?
Lars Nyström

2

Nếu bạn đã cài đặt XQuartz và đang chạy hoặc không bận tâm đến việc khởi chạy, bạn có thể chạy:xset -q

Keyboard Control:
  auto repeat:  on    key click percent:  0    LED mask:  00000000
  XKB indicators:
    00: Caps Lock:   off    01: Num Lock:    off    02: Shift Lock:  off
    03: Group 2:     off    04: Mouse Keys:  off    05: Scroll Lock: off

Tôi không có xsettrên El Capitan bằng tài khoản người dùng mặc định trong bash. Đây có phải là một phần của trình bao cụ thể hay thứ gì đó bạn phải cài đặt để lệnh hoạt động không?
bmike

@bmike, xsetlà một phần trong số X11đó không được cài đặt theo mặc định. Bạn có thể lấy nó ở đây: XQuartz
user3439894

3
@Mikey TK, Vấn đề IMO khi sử dụng xsetlà nó khiến XQuartz.app mở cho nó (`xset) để chạy trong Terminal. Đối với tôi đây là hành vi không mong muốn vì tôi chỉ muốn một tiện ích CLI chạy như mọi lệnh BSD khác.
dùng3439894
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.