我正在用Xamarin构建一个Mac应用程序,并且需要将击键(带有单词和短语)发送到其他应用程序。类似于Windows上的SendKeys in .Net。
在SendKeys中是否存在与Mac等效的API?
发布于 2018-06-14 22:35:51
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 :-),然后让它键入活动编辑器面板。
FYI:您可能需要参考CGEvent.cs的Xamarin包装器/源代码,因为它们的命名在从苹果文档到Xamarin.Mac代码的转换方面并不是不同的ObjC或Swift友好。
https://stackoverflow.com/questions/50864506
复制相似问题