Xamarin.Mac 的发送密钥
SendKeys for Xamarin.Mac
我正在 Xamarin 中构建一个 Mac 应用程序,并且需要向其他应用程序发送击键(带有单词和短语)。 Windows.
.Net 中的 SendKeys 之类的东西
在 Xamarin 中是否有 API 与 Mac 等效的 SendKeys?
CGEventCreateKeyboardEvent
是您要找的东西,它是基于 Quartz 的,因此是低级 C
API.
Xamarin 通过 CGEvent
.ctor
在它上面有一个 shim-wrapper。创建事件后,包括任意键盘修饰符 (shift/apple/alt/....),您可以 Post
它到您选择的进程 ID。
将 Whosebug
发送到活动 process/window 的非常简单的示例。
using (var eventSource = new CGEventSource(CGEventSourceStateID.HidSystem))
{
var eventString = "Whosebug";
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
,运行 然后切换 to/activate 一个编辑器,也许 Visual Studio 为 Mac :-) 并让它输入活动编辑器面板。
仅供参考:您可能想参考 CGEvent.cs
的 Xamarin wrapper/source 代码,因为它们的命名在 ObjC 或 Swift 方面没有变化,可以从苹果翻译文档到 Xamarin.Mac
代码。
我正在 Xamarin 中构建一个 Mac 应用程序,并且需要向其他应用程序发送击键(带有单词和短语)。 Windows.
.Net 中的 SendKeys 之类的东西在 Xamarin 中是否有 API 与 Mac 等效的 SendKeys?
CGEventCreateKeyboardEvent
是您要找的东西,它是基于 Quartz 的,因此是低级 C
API.
Xamarin 通过 CGEvent
.ctor
在它上面有一个 shim-wrapper。创建事件后,包括任意键盘修饰符 (shift/apple/alt/....),您可以 Post
它到您选择的进程 ID。
将 Whosebug
发送到活动 process/window 的非常简单的示例。
using (var eventSource = new CGEventSource(CGEventSourceStateID.HidSystem))
{
var eventString = "Whosebug";
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
,运行 然后切换 to/activate 一个编辑器,也许 Visual Studio 为 Mac :-) 并让它输入活动编辑器面板。
仅供参考:您可能想参考 CGEvent.cs
的 Xamarin wrapper/source 代码,因为它们的命名在 ObjC 或 Swift 方面没有变化,可以从苹果翻译文档到 Xamarin.Mac
代码。