问题标签 [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 投票
3 回答
391 浏览

macos - Macintosh C 创建导航窗口以选择应用程序

我正在为 mac 编写一个 C 程序,我需要允许用户选择一个应用程序来发送一个苹果事件。我可以创建一个导航窗口,使用NavCreateChooseFileDialog(),但我不能让它启用任何 .app 文件。如果我使用 限制类型NavDialogSetFilterTypeIdentifiers,它将只允许我选择文件夹名称中没有 .app 的应用程序,例如 MS Office。其他一切都是灰色的。

有任何想法吗?

0 投票
4 回答
651 浏览

c++ - 有没有办法以编程方式在 osx 上隐藏碳应用程序?

我有一个碳 C++ 应用程序,我想以编程方式执行与我的应用程序的应用程序菜单中可用的 Command-H 等效(隐藏应用程序)。我已经探索了 TransitionWindow 和 HideWindow 的 carbon API,虽然它们可以隐藏我的窗口,但它们并不相当于 Command-H。我临时查看了需要创建 AppleEvent 的 AppleEvent 参考,但我没有看到用于隐藏应用程序的参考。有什么想法吗?

0 投票
2 回答
839 浏览

c++ - 将 CGImageRef 放在剪贴板上

我正在尝试将 CGImageRef 复制到剪贴板粘贴板。我发现一个函数声称它应该通过从(零大小)创建一个目标,将图像添加到目标,完成,然后将引用粘贴到剪贴板中来做到这一点。

但是它不起作用,所以有两个问题:

  1. 这是解决这个问题的正确方法吗?(即,只有一个小错误,还是我做错了?)

  2. 我应该选择什么类型的目的地?来源有它作为TIFF,但word似乎不知道如何处理,我将其更改为PICT,这至少给了我“粘贴”选项,但后来说它太大了......

代码:

0 投票
4 回答
1555 浏览

cocoa - 如何判断“系统偏好设置”中是否打开了旁白?

有没有办法,最好向后兼容 Mac OS X 10.3,来判断系统偏好设置中是否激活了“旁白”?

0 投票
1 回答
2241 浏览

events - 事件点击:使用 CGEventPost、kCGSessionEventTap、kCGAnnotatedSessionEventTap、CGEventTapPostEvent 改变结果

从事件水龙头发布事件时,我遇到了一个棘手的问题。我在 kCGHIDEventTap 上点击 NSSystemDefined,然后用一个新事件替换该事件。我遇到的问题是,根据我发布事件的方式,它只能被某些应用程序看到。我的测试应用程序是 Opera、Firefox、Quicksilver 和 Xcode。以下是我在事件点击回调中尝试的不同技术以及结果。我期待每个应用程序采取行动(“正确响应”);“系统哔”表示没有任何东西绑定到那个键的系统声音。

  1. 创建一个新事件,并从回调中返回它。Opera:无响应/系统提示音,Firefox:无响应/系统提示音,Quicksilver:正确响应,Xcode:无响应/系统提示音

  2. 创建一个新事件,使用 CGEventPost 发布到 kCGSessionEventTap,返回 null。Opera:无响应/系统提示音,Firefox:无响应/系统提示音,Quicksilver:正确响应,Xcode:无响应/系统提示音

  3. 创建一个新事件,使用 CGEventPost 发布到 kCGAnnotatedSessionEventTap,返回 null。Opera:正确响应,Firefox:正确响应,Quicksilver:无响应/系统哔声,Xcode:无响应/系统哔声

  4. 创建一个新事件,使用 CGEventTapPostEvent 发布,返回 null。Opera:无响应/系统提示音,Firefox:无响应/系统提示音,Quicksilver:正确响应,Xcode:无响应/系统提示音

  5. 创建一个新事件,使用 CGEventPost 发布到 kCGSessionEventTap,并返回新事件。Opera:无响应/系统提示音,Firefox:无响应/系统提示音,Quicksilver:正确响应,Xcode:无响应/系统提示音

  6. 创建一个新事件,使用 CGEventPost 发布到 kCGAnnotatedSessionEventTap,并返回新事件。Opera:正确响应和系统哔声,Firefox:正确响应和系统哔声,Quicksilver:正确响应和系统哔声,Xcode:无响应/双系统哔声

  7. 创建一个新事件,使用 CGEventTapPostEvent 发布,并返回新事件。Opera:无响应/系统提示音,Firefox:无响应/系统提示音,Quicksilver:正确响应,Xcode:无响应/系统提示音

(6) 是最好的,但用户抱怨正确响应时额外的系统蜂鸣声,我猜这是来自事件的双重发布。我不确定其他组合可以尝试,或者在哪里寻找。任何人都可以提供任何指导吗?有没有什么方法可以同时从我的回调中返回事件并发布到带注释的水龙头而不做两者?

很抱歉这个冗长的问题;我一直在做很多实验。

提前致谢


更新:这是我用来创建事件点击的代码:

0 投票
2 回答
709 浏览

c++ - OS X 上 Carbon OpenGL 应用程序的字体

我正在尝试将文本渲染添加到我正在为 OS X 开发的 Carbon OpenGL 应用程序中。

由于现在不推荐使用 aglUseFont,我正在寻找另一种添加文本以及能够查询字形属性(即宽度、高度、间距等)的方法

到目前为止,我已经调查了 CoreText 和 ATSUI,但都没有太多运气。

请帮我!!

谢谢!

0 投票
2 回答
660 浏览

c++ - 如何在 OSX 上的 Carbon 文本字段中设置文本?

我正在尝试使用 Carbon API 设置文本字段的文本,如下所示:

我使用的是 XCode 的 C++ 代码模板,因此 GetWindowRef() 是对预定义 TWindow 类的调用。OSErr 返回值给了我 noErr,但我的文本字段只包含垃圾。我是否将文本字段的属性设置为 Unicode 并不重要。

任何想法这里有什么问题?

0 投票
1 回答
483 浏览

c - OSX 中 Carbon C 应用程序的异常包装器

如何在 OSX Carbon 应用程序中有效地捕获和处理来自 C 的分段错误?

背景:我正在制作一个 OSX Carbon 应用程序。我必须从第三方调用库函数。由于线程问题,函数偶尔会崩溃,通常是因为它从一个线程更新自身,并且当我从另一个线程查询它时,它有一些内部过时的指针或句柄。该功能对我来说是一个黑匣子。我希望能够调用该函数,但能够“捕获”它是否崩溃并提供替代返回。在 Windows 中,我可以使用简单的 Visual C 和 Intel C 编译器的 __try{} 和 __except。

我正在尝试为 OSX 制作相同类型的崩溃捕捉器。我在一个非常大的应用程序上使用纯 C。我每秒调用该函数数百万次,因此效率也非常重要。(令人印象深刻的是,Windows __try() 开销非常小!)

这是我尝试过的:

1) C++ 异常。我不确定 C++ 异常是否会捕获 segfault 崩溃。我的应用程序目前是 C。我可以尝试包装器和#ifdefs 使其成为 C++,但这对应用程序来说是很多工作,而且我认为 C++ 异常不会导致崩溃。

