我正在尝试编写一个应用程序,将特定的USB字符串描述符(USB大容量存储设备)与其卷或bsd名称相关联.
因此代码遍历所有连接的USB设备,获取字符串描述符并从其中一个中提取信息.我想获得这些USB设备的卷名.我找不到合适的API来做到这一点.我试过这样做:
DASessionRef session = DASessionCreate(kCFAllocatorDefault);
DADiskRef disk_ref = DADiskCreateFromIOMedia(kCFAllocatorDefault,
session,
usb_device_ref);
const char* name = DADiskGetBSDName(disk_ref);
Run Code Online (Sandbox Code Playgroud)
但是DADiskCreateFromIOMedia函数返回nil,我假设我传递的usb_device_ref与函数期望的io_service_t不兼容.
那么如何获取USB设备的卷名?
我可以使用位置ID来做到这一点吗?
谢谢阅读.-L
FOO_Result result = FOO_SUCCESS;
mach_port_t master_port;
kern_return_t k_result;
io_iterator_t iterator = 0;
io_service_t usb_device_ref;
CFMutableDictionaryRef matching_dictionary = NULL;
// first create a master_port
if (FOO_FAILED(k_result = IOMasterPort(MACH_PORT_NULL, &master_port))) {
fprintf(stderr, "could not create master port, err = %d\n", k_result);
goto cleanup;
}
if ((matching_dictionary = IOServiceMatching(kIOUSBDeviceClassName)) == NULL)
{
fprintf(stderr, "could not create matching dictionary, err = %d\n", k_result); …Run Code Online (Sandbox Code Playgroud) 我想在我正在编写的应用程序中使用Archive Utility.app来压缩一个或多个文件.
做(从命令行):
/System/Library/CoreServices/Archive\ Utility.app/Contents/MacOS/Archive\ Utility file_to_zip
Run Code Online (Sandbox Code Playgroud)
是否有效,但它创建了一个cpgz文件,我可以忍受(尽管.zip会更好)但主要问题是我无法将2个文件压缩成1个档案:
/System/Library/CoreServices/Archive\ Utility.app/Contents/MacOS/Archive\ Utility ~/foo/a.txt ~/bar/b.txt
Run Code Online (Sandbox Code Playgroud)
上面的命令将创建2个档案(〜/ foo/a.txt.cpgz和〜/ bar/b.txt.cpgz).
我不能让它做我想做的事:
open -a /System/Library/CoreServices/Archive\ Utility.app --args xxxx
Run Code Online (Sandbox Code Playgroud)
我宁愿不使用zip命令,因为要压缩的文件相当大,所以内置进度条很好.
或者,我可以通过编程方式使用Archive Utility吗?
谢谢.
我希望有一个NSTextField(或NSSearchField)的默认值,并在用户单击它时删除此默认值,并在文本视图失去焦点并且文本字段为空时进行设置.像这样:

这听起来像我应该扩展,NSSearchField但我想知道是否有一个更容易的解决方案.
我成功注册了热键; 它的处理程序将我的应用程序窗口置于最前面:[NSApp activateIgnoringOtherApps:YES]; (至少应该这样).
当我的应用程序窗口不在前面时,我有预期的行为.
但是当我关闭窗口(单击红色x)或最小化它(单击黄色-)时它不起作用.我仍然看到日志,因此调用处理程序.
有任何想法吗?
谢谢.
-L