问题标签 [macos-carbon]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
1 回答
1108 浏览

objective-c - 我可以使此代码与 Shortcut Recorder 一起使用吗?

我有这个代码(下面)来创建一个可定制的热键。

但是代码是通过弹出框使热键可自定义的,我将如何制作它以便它可以与快捷记录器 按钮或字段一起使用。在他们的示例应用程序中(来自编写代码的人),他们使用了一个通过操作连接到控制器的弹出框来选择热键和连接到 NSUserDefaultsController 的文本字段来显示它。我如何让快捷方式记录器字段/按钮选择热键,因为目前我将操作和用户默认控制器连接到它,但它不起作用(即使热键工作)。需要如何更改代码以使其工作或使其执行应做的事情?

0 投票
1 回答
244 浏览

c - 在 OS X 上列出和查找窗口

我正在尝试使用 carbon api 在 OS X 上做一些事情,但我在谷歌或 Apple 开发网站上找不到任何我想要的东西。

理想情况下,我想找到一个在屏幕上某个位置找到窗口的功能。好像也有类似的功能,但是一个说只查找当前进程中的窗口,另一个说是定位鼠标点击的目的地。

假设没有办法做到这一点,我将如何遍历屏幕上的所有窗口。查找有关 OS X 窗口管理器如何工作的信息非常困难,因为它没有名称,并且任何 google 搜索都被操作系统 Windows 所压倒。它有嵌套窗口吗?什么是窗口列表?只有一个吗?每个过程都有一个吗?你可以任意创造很多吗?我暂时猜测 GetWindowList 是我要找的,但是没有示例,并且文档都是模糊的“获取下一个窗口”,没有任何抽象或示例代码的解释。

如果有人可以解释我如何做到这一点,或者窗口管理器如何看待事物,或者指向我可以阅读的地方,那就太好了!

0 投票
3 回答
12507 浏览

cocoa - 解决在 64 位转换中从不同大小的整数转换为指针的错误

我正在努力将PTHotKeyLib修改为 64 位友好,但我在代码中遇到了一个问题,我不确定如何解决。在 PTHotKeyCenter 中, registerHotKey 方法创建一个 EventHotKeyID 实例,然后将 PTHotKey 对象填充到 id 属性中。原代码用了很长。我根据 Apple 的 64 位编程指南将其转换为 NSInteger。

当用户触发热键时,它会调用 sendCarbonEvent: 方法,该方法将尝试将 PTHotKey 实例从 EventHotKeyID 中拉出。它在 32 位域中工作,但是在针对 64 位进行编译时,它会给出“从不同大小的整数转换为指针”的警告

从 x86_64 切换回 i386 会删除警告,并且所有内容都已编译并正常运行。在 x86_64 下它会导致崩溃,我不确定如何解决这个问题。关于如何解决它的任何建议?

0 投票
2 回答
499 浏览

c - 什么时候需要 -framework 和 -I/System/.../Example.framework/Headers/?

我正在尝试从命令行编译一个使用 carbon 的 JNI 库。

如果我不 -I/System/.../JavaVM.Framework/Headers/,它找不到任何 jni 类型,并给出错误。

如果我只是 -I/System/.../FlatCarbon.framework/Headers 而不是“-framework Carbon”,它编译得很好,但是链接器给出了一个关于未定义符号的错误。

如果我使用 -framework Carbon 编译,它可以正常工作,但事实证明 -I.../FlatCarbon.framework/Headers/ 完全没有必要!无论有没有它,它的工作原理都是一样的。现在,到目前为止,一切都是有道理的,除了以下内容:

如果 I -framework JavaVM,但包含头目录,则找不到 jni 类型!

这似乎完全不一致。对于一个框架,-I 是必需的,-framework 是可选的,对于另一个框架,-framework 是必需的,-I 是可选的。这是怎么回事?有人可以解释 -framework 选项的工作原理吗?JavaVM 是一个特例吗?

出于好奇,我部分发布了这个问题,但也是为了帮助其他正在寻找类似解决方案的人,因为至少在我的 google-fu 中,我无法从命令行找到任何解释框架的内容,或者如何在命令行上使用 gcc 链接到系统库。gcc --help 甚至没有记录 -framework,我能找到的一切都是关于使用 xcode 开发的。

0 投票
1 回答
958 浏览

objective-c - 在 Objective-C/Carbon 中使用 AFP

