如何在C++访问 Apple Events "openFile" 活动?

How can I access the Apple Events "openFile" event in C++?

本文关键字:openFile 活动 Events Apple C++ 访问      更新时间:2023-10-16

我有兴趣用c++为Mac OS X编写一个小实用程序,用于读取,解析,保存(重写)写文件。我不需要任何GUI、菜单或窗口。

    在XCode中我需要用什么类型的项目模板开始?
  1. 我如何访问传入的文件?(它与Apple Events openFile一起传递,对吗?)

我做过一点c++,但没有在Mac上做过。链接很受欢迎,代码示例更受欢迎。

您打算如何向应用程序传递文件?

如果是通过命令行,那么您将使用命令行工具模板并访问命令行参数,就像您在任何POSIX平台(argcargv)上一样。

如果你想用Finder传递文件到你的应用程序,比如说,通过将文件放到应用程序图标上,那么你将使用Cocoa应用程序模板。

Info。plist文件包含应用程序配置和支持的文档类型,类似于Windows上的注册表。

  1. 配置Info。通过项目设置的"信息"选项卡(它是XCode文件导航器中最顶部的文件)。点击右下角的"添加"按钮,然后选择"添加文档类型",添加您的申请将接受的文档类型。要接受所有文档,将文档名称设置为All,并将扩展名设置为*。更多信息在这里。

  2. 在Info中添加LSUIElement键。plist,并将其值设置为YES,以指示您的应用程序没有UI。这个键在XCode中也显示为"Application is agent"。

  3. 在主菜单中。你可以删除默认存在的窗口和字体管理器对象,因为你不需要它们。

  4. 重命名AppDelegate。. m文件到AppDelegate。mm,以便它被编译为objective - c++。

  5. applicationDidFinishLaunching:委托方法中,添加[NSApp terminate:nil];,使你的应用程序在完成工作后立即退出。

在AppDelegate.mm中添加如下方法:

- (BOOL)application:(NSApplication*)app openFile:(NSString *)filename
{
    NSLog(@"Opening file %@", filename);
    char* cFilename = [filename UTF8String];    
    // Your C++ code goes here
    return YES;
}

就是这样。剩下的就是c++代码了。你可以添加任何c++代码到AppDelegate。你想要的。例如:

#include <string>
#include <iostream>
#include "MyCppFileProcessor.h"
- (BOOL)application:(NSApplication*)app openFile:(NSString *)filename
{
    std::string cFilename([filename UTF8String]);
    std::cout << "Processing file: " << cFilename << std::endl;
    MyCppFileProcessor fileProcessor;
    fileProcessor.processFile(cFilename);
    return YES;
}

当你将一个文档放到Finder中的应用程序图标上时,此代码将运行。

1)使用命令行工具模板。这个模板有几个选项。您可以从菜单中选择c++。

2)据我所知,IOstream将工作得很好。此外,在main()函数中有一个参数形参,您可以从这些参数中获得文件名。

http://www.cplusplus.com/reference/iostream/