2) 信号 + setjump + longjmp。我认为这会起作用......这就是它的设计目的。但是我设置了我的 SEGV 错误处理程序 [事实上我为每个信号都设置了它!] 并且在崩溃期间它从未被调用过。我可以在调用 raise(SEGV) 时手动测试(并成功)。但崩溃似乎并没有真正调用它。我的想法是 CFM 应用程序无法访问完整的 BSD 信号,只有一个子集,并且 Mach 应用程序对于 Real Thing 是必需的。

3) MPSetExceptionHandler。没有很好的记录。我试图设置一个处理程序。它编译并运行,但没有发现段错误。

0 投票
9 回答
9757 浏览

macos - 如何检测 OS X 应用程序是否已经启动

通常,OS X 上的应用程序包只能启动一次,但是通过简单地复制包,相同的应用程序可以启动两次。检测和阻止这种可能性的最佳策略是什么?

在 Windows 上,这种效果可以简单地通过应用程序在启动时创建命名资源来实现,然后如果无法创建命名资源则退出,这表明另一个进程正在运行,并且已经创建了相同的资源。当应用程序退出时,这些资源会在 Windows 上以可靠的方式释放。

我在研究这个问题时看到的问题是,OS X 上的 API 在文件系统中保持状态,从而使 Windows 上使用的策略不可靠,即在不正确退出后延迟文件可能错误地表明应用程序已经在运行。

我可以用来在 OS X 上实现相同效果的 API 是:posix、carbon 和 boost。

想法?

0 投票
2 回答
1922 浏览

macos - 是否有任何 API 可以在 Mac OSX 中打开 DXVA

我在 MAC OSX 中写了一个基于 Carbon 的视频播放应用程序,有没有 API 可以打开显卡支持的 DXVA 功能?它是否支持 QuickTime SDK 或 Carbon API?