如何抑制MacOS / Quartz / pynput中的功能键?

发布于 2025-02-03 22:15:07 字数 444 浏览 4 评论 0原文

pynput文档中给出的示例是:

def darwin_intercept(event_type, event):
    import Quartz
    length, chars = Quartz.CGEventKeyboardGetUnicodeString(
        event, 100, None, None)
    if length > 0 and chars == 'x':
        # Suppress x
        return None
    else:
        return event

但是如何抑制函数键,例如,控制密钥(谁没有Unicode等效)? 我尝试简单地替换chars =='x' by virtualKey == 0x37,但获得了一个错误消息...

The example given in the pynput documentation is:

def darwin_intercept(event_type, event):
    import Quartz
    length, chars = Quartz.CGEventKeyboardGetUnicodeString(
        event, 100, None, None)
    if length > 0 and chars == 'x':
        # Suppress x
        return None
    else:
        return event

But how to suppress function keys, e.g., the control key (who doesn't have an Unicode equivalent)?
I tried simply replacing chars == 'x' by virtualKey == 0x37, but got an error message...

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(1

云朵有点甜 2025-02-10 22:15:07

这似乎可以解决问题:

from pynput import keyboard
from pynput.keyboard import Key, Controller
# --- initialise ---
#global Hotkeys
cmd = False
# ======
def on_press(key):
    global cmd
    global memory
    try:
        print('alphanumeric key {0} pressed'.format(
            key.char))
        # ...   
    except AttributeError:
        print('special key {0} pressed'.format(
            key))
        if key == Key.cmd:
            cmd = True
            # (modifier) # Windows key / MacOS Command key  
        # ...
# ======
def on_release(key):
    global cmd
    try:
        print('{0} released'.format(
            key))
        if key == keyboard.Key.esc:                             # <--- stop program
            # Stop listener
            return False
        elif key == Key.cmd:                                    # Win up # Apple up
            cmd = False
            # (modifier) # Windows key / MacOS Command key
    except AttributeError:
        print('on_release special key {0} released'.format(
            key)) # Am Ende löschen
        # nothing
# ======
def darwin_intercept(event_type, event):                        # pynput-internal definition
    import Quartz
    global cmd
    length, chars = Quartz.CGEventKeyboardGetUnicodeString(
        event, 100, None, None)
    if cmd == True and length > 0 and chars == 'q':             # Apple down + q
        return None
    else:
        return event
# ======
# Collect events until released
with keyboard.Listener(
        on_press=on_press,
        on_release=on_release,
        # Add suppressing events (darwin_intercept):
        darwin_intercept=darwin_intercept) as listener:
    listener.join()

This seems to do the trick:

from pynput import keyboard
from pynput.keyboard import Key, Controller
# --- initialise ---
#global Hotkeys
cmd = False
# ======
def on_press(key):
    global cmd
    global memory
    try:
        print('alphanumeric key {0} pressed'.format(
            key.char))
        # ...   
    except AttributeError:
        print('special key {0} pressed'.format(
            key))
        if key == Key.cmd:
            cmd = True
            # (modifier) # Windows key / MacOS Command key  
        # ...
# ======
def on_release(key):
    global cmd
    try:
        print('{0} released'.format(
            key))
        if key == keyboard.Key.esc:                             # <--- stop program
            # Stop listener
            return False
        elif key == Key.cmd:                                    # Win up # Apple up
            cmd = False
            # (modifier) # Windows key / MacOS Command key
    except AttributeError:
        print('on_release special key {0} released'.format(
            key)) # Am Ende löschen
        # nothing
# ======
def darwin_intercept(event_type, event):                        # pynput-internal definition
    import Quartz
    global cmd
    length, chars = Quartz.CGEventKeyboardGetUnicodeString(
        event, 100, None, None)
    if cmd == True and length > 0 and chars == 'q':             # Apple down + q
        return None
    else:
        return event
# ======
# Collect events until released
with keyboard.Listener(
        on_press=on_press,
        on_release=on_release,
        # Add suppressing events (darwin_intercept):
        darwin_intercept=darwin_intercept) as listener:
    listener.join()
~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文