MDM 可以在不显示窗口的情况下通过以下三种方式运行:
- 应用程序自己的命令行,与 IDM 的开关相同:从脚本、批处理文件或另一个程序将下载任务交给正在运行的应用程序。
misterdownloadmanager-cli,一个单独的命令行工具:在终端中下载文件、视频和种子,显示进度,无需应用程序。- 自动化 API:其他程序通过本地、受令牌保护的通道列出正在运行的应用程序的下载(以 JSON 格式),并暂停、开始、移除或删除它们。AI 助手通过 MDM 的 MCP 服务器使用它:请参阅AI 助手。
示例使用 Windows 路径;在 macOS 和 Linux 上,程序名称相同,不带 .exe。
应用程序的命令行
misterdownloadmanager.exe /d URL [/p folder] [/f name] [/a] [/n] [/s]
| 开关 | 功能 |
|---|---|
/d URL |
要下载的地址。 |
/p folder |
保存到此文件夹(否则为选项 → 保存到中类别的文件夹)。 |
/f name |
以此名称保存。 |
/a |
将其添加到主下载队列而不立即开始。 |
/n |
静默:不显示下载文件信息窗口,下载立即开始(或排队,带/a)。 |
/s |
开始主下载队列。 |
/exit |
保存并关闭正在运行的应用程序(安装程序在升级前使用它)。 |
一个 .torrent 文件或 magnet: 链接 |
在添加种子中打开它(Windows 在 MDM 打开种子时传递的内容)。 |
开关可以以 / 或 - 开头,不区分大小写。如果 MDM 正在运行,命令会发送给它;如果未运行,MDM 会启动并执行命令。例如:
misterdownloadmanager.exe /d https://example.com/files/report.pdf /p D:\Reports /n
misterdownloadmanager.exe /d https://example.com/big.iso /a
misterdownloadmanager.exe /s
misterdownloadmanager-cli
它随 MDM 的每次下载一起提供,位于应用程序旁边(安装程序将其放在 MDM 的文件夹中)。它可以独立工作:应用程序无需运行,除了 status 和 api。
| 命令 | 功能 |
|---|---|
get URL [-o folder\|file] [-c connections] [-H "Header: value"]... [--checksum hash] |
下载文件,最多可使用 8 个连接(-c,1 到 128),并显示进度。Ctrl+C 暂停;resume 继续。--checksum 检查完成的文件:十六进制 MD5、SHA-1、SHA-256、SHA-512 或 CRC32,可选择命名(sha256:…)。 |
resume file.mdm.json [-c connections] [-H ...] |
从旁边的 .mdm.json 文件继续暂停或中断的下载。 |
video-info URL |
页面包含哪些视频(YouTube、Vimeo 等),以及可选择的质量。 |
video-get URL [-f selector] [-o folder] |
下载视频;-f 从 video-info 获取质量选择器(b = 最佳单个文件)。 |
install-ytdlp, install-ffmpeg |
安装或更新视频所需的辅助工具:yt-dlp(对照其签名密钥检查)和 ffmpeg(Windows;在 macOS 和 Linux 上,MDM 使用系统自带的)。 |
torrent-info SOURCE |
种子的名称、文件(编号)和大小;SOURCE 是磁力链接或 .torrent 文件。 |
torrent-get SOURCE [-o folder] [--files 0,2] |
下载种子,或仅下载其部分文件。 |
torrent-create PATH -o file.torrent |
制作文件或文件夹的 .torrent(对等点通过 DHT 找到它)。 |
status |
正在运行的应用程序的下载,以 JSON 格式显示,包含其 ID(自动化 API 必须开启)。 |
pause ID..., start ID... |
在运行中的应用里,暂停正在进行的下载,或开始(恢复)已停止、排队中或失败的下载。 |
remove ID..., delete ID... |
将下载从运行中的应用列表中移除:remove 保留文件,delete 也删除文件。正在进行的下载会先暂停(pause)。 |
api on, api off |
开启或关闭运行中的应用的自动化 API。 |
misterdownloadmanager-cli help <command>显示所有选项。如果命令失败(应用未运行,应用返回错误,下载中断),则以代码 1 退出。例如:
misterdownloadmanager-cli get https://example.com/big.iso -o D:\Downloads -c 16 --checksum sha256:9f86d0…
misterdownloadmanager-cli video-get "https://www.youtube.com/watch?v=aqz-KE-bpKQ" -f "b[height=720]"
misterdownloadmanager-cli torrent-get "magnet:?xt=urn:btih:…" --files 0
用于脚本和程序的 JSON
使用 --json(在命令之前或之后),每个命令都会打印 JSON 而不是文本,每行一个对象,供脚本和 AI 代理读取:
| 命令 | 打印 |
|---|---|
get, resume |
每半秒一行 {"event": "progress", "downloaded", "size", "speed", "connections", "segments"},然后是 {"event": "done", "path", "size", "seconds"},或者在 Ctrl+C 之后是 {"event": "paused", "state"}(state 是 resume 获取的文件)。 |
video-get |
{"event": "progress", "downloaded", "size", "speed"}行,然后是 {"event": "done", "path"}。 |
torrent-get |
{"event": "progress", "phase", "downloaded", "size", "speed", "peers", "peers_seen"}行,然后是 {"event": "done", "path", "size"},或者 --seconds 的 {"event": "stopped", "downloaded", "seconds"}。 |
video-info |
{"title", "choices": [{"label", "format", "size"}]};选项的 format 是 video-get -f 所取的值。 |
torrent-info |
{"name", "info_hash", "size", "files": [{"index", "size", "path"}]}. |
torrent-create |
{"info_hash", "path"}. |
install-ytdlp, install-ffmpeg |
{"tool", "version", "path"}. |
status、pause、start、remove、delete、api |
应用的回答,已经是 JSON 格式(见下文)。 |
大小以字节为单位(null 表示未知),速度以字节每秒为单位。失败会打印 {"error": "…"} 并以代码 1 退出。例如:
misterdownloadmanager-cli --json get https://example.com/big.iso -o D:\Downloads
{"event":"progress","downloaded":4194304,"size":1073741824,"speed":52428800,"connections":8,"segments":8}
…
{"event":"done","path":"D:\\Downloads\\big.iso","size":1073741824,"seconds":20.4}
自动化 API
其他程序可以询问正在运行的应用正在下载什么,并暂停、开始、移除或删除下载。API 默认关闭;使用 misterdownloadmanager-cli api on 开启(使用 api off 关闭)。
程序如何与 MDM 通信
- MDM 运行时,它会监听
127.0.0.1的一个端口(仅限本机),并将端口和一个秘密令牌写入其数据文件夹中的ipc.json:- Windows:%APPDATA%\misterdownloadmanager\ipc.json- macOS:~/Library/Application Support/misterdownloadmanager/ipc.json- Linux:~/.local/share/misterdownloadmanager/ipc.json- 便携版:data\ipc.json在程序旁边。
令牌每次启动都会改变;只有能读取您数据文件夹的程序(您的程序)才能使用它。2. 连接到该端口并发送一行 JSON:令牌和命令的字段,例如 {"token": "<token>", "query": "list"}。3. MDM 回复一行:命令的 ok,或问题的 JSON 对象。
它能理解什么
字段(除了 token) |
回答 |
|---|---|
{"query": "list"} |
每个下载和总速度:{"downloads": [{"id", "file", "url", "path", "status", "size", "downloaded", "speed", "added", "error"}], "speed": bytes per second}。status 是 Queued、Downloading、Stopped、Complete 或 Error;size 在未知时为 null;error(失败原因)仅在下载处于 Error 状态时存在。仅当 API 开启时。 |
{"action": "pause", "ids": [3, 4]} |
根据 ID 对下载进行操作:"pause"、"start"、"remove"(文件保留)或 "delete"(文件也删除)。回答 {"done": [3], "skipped": [{"id": 4, "why": "not running"}]};正在进行的下载在移除或删除之前必须暂停。仅当 API 开启时。 |
{"api": true} / {"api": false} |
开启或关闭 API:{"api": true}。 |
{"url": "https://…", "dir": "D:\\Files", "name": "a.zip", "silent": true} |
添加下载,如同命令行中的 /d /p /f /n 所做("later": true 是 /a);ok。在 API 关闭时也一样,如同命令行。 |
{"start_queue": true} |
启动主下载队列;ok。 |
当 API 关闭时,未知的问题或操作会得到{"error": "…"}的回答(此时会显示"code": "api-off",供程序检查:错误文本可能会更改)。错误的令牌会得到denied的回答。
每个请求和回答都按字段在 JSON Schema 中描述:automation-api.schema.json(也在 https://misterdownloadmanager.com/automation-api.schema.json)。它由应用回答的代码生成,因此保持精确;程序可以根据它检查发送和读取的内容,或从中生成其类型。
示例
PowerShell (Windows):
$ep = Get-Content "$env:APPDATA\misterdownloadmanager\ipc.json" | ConvertFrom-Json
$client = New-Object Net.Sockets.TcpClient("127.0.0.1", $ep.port)
$stream = $client.GetStream()
$writer = New-Object IO.StreamWriter($stream); $reader = New-Object IO.StreamReader($stream)
$writer.WriteLine((@{ token = $ep.token; query = "list" } | ConvertTo-Json -Compress))
$writer.Flush()
$reader.ReadLine() | ConvertFrom-Json | Select-Object -ExpandProperty downloads | Format-Table file, status, downloaded, size
$client.Close()
Python:
import json, os, socket
ipc = os.path.join(os.environ["APPDATA"], "misterdownloadmanager", "ipc.json") # see above elsewhere
ep = json.load(open(ipc))
with socket.create_connection(("127.0.0.1", ep["port"])) as s:
s.sendall((json.dumps({"token": ep["token"], "query": "list"}) + "\n").encode())
answer = json.loads(s.makefile().readline())
for d in answer["downloads"]:
print(d["file"], d["status"], d["downloaded"], d["size"])
若要添加下载,请发送{"token": "…", "url": "https://example.com/a.zip", "silent": true}。
免费、开源、无广告、无试用。
下载 Mister Download Manager