所以我有一个在Mac上运行的使用Mono和Gtk + 2的C#应用程序 有什么方法可以获取活动的应用程序窗口标题?
https://stackoverflow.com/a/37368813/3794943说,我需要CGWindowListCopyWindowInfo(我已经有了其余的配方,例如进程标识符,最前面的应用程序等)。
我从哪里可以获得 CGWindowListCopyWindowInfo 或类似的东西?还是在Mac OS上使用Mono时还有其他方法来获得活动窗口标题吗?
答案 0 :(得分:0)
好吧,终于在这里找到了它: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
}
P.S。必须使用NuGet添加MonoMac软件包