如果调用CGWindowListCopyWindowInfo(),则返回的CFDictionaryRef包含许多键和值.其中一个是kCGWindowSharingState,它有三个可能的值:
Window Sharing Constants
Specifies whether and how windows are shared between applications.
enum {
kCGWindowSharingNone = 0,
kCGWindowSharingReadOnly = 1,
kCGWindowSharingReadWrite = 2
};
Run Code Online (Sandbox Code Playgroud)
我系统上的几乎所有窗口都是kCGWindowSharingReadOnly,SonOfGrab屏幕截图示例程序避免尝试捕获kCGWindowSharingNone窗口,但我找不到这些状态用于什么的良好描述.
一个简单的测试似乎表明,OS X附带的几个应用程序确实有设置为kCGWindowSharingNone的窗口,特别是Notes和iBooks.据我所知,通过快速测试,将窗口设置为kCGWindowSharingNone实际上并不会阻止CGWindowListCreateImage()捕获该窗口的图像.我找不到将kCGWindowSharingReadWrite设置为共享模式的窗口.
所有这些都在文档中的某处解释过,我只是错过了它,或者它只是更难以记录的Core Graphics功能?是否有充分的理由不尝试捕获kCGWindowSharingNone窗口,如果我尝试这样做,我将来会为自己设置麻烦吗?
进一步调查显示,当Cocoa应用程序调用时
[NSWindow setSharingType:]
Run Code Online (Sandbox Code Playgroud)
这会在窗口上设置kCGWindowSharingStateNone,并阻止它被CGWindowListCreateImage()捕获.还有一些其他窗口设置了kCGWindowSharingStateNone,但可以成功捕获 - 特别是,iBooks会创建一个这样的窗口.
这可能是iBooks中的一个错误,或者是它调用的任何API(因为它不会调用NSWindow API).
有人可以指点我在解析包含语法错误的代码的技术,或者缺少必要的标点符号吗?
我正在处理的应用程序是一个IDE,我们希望提供诸如"跳转到定义",自动完成和重构功能之类的功能,而不需要在调用函数时源语法正确. .
我见过的大多数解析器代码似乎都是基于"早期失败"的原则,而不是专注于错误恢复或解析部分完整的代码.