【问题标题】:SendKeys for Xamarin.MacXamarin.Mac 的 SendKeys
【发布时间】:2018-06-14 19:22:44
【问题描述】:

我正在 Xamarin 中构建一个 Mac 应用程序,并且需要将击键(带有单词和短语)发送到其他应用程序。类似于 Windows 上 .Net 中的 SendKeys。

Xamarin 中是否有适用于 Mac 的 SendKeys 等效 API?

【问题讨论】:

    标签: xamarin sendkeys xamarin.mac


    【解决方案1】:

    CGEventCreateKeyboardEvent 是您正在寻找的,它是基于 Quartz 的,因此是一个低级的 C API。

    Xamarin 通过CGEvent .ctor 有一个垫片包装器。创建事件后,包括任意键盘修饰符(shift/apple/alt/....),您可以将其Post 设置为您选择的进程 ID。

    stackoverflow 发送到活动进程/窗口的快速示例。

    using (var eventSource = new CGEventSource(CGEventSourceStateID.HidSystem))
    {
        var eventString = "StackOverflow";
        foreach (var eventChar in eventString)
        {
            // ? my most favorite Enum.Parse line ever written ?
            var key = (ushort)(NSKey)Enum.Parse(typeof(NSKey), eventChar.ToString().ToUpper());
    
            using (var keyEvent = new CGEvent(eventSource, key, true))
            {
                CGEvent.Post(keyEvent, CGEventTapLocation.HID);
            }
        }
    }
    

    注意:要查看它的实际效果,请在其前面放置一个Task.Delay,运行它,然后切换到/激活一个编辑器,可能是 Visual Studio for Mac :-) 并让它输入到活动的编辑器面板中。

    仅供参考:您可能需要参考 CGEvent.cs 的 Xamarin 包装器/源代码,因为它们的命名在将 Apple 文档转换为 Xamarin.Mac 代码方面与 ObjC 或 Swift 并不友好。

    回复:xamarin-macios/src/CoreGraphics/CGEvent.cs

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-09-01
      相关资源
      最近更新 更多