Dropbox API 是您从您自己的 客户端与服务交互的方式,而不是您自动化他们的 桌面客户端应用程序(集成到 Finder/探险家/等)。
编写您自己的客户端来替换他们的客户端可能并非不可能,或者甚至可能编写一个与他们的客户端共存的客户端(您可以将他们的客户端永久设置为“暂停同步”,而您的客户端只会处理同步事情的一面......虽然你会失去在本地存储更改时自动触发同步的好处,而是必须轮询更改或设置并行文件系统监视)。由于 API 是围绕 Web 服务构建的,因此 C++ 对于该语言来说是一个非常糟糕的选择,尤其是因为 Python 有预先构建的包装器。
但无论如何,我很确定这不是你想要做的。您想要的只是控制普通桌面客户端,并告诉它何时暂停或恢复同步,对吗?
Web API(以及包装它的 SDK)不可能帮助您。您必须使用适合您平台的工具来自动化客户端应用程序。而且,由于客户端没有自动化控制界面,你必须通过自动化 GUI 来实现。
Mac OS X 有一种通过系统事件 UI 脚本执行此操作的高级方法,您可以通过ScriptingBridge 或appscript 从 Python 访问它,或者通过 C++... Windows 只有一种较低级别的方法来执行此操作,即手动合成 WM_* 消息,您可以通过 pywin32 从 Python 或通过本机 Win32 API 从 C++ 完成。
但是,无论哪种方式,这都会很痛苦。例如,最简单的 Python appscript 解决方案可能看起来像这样(未经测试):
sysev = appscript.app('System Events')
dropbox = sysev.application_processes['Dropbox']
menu = dropbox.menu_bars[1].menu_bar_items[-1].menus[1]
item = menu.items['Pause Syncing']
item.click()
Windows 等价物会更加混乱,包括发送 WM_* 消息以获取菜单、拆分结构等。
使用更高级别的 GUI 自动化工具要容易得多。 Mac OS X 内置了 Automator。创建一个工作流程,单击记录,下拉 Dropbox 菜单,单击“暂停同步”项,单击停止,就完成了。 Actions 可能是最相似的 windows 工具,但还有很多其他选项,比如 AutoIt,可能会更好。
那么,在创建了 Automator 动作或 AutoIt 脚本之后,与 Python 或 C++ 相比,如何触发?好吧,你可能不需要。您已经有了一些可以双击或从 shell 运行的东西。如果你想用 Python 封装它,你可以,例如,通过 subprocess 模块(在 Mac 上使用 open 命令,在 Windows 上使用 shell=True)。
同时,请记住,现代版本的 OS X 和 Windows 不允许应用随意控制彼此。在 OS X 上,您必须在“系统偏好设置”的“辅助功能”窗格中“启用辅助设备的访问权限”;在 Windows 上……它随着每个新版本的变化而变化,我没有跟上。