小编ala*_*dai的帖子

Objective-C:从外部应用程序获取菜单信息

我正在尝试编写一个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)

将打印出应用程序菜单栏中提供的菜单列表.还没有找到获取上下文菜单的方法,所以我暂不会回答这个问题...

这也很有用:http://robnapier.net/blog/scripting-bridge-265

macos cocoa objective-c menubar scripting-bridge

6
推荐指数
1
解决办法
896
查看次数

Cython - 复制构造函数

我有一个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字段.我尝试过编写一个存取方法,结果相同.在这种情况下如何创建复制构造函数?

cython

4
推荐指数
1
解决办法
674
查看次数

glCreateProgram 导致段错误?

我正在尝试用 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)

opengl macos objective-c automatic-ref-counting

1
推荐指数
1
解决办法
1876
查看次数