SendKeys for Xamarin.Mac

时间:2018-06-14 19:22:45

标签: xamarin sendkeys xamarin.mac

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

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

1 个答案:

答案 0 :(得分:2)

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