GVKun编程网logo

Mac OS X的系统范围快捷键(mac系统快捷键大全)

8

在本文中,我们将详细介绍MacOSX的系统范围快捷键的各个方面,并为您提供关于mac系统快捷键大全的相关解答,同时,我们也将为您带来关于cocoa–如何在MacOSX下捕获/发布系统范围的键盘/鼠标事

在本文中,我们将详细介绍Mac OS X的系统范围快捷键的各个方面,并为您提供关于mac系统快捷键大全的相关解答,同时,我们也将为您带来关于cocoa – 如何在Mac OS X下捕获/发布系统范围的键盘/鼠标事件?、Idea for Mac 快捷键(快捷键选择:Mac OS X 10.5+)、Java系统范围内的键盘快捷键、Linux上的Python中的系统范围互斥的有用知识。

本文目录一览:

Mac OS X的系统范围快捷键(mac系统快捷键大全)

Mac OS X的系统范围快捷键(mac系统快捷键大全)

因此,我被要求将一些内部帮助程序移植到Mac OS X 10.7。

由于与平台相关的代码很少,因此可以很好地运行,但是一个应用程序需要系统范围的快捷功能(即RegisterHotkey功能),而且我找不到在Mac上如何实现此功能的任何文档。

该程序在Python 3.2中使用了PyQt gui。Windows的相应代码基本上是:

def register_hotkey(self):    hwnd = int(self.winId())    modifiers, key = self._get_hotkey()    user32.RegisterHotKey(hwnd, self._MESSAGE_ID, modifiers, key)

然后接收热键事件:

def winEvent(self, msg):    if msg.message == w32.WM_HOTKEY:        self.handle_hotkey()        return True, id(msg)    return False, id(msg)

注意,我不需要python变体,我可以轻松编写一个简单的c扩展名-因此也欢迎使用C / objective-c解决方案。

答案1

小编典典

我最近对quodlibet捕获多媒体密钥的扩展进行了编码(因为已经吸收到quodlibet本身中了);对于您的设置,将应用相同的过程。

我使用了QuartzCGEventTapCreate钩子和事件循环,以及Cocoa
AppKit框架来解密实现此目的的关键代码。

以下代码注册通过全局按键传递的python回调,并启动事件循环:

import Quartzfrom AppKit import NSKeyUp, NSSystemDefined, NSEvent# Set up a tap, with type of tap, location, options and event masktap = Quartz.CGEventTapCreate(    Quartz.kCGSessionEventTap, # Session level is enough for our needs    Quartz.kCGHeadInsertEventTap, # Insert wherever, we do not filter    Quartz.kCGEventTapOptionListenOnly, # Listening is enough    Quartz.CGEventMaskBit(NSSystemDefined), # NSSystemDefined for media keys    keyboardTapCallback,    None)runLoopSource = Quartz.CFMachPortCreateRunLoopSource(None, tap, 0)Quartz.CFRunLoopAddSource(    Quartz.CFRunLoopGetCurrent(),    runLoopSource,    Quartz.kCFRunLoopDefaultMode)# Enable the tapQuartz.CGEventTapEnable(tap, True)# and run! This won''t return until we exit or are terminated.Quartz.CFRunLoopRun()

我只为系统定义的按键(媒体按键)定义了一个抽头。您必须指定其他事件掩码(CGEventMaskBit具有一种或多种事件类型);例如Quartz.CGEventMaskBit(Quartz.kCGEventKeyUp)按键事件。

