objective-c - 如何以编程方式知道文件/应用程序是否包含 Mac 上的某些滚轮权限

标签 objective-c macos cocoa

我想知道某些应用程序在 Mac 上是否包含滚轮权限。正如人们在第一张图片存在滚轮权限中看到的那样,但在第二张图片中没有滚轮权限。我想写方法

-(BOOL)isWheelPresent :(NSString *)path

任何人都可以告诉我如何做到这一点吗? (使用 Cocoa 和 Objective-c)

  1. iTune.app

enter image description here

2.iPhoto.app

enter image description here

最佳答案

通常,您应该使用 NSFileManager 提供的方法来检查当前用户是否可读或可写文件。类(class)。但是,如果您确实需要知道 wheel 是否组拥有该文件,您可以使用 C 函数 stat 检查和getgrgid来自sys/stat.hgrp.h 。下面是一个示例 Objective-C 类,它将 C 代码包装在方法后面,以及一个以 0 if wheel 退出的简单程序。拥有该文件,如果不拥有该文件则为 1:

#import <Foundation/Foundation.h>
#include <grp.h>
#include <string.h>
#include <sys/stat.h>

@interface FileOwnerManager : NSObject
- (BOOL)isWheelPresent:(NSString *)path;
@end

@implementation FileOwnerManager

- (BOOL)isWheelPresent:(NSString *)path
{
    struct stat f_stat;
    int res = stat([path UTF8String], &f_stat);
    if (res != 0) {
        NSLog(@"Error!");
        return NO;
    }
    struct group *group = getgrgid(f_stat.st_gid);
    NSLog(@"%@: %s", path, group->gr_name);
    return strcmp(group->gr_name, "wheel") == 0;
}

@end

int main(int argc, char **argv)
{
    BOOL res = NO;
    @autoreleasepool {
        FileOwnerManager *fom = [[FileOwnerManager alloc] init];
        res = [fom isWheelPresent:[NSString stringWithUTF8String:argv[1]]];
        [fom release];
    }
    return res ? 0 : 1;
}

关于objective-c - 如何以编程方式知道文件/应用程序是否包含 Mac 上的某些滚轮权限,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31130390/

相关文章:

iphone - 如何在新的 iTunes Connect UI 中上传应用程序更新

ios - 完全隐藏搜索栏

ios - 当 UITableViewCell 在两个单元格背景颜色之间设置动画时,为什么我不能点击它?

macos - 在Mac上安装ige-mac-integration时出错

cocoa - NSPanel 父窗口 float 在全屏 NSView 之上

objective-c - 如何隐藏窗口

objective-c - Objective-C 中的鼠标坐标?

ios - 如何重写父类(super class)私有(private)属性的getter方法

macos - 查找不等于模式的文件

c# - 如何在 Mac 上使用 Process.Start() 或等效的 Mono 并传入参数