我正在尝试编写一个Mac OS菜单额外的应用程序,当用户按下某个热键时,该应用程序显示包含当前活动应用程序菜单栏项的上下文菜单.显示上下文菜单我可以做得很好,但我似乎无法获得当前活动的应用程序的菜单栏项.目前我正在使用[[[NSWorkspace sharedWorkspace] runningApplications] filteredArrayUsingPredicate:]获取活动应用程序的名称,但NSRunningApplication似乎包含了很少的其他信息.有什么方法可以从外部应用程序获取有关应用程序菜单的信息吗?
更新:
使用ScriptingBridge框架似乎工作得相当好,如果你很高兴使用AppleScript:
SystemEventsApplication* sevApp = [SBApplication applicationWithBundleIdentifier:@"com.apple.systemevents"];
SystemEventsProcess* proc = [[sevApp applicationProcesses] objectWithName:appName];
for (SystemEventsMenuBar* menuBar in proc.menuBars) {
for (SystemEventsMenuBarItem* menuBaritem in menuBar.menuBarItems) {
NSLog(@"%@", menuBaritem.name);
}
}
Run Code Online (Sandbox Code Playgroud)
将打印出应用程序菜单栏中提供的菜单列表.还没有找到获取上下文菜单的方法,所以我暂不会回答这个问题...
我有一个C库,我试图用Cython包装.我正在创建的一个类包含一个指向C结构的指针.我想编写一个复制构造函数,它将创建指向同一个C结构的第二个Python对象,但是我遇到了麻烦,因为指针无法转换为python对象.
这是我想要的草图:
cdef class StructName:
cdef c_libname.StructName* __structname
def __cinit__(self, other = None):
if not other:
self.__structname = c_libname.constructStructName()
elif type(other) is StructName:
self.__structname = other.__structname
Run Code Online (Sandbox Code Playgroud)
真正的问题是最后一行 - 似乎Cython无法从python方法中访问cdef字段.我尝试过编写一个存取方法,结果相同.在这种情况下如何创建复制构造函数?
我正在尝试用 Objective-C 编写一个 Wavefront OBJ 文件查看器,它能够从文件加载网格/材质/着色器。我已经为着色器和着色器程序创建了类,并且我正在尝试创建一个 OpenGL 着色器程序对象作为着色器程序类的 init 方法的一部分:
- (id)initWithVertexShader:(NSString *)vshader FragmentShader:(NSString *)fshader {
self = [super init];
if (self) {
SRShader* shaders[2] = {
[[SRShader alloc] initWithFilename:vshader Type:GL_VERTEX_SHADER Source:nil],
[[SRShader alloc] initWithFilename:fshader Type:GL_FRAGMENT_SHADER Source:nil]
};
program = glCreateProgram();
for (int i = 0; i < 2; i++) {
SRShader* s = shaders[i];
NSError* e = nil;
s.source = [NSString stringWithContentsOfFile:s.filename encoding:NSUTF8StringEncoding error:&e];
if (!e) {
NSLog(@"Failed to read shader file: %@\n", s.filename);
exit(-1);
}
GLuint shader = …Run Code Online (Sandbox Code Playgroud)