在 Windows 上获取 .Net Framework 中打开的窗口列表相对容易。如何在 macOS 上的 .Net Core/.Net 5 或更高版本中执行相同操作?
为了澄清这一点,我正在寻找一种方法来检索任何正在运行的应用程序/进程拥有的所有打开的窗口的列表。我没有太多 macOS 开发经验 - 我是一名 Windows 开发人员 - 但我尝试使用此答案NSApplication建议的方法。
我在 macOS Monterey (12.2) 上的 VS2022 中创建了一个 .Net 6.0 控制台应用程序,添加了对 和 的引用,Xamarin.Mac如下libxammac.dylib所述-描述了在 Xamarin 而不是 .Net 中执行此操作,但我没有看到任何其他选项来创建控制台应用。用简单的代码:
static void Main(string[] args)
{
NSApplication.Init();
}
Run Code Online (Sandbox Code Playgroud)
我得到输出
Xamarin.Mac:dlopen错误:dlsym(RTLD_DEFAULT,mono_get_runtime_build_info):找不到符号
我不知道这意味着什么。我什至不确定这种方法有什么优点。
有谁知道是否可以从 .Net Core/6.0 应用程序使用 NSApplication,如果可以,NSApplication 是否能让我读取系统范围内打开窗口的列表?如果没有,还有其他方法可以实现这一点吗?
这仅供我自己的内部使用,它不需要在我自己的环境之外以任何方式便携或稳定。
我正在尝试创建一个包含 Swift 和 C 代码的静态库,并且仅公开 Swift 接口。所以C代码端理想情况下不应该暴露给外界。我似乎无法找出在不引起警告或错误的情况下执行此操作的正确方法。
为了简化起见,我尝试使用以下文件设置一个最小的 Swift+C 静态库:
测试.swift
class Test {
func test() -> CInt {
return testFromC()
}
}
Run Code Online (Sandbox Code Playgroud)
测试.c
#include "Test.h"
int testFromC(void) {
return 0xdeadbeef;
}
Run Code Online (Sandbox Code Playgroud)
测试.h
int testFromC(void);
Run Code Online (Sandbox Code Playgroud)
我想要的是一个公开 Swift 类的静态库Test,但不公开 C 函数testFromC()。不过,如果别无选择,我可以忍受它被曝光。
我尝试过的是:
添加桥接标头。这几乎可以工作,但是a)很多人说这不被支持或推荐,b)它暴露testFromC()给模块的导入者,c)在某些情况下它会抛出关于隐式导入桥接头的警告(这是事实,但是我想要的是特别不这样做)。
添加模块映射。我不知道该怎么做。网上似乎没有任何示例适合我,如果有人知道如何正确执行此操作,我很乐意看到这三个文件的示例。
添加私有模块映射 - 我认为如果我想避免暴露 C 函数,这就是我想要的,但我在这方面的成功更少。
有谁能够整理出构建这个简单示例的确切步骤吗?