Làm cách nào để tắt khóa đẩy trên bàn phím mac?


3

Tôi có một Bàn phím Das cho Mac bao gồm một phím đẩy ở bên phải của phím xóa lùi và ở bên trái của phím home. Tôi không bao giờ cần sử dụng nó và nó vô tình nhấn nó liên tục khiến khay CD của tôi mở. Nó thực sự phiền phức.

Có cách nào để vô hiệu hóa chìa khóa này?

Nếu có một cách để giữ chức năng khác của khóa được truy cập bằng cách giữ các bộ sửa đổi khác nhau (ví dụ: điều khiển ca đẩy ra để hiển thị để ngủ) đó sẽ là tuyệt vời. Tuy nhiên, nếu chỉ có phương pháp vô hiệu hóa hoàn toàn khóa, tôi sẽ ổn với điều đó.

Lưu ý rằng tôi đang sử dụng Sierra nên sử dụng Karabiner không phải là một lựa chọn.


2
Bạn đang sử dụng Mac Pro? Tôi không thể nghĩ ra một khay CD Mac khác hỗ trợ Sierra.
JMY1000

@ JMY1000 Quả thực tôi là
GuyGizmo

Rút chìa khóa ra?
theonlygusti

Câu trả lời:


3

Tôi thực sự đã có Karabiner Elements hoạt động tuyệt vời với Sierra trên Mac Pro cũ của tôi - cho đến khi có bản cập nhật hệ điều hành gần đây. Tôi đã gán phím F6 cho "đẩy" và điều đó đã vô hiệu hóa khóa "đẩy" thông thường. Karabiner cũng có một bản cập nhật gần đây (một vài ngày trước) dường như mặc định tất cả các mod bàn phím của tôi trở lại tiêu chuẩn của Apple. Đã quay lại phiên bản cũ hơn trong bản sao lưu và nó không khắc phục được sự cố. Bây giờ, tôi vẫn gán F6 cho "Eject" (và nó hoạt động tốt ở đó), nhưng nút "Eject" không còn bị vô hiệu hóa. Đã tìm kiếm rất nhiều trên mạng và có vẻ như Apple đã cho chúng tôi vào cái này ngay bây giờ. Tại thời điểm này, tôi có thể thử tạo một nắp phù hợp với góc đó, vì vậy khi tôi vô tình nhấn phím, nó không hoạt động.

Đây là giải pháp lo-tech của tôi. enter image description here



0

Trong khi bạn nói "Lưu ý rằng tôi đang sử dụng Sierra nên sử dụng Karabiner không phải là một tùy chọn." bạn sẽ thấy rằng Yếu tố Karabiner , chạy ở Sierra, sẽ làm những gì bạn muốn.


2
Thật không may, trang GitHub của họ có ghi chú sau: "Karabiner-Elements không thể sửa đổi khóa đẩy do giới hạn của API macOS." Vì vậy, có vẻ như nó không thể làm những gì tôi muốn. :-(
GuyGizmo

0

Tôi đã kết thúc việc viết một ứng dụng tùy chỉnh để lọc ra các lần nhấn phím. Nó sử dụng một vòi sự kiện để làm như vậy. Đây là một ví dụ hoạt động tối thiểu minh họa cách thực hiện:

#include <stdio.h>
#include <ApplicationServices/ApplicationServices.h>

static CFMachPortRef machPortRef = NULL;

CGEventRef specialKeyEventTapCallback(CGEventTapProxy proxy, CGEventType type, CGEventRef event, void *refcon)
{
    if (type == kCGEventTapDisabledByTimeout) {
        CGEventTapEnable(machPortRef, true);
        return event;
    }

    uint64_t subtype = CGEventGetIntegerValueField(event, 99);

    if (subtype == 8) {
        static CGEventFlags allModifiers = (kCGEventFlagMaskShift | kCGEventFlagMaskControl | kCGEventFlagMaskAlternate | kCGEventFlagMaskCommand);
        int keycode = ((CGEventGetIntegerValueField(event, 149) & 0xFFFF0000) >> 16);
        CGEventFlags flags = CGEventGetFlags(event);

        if (keycode == NX_KEYTYPE_EJECT && (flags & allModifiers) == 0) {
            // filter eject key when no modifiers are pressed
            return NULL;
        }
    }

    return event;
}

int main()
{
    CFRunLoopSourceRef eventSrc = NULL;

    machPortRef =  CGEventTapCreate(kCGHIDEventTap, kCGHeadInsertEventTap, kCGEventTapOptionDefault, CGEventMaskBit(NX_SYSDEFINED), (CGEventTapCallBack)specialKeyEventTapCallback, NULL);

    if (machPortRef == NULL) {
        fprintf(stderr, "CGEventTapCreate failed!\n");
        return 1;
    }

    eventSrc = CFMachPortCreateRunLoopSource(NULL, machPortRef, 0);
    CFRunLoopAddSource(CFRunLoopGetCurrent(), eventSrc, kCFRunLoopDefaultMode);

    CFRunLoopRun();

    CFRelease(machPortRef);
    CFRelease(eventSrc);
}
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.