问题标签 [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.
objective-c - 如何监控全局修饰键状态(在任何应用程序中)?
我在我的 Cocoa 项目中使用了一些 Carbon 代码来处理来自其他应用程序的全局键事件(快捷方式)。目前我已经设置了一个kEventHotKeyReleased
事件处理程序,当我的应用程序不活动时我可以成功获取热键。这会触发我的应用程序中的一些操作。
我的行为问题kEventHotKeyReleased
是:
比如说我按下 Cmd-Shift-P 组合键。只要我松开“P”键,就会触发热键事件。我需要能够在所有键都未按下时触发事件(或手动触发它) (即:Cmd 和 Shift 键也被释放)。
监视热键很容易,但我没有看到监视单个击键的情况。如果我可以监控修饰键状态,我会做生意。
关于如何做到这一点的任何提示?
提前致谢!
更新:
我尝试过使用kEventRawKeyUp
,kEventRawKeyModifiersChanged
但是kEventHotKeyReleased
虽然我以与kEventHotKeyReleased
.
该globalHotKeyHandler
方法被调用kEventHotKeyReleased
,但kEventRawKeyUp
由于某种原因我似乎无法掌握。这是我的globalHotKeyHandler
方法的样子:
是否需要打一个额外的电话或我忘记了其他什么?
注意:乍一看,似乎辅助设备的访问已被禁用,但事实并非如此。所以我很无知。
更新 2:
我对CGEventTap
Leibowitzn 提出的建议进行了一些调查,并提出了这个设置:
...和回调:
如您所见,我将kCGEventKeyUp
其用作事件点击的掩码,但不知何故我收到了鼠标按下事件???!??
更新 3:
好的,忘记这一点,我忽略了文档中说使用 CGEventMaskBit(kCGEventKeyUp) 作为这个参数的行,所以正确的调用是:
我仍然有一个问题:修饰键不会触发 kCGEventKeyUp ...
更新 4:
好吧,再次忘记这一点......我一定会在今天问他们 5 分钟后回答我自己的问题,呵呵!
要拦截修饰键,请使用kCGEventFlagsChanged
:
所以本质上我得到了键和修饰键状态检测工作,但我仍然有兴趣知道为什么 kEventRawKeyUp
不起作用......
注意:另外请注意,我在 Tiger 上进行开发的目标是尽可能多地支持新旧版本的操作系统。CGEventTap 仅 10.4+,所以我现在将使用它,但欢迎使用向后兼容的解决方案。
java - 使用 JNA 创建 CFString 对象
我正在尝试将 JNA 与 Mac OS X 一起使用。我想访问一个 Carbon 库,没有 Cocoa 等价物,所以 Rococoa 帮不了我(我认为......)
尝试调用需要 CFStringRef 作为参数的 Carbon 函数时,我被卡住了。如何从 Java 字符串创建 CFStringRef?
到目前为止,这是我的尝试:
objective-c - 在 Cocoa 中查找处理器类型是 PPC 还是 Intel 的最佳方法是什么?(我必须使用碳吗?)
我需要把它作为一个字符串在程序的其他地方使用,我不担心编译器设置。
我在CocoaDev上找到了 HowToGetHardwareAndNetworkInfo,但当我只想知道 PPC 与 Intel 时,它似乎有点紧张。
cocoa - 开始编程 Mac OS X
我正在启动一个 Mac OS X 应用程序,它将连接到我目前正在开发的一个小型网站。
这个想法是,该应用程序将在本地数据库中存储许多片段,然后尽可能与网站同步。
所以我的问题是:
碳还是可可?
SQLite 用于本地存储/另一种解决方案?
是否有任何像样的免费文本编辑器控件,带有基本语法突出显示以嵌入到应用程序中?
cocoa - Cocoa 中的全局鼠标移动事件
有没有办法在 Cocoa 中注册全局鼠标移动事件?我能够使用 Carbon's 注册活动InstallEventHandler()
,但更喜欢 Cocoa 等价物。我已经查找了NSNotificationCenter
活动,但似乎没有任何公共活动名称(有私人活动名称吗?)
或者,有没有办法NSTrackingArea
用于具有clearColor
背景的视图?
该应用程序仅是雪豹。
objective-c - 使用 Cocoa 或 Carbon 在屏幕上查找单词的框架(位置和大小)
这是一个艰难的:
我需要能够在屏幕上找到一个单词的位置和大小(它的框架)(它的第一次出现就足够了,从那里我应该能够得到下一个)。
例如,我希望能够检测(但不限于)Word、Excel 和 PowerPoint for Mac 以及 Safari 等中的单词位置。
解决方案应该尽可能快;我应该能够每秒找到至少 5-6 个单词并尽可能少地使用 CPU 时间。
到目前为止,这是我的想法:
- 窗口屏幕截图/图形上下文中的 OCR(任何适用于 Mac OS X 10.4 且可用于商业产品的优秀开源框架?)。Evernote 非常擅长识别图像中的单词。我不知道它是使用定制的内部引擎还是开源/商业引擎,但如果这是一个“有效”的解决方案,那将是我想要使用的引擎。理想情况下,我会在活动应用程序的窗口中检测到单词的框架(如何获取另一个应用程序的框架?)。
- 在 Quartz 的文本绘制上获得某种“钩子”,并在绘制时截取单词的位置(乍一看似乎不太可行!)。
- AppleScript,但这在很大程度上取决于应用程序提供的 API(我认为您无法从我所看到的 Word 文档中获取单词的坐标)而且速度很慢。
- ...没有想法...
我的目标是根据包含段落文本的字符串以正确的顺序获取段落中所有单词的框架。
提前感谢您的任何提示!
macos - 在 Mac os x Snow Leopard 上编译 Bochs
是否有人能够在雪豹下编译 Bochs 模拟器。Leopard 对我来说工作得很好,但是在 Snow Leopard 下我遇到了很多与 Carbon 库相关的问题......
好的,需要更多信息。
- 我在 shell 上用 make 编译;bochs 源附带的标准构建过程
- 我成功地能够针对 10.5 SDK 进行编译。不幸的是,它没有在雪豹下运行……总是崩溃
- 然后我从 SnowLeopard CD 中安装了最新的 XCode,并针对 10.6 SDK 进行了编译;只改变 isysroot 标志以指向 10.6 而不是 10.5 现在编译器无法找到一些碳标头...(-framework Carbon 作为参数包含在 g++ 中)
这里的错误......在为 bochs 编译基于碳的 gui 时失败:
... 更多未声明的 xxx 错误
在此先感谢 Mac
objective-c - 可可中的碳崩溃:NSAutoreleasePool 释放后的 EXC_BAD_ACCESS
我正在使用 Bindings 为 Photoshop CS3 插件开发 Cocoa 用户界面。(Cocoa 中的 Carbon,因为 PS 是 Carbon 应用程序)EXC_BAD_ACCESS
当我关闭我的模态NSWindow
和NSAutoreleasePool
发布时出现错误。
我相信它与我在 nib 文件中的绑定和控制视图有关,因为当我从 nib 的复选框和单选按钮中删除绑定时,窗口可以无限次关闭而不会崩溃。
我现在已经花了几个小时在 Instruments 上试图找出哪个对象可能会提前释放(或双重释放)并且找不到它。
NSAutoreleasePool
现在我的想法是,在一段时间内使用 Cocoa Bindings运行模式窗口时,我可能会遗漏一些东西。就像在关闭窗口以“完成”所有绑定以防止它们将消息发送到已释放对象之前我应该做的事情一样。
这是我正在做的一个基本代码示例:
模态窗口通过调用关闭:
这是一个堆栈跟踪:
打开 NSZombieEnabled 并没有出现任何双重释放的对象(尽管 Photoshop 本身有 1 个)
关闭所有绑定可以消除任何崩溃。
有任何想法吗?
api - 在运行时获取指向 Carbon API 的 proc 指针
我有一个 Mac 应用程序,由于我无法控制的各种原因,我必须针对 Mac OS 10.4 SDK 构建它。鉴于我的应用程序的最低操作系统版本为 10.5。(我知道,我知道......但我不能提供比上述更多的细节来证明为什么会这样。)
在 Mac OS 10.5 SDK 中有一个 API,FSMatchAliasBulk
我在 10.4 SDK 中找不到一个好的等价物。知道我将在 Mac OS >= 10.5 上运行,我如何才能FSMatchAliasBulk
在运行时访问?
objective-c - 控制 OSX 窗口
我正在尝试从我的应用程序控制外国 OSX 应用程序的窗口。我想 1. 移动屏幕上的窗口 2. 调整屏幕上的窗口大小 3. 更改应用程序当前活动的窗口 4. 获取当前活动的窗口。
(而且我想通过 ObjC/C/C++ api 来做到这一点)。
考虑到我有要控制的窗口的 CGWindowID,我应该寻找哪些 API 调用?也就是说,我希望找到具有以下签名的函数:MoveWindow(CGWindowID winId, int x, int y)
, ResizeWindow(CGWindowID winId, int width, int height)
, Activatewindow(CGWindowID winId)
, CGWindowID GetCurrentlyActivatedWindow()
.
对于 3,我已经在使用SetFrontProcess
将一个进程拉到前面,但这并不能让我选择一个进程的特定窗口,如果它有多个。