Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/cocoa/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
MAC OS-如何捕获按下的三个键-Xamarin.MAC?_Xamarin_Cocoa_Xamarin.mac - Fatal编程技术网

MAC OS-如何捕获按下的三个键-Xamarin.MAC?

MAC OS-如何捕获按下的三个键-Xamarin.MAC?,xamarin,cocoa,xamarin.mac,Xamarin,Cocoa,Xamarin.mac,我正在创建一个MacOS应用程序,我必须捕获与shift+a+感叹号键相同的三个按键 我将此方法放在AppDelegate.cs中 NSEvent.AddLocalMonitorForEventsMatchingMask(NSEventMask.KeyUp | NSEventMask.FlagsChanged , FlagsChanged); 我收到钥匙了 private static NSEvent FlagsChanged(NSEvent keyEvent) {

我正在创建一个MacOS应用程序,我必须捕获与shift+a+感叹号键相同的三个按键

我将此方法放在AppDelegate.cs中

NSEvent.AddLocalMonitorForEventsMatchingMask(NSEventMask.KeyUp | NSEventMask.FlagsChanged , FlagsChanged);
我收到钥匙了

private static NSEvent FlagsChanged(NSEvent keyEvent)
    {

        var key = (NSKey)keyEvent.KeyCode;

        if (!(keyEvent.Window?.Identifier is null))
        {
            if (key.Equals(NSKey.Escape))
                return (keyEvent);


            var especialKeysPressed = KeyConverterHelper.ConvertFlagsToString(keyEvent.ModifierFlags);
            var keyPressed = KeyConverterHelper.ConvertVirtualKeyToKeyPressed(keyEvent.KeyCode);

            if (key.Equals(NSKey.Command) ||
                key.Equals(NSKey.Shift) ||
                key.Equals(NSKey.Control) ||
                key.Equals(NSKey.Return) ||
                key.Equals(NSKey.Tab) ||
                key.Equals(NSKey.Option) && keyPressed != KeyPressed.None)
            {
                return (keyEvent);
            }

            var chars = keyEvent.Characters;

            if (keyPressed == KeyPressed.None)
                return (keyEvent);

        
         //todo: GET THE KEYS PRESSED WHERE (SHIFT + A + Exclamation ) for example

        }

        return (keyEvent);
    }

一个
NSEvent
只携带一个非NSEventModifier键,您可以为该单个键事件同时捕获多个修饰符。您必须转到较低级别的API。有石英级别的事件)但请注意,应用程序需要根访问才能捕获低级别的自来水流。有
IOKit
可以查看。。。就我个人而言,我从来没有看过macOS本机键盘是否启用了完全多扫描功能,如果启用了第三方键盘,是否通过IOKit HID驱动程序支持它们。一个
NSEvent
只携带一个非NSEventModifier键,您可以为该单键事件同时捕获多个修改器。您必须转到较低级别的API。有石英级别的事件)但请注意,应用程序需要根访问才能捕获低级别的自来水流。有
IOKit
可以查看。。。就我个人而言,我从来没有看过macOS本机键盘是否支持完全多扫描,如果第三方键盘支持,是否通过IOKit HID驱动程序支持。