【问题标题】:Bounce the Downloads stack dock icon using C++ (without using ObjectiveC)使用 C++ 弹跳下载堆栈停靠图标(不使用 Objective C)
【发布时间】:2010-01-18 13:47:48
【问题描述】:

Firefox 目前不像 Safari、Chrome 和 Camino 那样 bounce the Downloads box in the dock when a download is finished

如果 Firefox 是用 Objective C 编写的,您可以很容易地添加执行此操作所需的 one line of Objective C code。然而,事实并非如此。有没有办法从 C++ 调用这个 Cocoa 函数,以便可以将它添加到 Firefox 中以造福所有 Mac 用户?

【问题讨论】:

    标签: cocoa macos firefox


    【解决方案1】:

    我的建议是,我必须为我正在从事的项目执行此操作,您可以拥有一些 obj-c++ 文件,它们提供 C/C++ api 并在内部使用 obj-c 代码来触发文档闪烁。

    基本上你创建了一个标准的 C/C++ 头文件。在代码方面,您将文件设为 .m 或 .mm 文件。

    这将让您将问题中的 obj-c 一行直接写入 C/C++ 函数,并且由于头文件是纯 C/C++ 的,因此对于非 .mm 文件不会是编译器错误在项目中。

    当然,这假设使用能说两种语言的编译器(如 GCC)进行编译。

    这种方法的一个简单且(经过测试的)示例是:

    TriggerBounce.h

    void TriggerBounce(char * filepath);
    

    TriggerBounce.m

    #import <Cocoa/Cocoa.h>
    
    void TriggerBounce(char * filepath) {
        NSString *pathToFile = [NSString stringWithCString:filepath encoding:NSUTF8StringEncoding];
        [[NSDistributedNotificationCenter defaultCenter] postNotificationName:@"com.apple.DownloadFileFinished" object:pathToFile]; 
    }
    

    【讨论】:

      【解决方案2】:

      您可以使用 Carbon API 的 CFNotificationCenterPostNotification。 碳是纯C。

      文档和代码示例here

      【讨论】:

      • 我认为 Carbon 正在走渡渡鸟的道路。事实上,使用 Carbon 会将您锁定在 64 位之外。不过,我注意到您提到了 CFNotificationCenterPostNotification,它看起来像一个核心基础类。那可能没问题。
      • 是的,它不是碳。 Core Foundation、Core Services 和其他一些可以通过 Carbon 框架访问的框架在 64 位版本中可用。事实上,甚至 Carbon 的某些部分(例如 Carbon 事件管理器)也支持 64 位。
      猜你喜欢
      • 2012-01-10
      • 2012-10-14
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-05-06
      • 1970-01-01
      相关资源
      最近更新 更多