我正在开发一个需要将文件传输到 AFP 卷的应用程序——理想情况下,它不会在 OSX 上挂载该卷,因为它确实没有必要。

查看 AFP 协议的内容,我发现了一个旧的 Carbon 头文件“afpDatastream.h”。这曾经在“AppleShareClientCore”框架中,但它不再存在(无论如何在 Leopard 上)。

假设这已被弃用,有谁知道它被替换为什么?

如果没有,您是否知道在 Objective-C/Carbon 中透明地使用 AFP 卷的最佳方法(不安装在 OSX 中)?

0 投票
6 回答
1221 浏览

c++ - 将单例实例限制为线程

什么是实现单例的好方法,该单例将仅限于寻找其实例的线程?是否有线程 ID 或我可以用来执行此操作的东西?我正在使用 Carbon 线程 API,但稍后也必须在 Windows 和纯 POSIX 上实现它,因此任何技术都值得赞赏。

0 投票
1 回答
763 浏览

macos - Leopard's Finder 是通过哪个功能获取带有水印的预览图标的?

我已经看过了GetIconRefFromFileInfo()QLThumbnailImageCreate()但它们似乎与我从查找器中看到的不相似,它是一个带有水印的方形图标,例如,如果文件是 RTF,它下面有这个灰色水印,上面写着RTF 或 RTFD 或 PDF...

请帮我解决这个问题。谢谢。如果问题仍然不清楚,请随时发表评论。

0 投票
1 回答
1355 浏览

objective-c - NSString 到 FSRef 的转换不起作用

对于我的应用程序,我需要使用 Carbon 文件管理器 API 来获取文件夹的大小(NSEnumerator 很慢,并且使用带有 shell 命令的 NSTask 更糟糕)。我已经导入了 Carbon 框架,我正在使用这种方法来获取文件夹的大小:

http://www.cocoabuilder.com/archive/message/cocoa/2005/5/20/136503

它使用 FSRef 作为参数,而我的路径字符串当前是 NSString。我尝试使用它来将 NSString 转换为 FSRef:

然后我调用了文件夹大小方法:

但是,当我尝试构建时,我收到有关上述行的此错误:

错误:“fastFolderSizeAtFSRef:”的参数之一的类型不兼容

任何帮助,将不胜感激。谢谢

0 投票
3 回答
631 浏览

objective-c - Finder 和 Carbon 文件管理器的文件夹大小之间存在大小差异

我使用 Dave DeLong 的这个方法来计算使用 Carbon File Manager API 的文件夹的大小:

http://github.com/davedelong/BuildCleaner/blob/b2712242b4eea1fff0e78a08b393a417e3019c8a/NSFileManager+FileSize.m

(这是第一种方法)

我遇到的问题是某些文件夹(在我的情况下是 .app 包)没有报告正确的大小。比如DiskWarrior是8.2MB,方法报6.6MB

关于为什么会发生这种情况的任何想法?

谢谢

0 投票
5 回答
93083 浏览

c - 所有用户和组的列表

我正在尝试获取Mac OS X 10.5+ 上所有用户和所有组的列表。我怎样才能做到这一点?

例如,我机器上所有用户的列表应该返回:( _amavisd, _appowner, _appserver, _ard, _atsserver, _calendar, _carddav, _clamav, _coreaudiod, _cvmsroot, _cvs, _cyrus, _devdocs, _dovecot, _eppc, _installer, _jabber, _lda, _locationd, _lp, _mailman, _mcxalr, _mdnsresponder, _mysql, _pcastagent, _pcastserver, _postfix, _qtss, _sandbox, _screensaver, _securityagent, _serialnumberd, _softwareupdate, _spotlight, _sshd, _svn, _teamsserver, _timezone, _tokend, _trustevaluationagent, _unknown, _update_sharing, _usbmuxd, _uucp, _windowserver, _www, _xgridagent, _xgridcontroller, daemon, dave, nobody, root这是手工精心编译的)。

如何以编程方式获取该列表(以及所有组的相应列表)?我对替代(非基于 c 的)解决方案持开放态度,例如 Applescript、命令行等。


很久以后更新

TALlama 的回答促使我调查开放目录的 API,我发现这个列表可以很容易地以编程方式获取:

这将记录系统上每个用户的用户名。代入kODRecordTypeGroups将为您提供所有组的列表。

-[ODQuery resultsAllowingPartial:error:]方法是一个阻塞调用,因此您要么希望在后台线程上执行此代码,要么使用 an<ODQueryDelegate>来聚合结果。