c# - 使用 C# 的 MacOs 事件窗口标题

标签 c# macos mono

所以我有一个在 Mac 上运行的使用 Mono 和 Gtk+2 的 C# 应用程序 有没有办法获取事件应用程序窗口标题?

https://stackoverflow.com/a/37368813/3794943说我需要 CGWindowListCopyWindowInfo (我已经有了他们的配方的其余部分,如进程标识符、最前面的应用程序等)。

我可以从哪里获取CGWindowListCopyWindowInfo或类似的内容?或者在 mac os 上使用 mono 时是否有其他方法来获取事件窗口标题?

最佳答案

好的,终于在这里找到了:https://forums.xamarin.com/discussion/comment/95429/#Comment_95429

首先,您像这样导入该函数:

[DllImport(@"/System/Library/Frameworks/QuartzCore.framework/QuartzCore")]
static extern IntPtr CGWindowListCopyWindowInfo(CGWindowListOption option, uint relativeToWindow);

然后你这样调用它:

    string result = null;
    IntPtr windowInfo = CGWindowListCopyWindowInfo(CGWindowListOption.OnScreenOnly, 0);
    NSArray values = (MonoMac.Foundation.NSArray)Runtime.GetNSObject(windowInfo);

    for (ulong i = 0, len = values.Count; i < len; i++)
    {
        NSObject window = Runtime.GetNSObject(values.ValueAt(i));

        NSString key = new NSString("kCGWindowOwnerPID");
        NSNumber value = (MonoMac.Foundation.NSNumber)window.ValueForKey(key);
        // and so on
    }

附注必须使用 NuGet 添加 MonoMac 包

关于c# - 使用 C# 的 MacOs 事件窗口标题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52441936/

相关文章:

c# - WPF - 如何从按钮处理程序确定列表框中当前项目的索引

c# - 如何处理修改后的实体记录

macos - Jenkins - FaSTLane 找不到 gem faSTLane

xcode - 实现 NSService 方法

c# - 在 MonoDevelop 中学习 C# 有什么缺点吗?

.net - Mono .NET Windows.Forms 是用什么 GUI 框架实现的?

c# - 我有一个带有动画 gif 的图片框的问题,它不是移动的,由 c# 代码

c# - 亚马逊API订单履行Feed不更新订单数据

当 select 报告为可写时,非阻塞 fd 的 write() 可以返回 EAGAIN 吗?

C#(单声道): Restarting process on program failure