回调应该具有以下签名(它实现CGEventTapCallBack了Quartz
API中的方法:

def keyboardTapCallback(proxy, type_, event, refcon):    # Convert the Quartz CGEvent into something more useful    keyEvent = NSEvent.eventWithCGEvent_(event)

我将Quartz事件转换为NSEvent,因为我在Mac多媒体键上可以找到的所有信息都引用了该类。

原则上,您也可以使用AppKit
API实现相同的操作,但是您的Python应用程序被视为Mac应用程序(在Dock中带有图标和所有内容可见),而我希望将其完全保留在后台。

cocoa – 如何在Mac OS X下捕获/发布系统范围的键盘/鼠标事件?

cocoa – 如何在Mac OS X下捕获/发布系统范围的键盘/鼠标事件?

对于脚本实用程序,我需要能够记录应用程序具有焦点时发生的一系列键盘和鼠标事件.第二部分是以后能够将这些事件发送到活动窗口.

我不需要担心菜单或跟踪哪个窗口接收输入的标识符.

我知道如何在Windows下执行此操作,但不知道Mac OS X.

解决方法

我要告诉你的第一件事是,如果没有用户在可访问性控制面板中启用对辅助设备的支持,则不能这样做.这是OSX内置的某种安全性.

这是我在我的一个应用程序中使用的代码snippit:

//this method calls a carbon method to attach a global event handler
- (void)attachEventHandlers
{
    //create our event type spec for the keyup
    Eventtypespec eventType;
    eventType.eventClass = kEventClassKeyboard;
    eventType.eventKind = kEventRawKeyUp;

    //create a callback for our event to fire in
    EventHandlerUPP handlerFunction = NewEventHandlerUPP(globalKeyPress);

    //install the event handler
    Osstatus err = InstallEventHandler(GetEventMonitorTarget(),handlerFunction,1,&eventType,self,NULL);

    //error checking
    if( err )
    {
        //Todo: need an alert sheet here
        NSLog(@"Error registering keyboard handler...%d",err);
    }

    //create our event type spec for the mouse events
    Eventtypespec eventTypeM;
    eventTypeM.eventClass = kEventClassMouse;
    eventTypeM.eventKind = kEventMouseUp;

    //create a callback for our event to fire in
    EventHandlerUPP handlerFunctionM = NewEventHandlerUPP(globalmousepress);

    //install the event handler
    Osstatus errM = InstallEventHandler(GetEventMonitorTarget(),handlerFunctionM,&eventTypeM,NULL);

    //error checking
    if( errM )
    {
        //Todo: need an alert sheet here
        NSLog(@"Error registering mouse handler...%d",err);
    }
}

这是我正在使用的回调方法的示例:

Osstatus globalKeyPress(EventHandlerCallRef nextHandler,EventRef theEvent,void *userData) 
{
    NSEvent *anEvent = [NSEvent eventWithEventRef:theEvent];
    NSEventType type = [anEvent type];
    WarstrokerApplication *application = (WarstrokerApplication*)userData;

    //is it a key up event?
    if( type == NSKeyUp)
    {
        //which key is it?
        switch( [anEvent keyCode] )
        {
            case NUMERIC_KEYPAD_PLUS: 
                //this is the character we are using for our toggle
                //call the handler function
                [application toggleKeypressed];
                break;

                //Comment this line back in to figure out the keykode for a particular character                
            default:
                NSLog(@"Keypressed: %d,**%@**",[anEvent keyCode],[anEvent characters]);
                break;
        }
    }

    return CallNextEventHandler(nextHandler,theEvent);
}

Idea for Mac 快捷键(快捷键选择:Mac OS X 10.5+)

Idea for Mac 快捷键(快捷键选择:Mac OS X 10.5+)

  • 删除一行
         command + delete
  • 查找
         command + f
  • 查找替换
         command + r
  • 复制一行
         command + d
  • 定位到具体的行列
         command + l
  • 查找类
         command + o
  • 查找任意文件
         command + shift + o
  • 可以在整个工程或着某个目录下面查找字符串
         command + shift + f
  • 大小写转换
         command + shift + u
  • 格式化代码
         alt + command + l
  • 回到上次编辑的地儿
        command + [
  • 重新导入引入包
         control + alt + o
 

Java系统范围内的键盘快捷键

Java系统范围内的键盘快捷键

是否有任何方法或库来获取系统范围的(全局)键盘快捷方式以在Java应用程序中执行操作?

Linux上的Python中的系统范围互斥

Linux上的Python中的系统范围互斥

有什么简单的方法可以在Linux上的Python中使用系统范围的互斥锁?“全系统”是指互斥体将由一组Python 进程使用
;这与传统互斥锁相反,传统互斥锁由同一进程中的一组 线程 使用。

编辑:我不确定Python的multiprocessing软件包是我所需要的。例如,我可以在两个不同的解释器中执行以下命令:

from multiprocessing import LockL = Lock()L.acquire()

当我在两个单独的解释器中同时执行这些命令时,我希望其中之一挂起。相反,它们都没有挂起。看来他们没有获得相同的互斥量。

答案1

小编典典

Unix的“传统”答案是使用文件锁。您可以lockf(3)用来锁定文件的各个部分,以便其他进程无法对其进行编辑。一个非常普遍的滥用是将其用作进程之间的互斥体。python等效项是fcntl.lockf。

传统上,您将锁定过程的PID写入锁定文件,以使由于持有锁定而死的进程导致的死锁是可识别和可修复的。

因为您的锁位于全局名称空间(文件系统)中,并且可用于所有进程,所以这可以满足您的所需。这种方法还具有非Python程序可以参与锁定的好处。缺点是您需要一个放置该锁文件的位置;另外,某些文件系统实际上并没有正确锁定,因此存在无提示无法实现排除的风险。你赢了一些,你输了一些。

今天关于Mac OS X的系统范围快捷键mac系统快捷键大全的介绍到此结束,谢谢您的阅读,有关cocoa – 如何在Mac OS X下捕获/发布系统范围的键盘/鼠标事件?、Idea for Mac 快捷键(快捷键选择:Mac OS X 10.5+)、Java系统范围内的键盘快捷键、Linux上的Python中的系统范围互斥等更多相关知识的信息可以在本站进行查询。

本文标签: