如何控制我想让程序一次暂停和同步一个程序的实例,这样它们就不会相互干扰,但是我如何暂停、恢复或检查状态。
我浏览了 dropbox api,看起来你主要可以做的是上传、下载等,但我如何才能真正控制 Dropbox 实例或制作一个程序来自己同步呢?
我可以用 Python 或 C++ 做到这一点
Dropbox API 是您从自己的客户端与服务交互的方式,而不是您自动化他们的桌面客户端应用程序(集成到 Finder/Explorer/等的东西)的方式。
编写自己的客户端来替换他们的客户端可能并非不可能,甚至可能编写一个与他们的客户端共存的客户端(您可以将他们的客户端永久设置为“暂停同步”,而您的客户端只会处理同步方面的事情......虽然你会失去本地存储更改时自动触发同步的好处,而是必须轮询更改或设置并行文件系统监视)。由于 API 是围绕 Web 服务构建的,因此 C++ 对于该语言来说是一个非常糟糕的选择,尤其是因为 Python 有预先构建的包装器。
但无论如何,我很确定这不是你想要做的。您想要的只是控制普通桌面客户端,并告诉它何时暂停或恢复同步,对吗?
Web API(以及包装它的 SDK)不可能帮助您。您必须使用适合您平台的工具来自动化客户端应用程序。而且,由于客户端没有自动化控制界面,因此您必须通过自动化 GUI 来实现。
Mac OS X 有一种通过系统事件 UI 脚本执行此操作的高级方法,您可以通过 PythonScriptingBridge
或appscript
或 C++ 访问它……好吧,不要这样做。Windows 只有一种较低级别的方法来执行此操作,WM_*
即手动合成消息,您可以通过 Pythonpywin32
或 C++ 通过本机 Win32 API 来完成。
但是,无论哪种方式,都会很痛苦。例如,最简单的 Pythonappscript
解决方案可能看起来像这样(未经测试):
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
模块(open
在 Mac 上使用命令,shell=True
在 Windows 上使用)。
同时,请记住,现代版本的 OS X 和 Windows 不会让应用程序随意控制彼此。在 OS X 上,您必须在“系统偏好设置”的“辅助功能”窗格中“启用辅助设备的访问权限”;在 Windows 上……它随着每个新版本的变化而变化,我没有跟上。