.bat
、.exe
和等文件类型.vbs
允许您将文件拖放到它们上面,然后这些文件会自动作为参数传递给该文件类型。有没有办法将其设置为适用于自定义文件类型?
即,我有一个以 格式.dan
运行的文件类型。我可以注册将文件路径传递给它并将其放在上面吗?Dans.exe
Dans testFile.dan arg1 arg2 argn
.dan
答案1
实现此目的的方法是配置注册表。幸运的是,您无需管理员权限即可完成此操作。
您需要的四件事是:
- 包含用于启动文件的默认程序 ID 的扩展密钥
- 包含以下内容的 prog ID
- 打开文件的命令
- 文件拖放处理程序 - 这是实现拖放的功能
- 用户选择的文件扩展名中设置的 prog ID 的哈希值
这看起来有点像
[HKEY_CURRENT_USER\SOFTWARE\Classes\dotnetScriptFile\shell\open\command]
@="\"C:\\Users\\Dan\\Dans.exe\" \"%1\" %*"
[HKEY_CURRENT_USER\SOFTWARE\Classes\dotnetScriptFile\shellex\DropHandler]
@="{60254CA5-953B-11CF-8C96-00AA00B8708C}"
[HKEY_CURRENT_USER\SOFTWARE\Classes\.csx\OpenWithProgids]
"dansFile"=hex(0):
[HKEY_CURRENT_USER\SOFTWARE\Microsoft\Windows\CurrentVersion\Explorer\FileExts\.csx\OpenWithList]
"a"="{1AC14E77-02E7-4E5D-B744-2EB1AE5198B7}\\OpenWith.exe"
"MRUList"="ba"
"b"="dans.exe"
为了真正生成这些信息,我使用了修改后的版本聚苯乙烯可以找到这里。使用 repo 中的 PowerShell 脚本,您可以在命令提示符中运行以下命令,将密钥添加到您的注册表中。
powershell -ExecutionPolicy Bypass -command "& { . .\SFTA.ps1; Register-FTA-Command '"""%USERPROFILE%\Dans.exe""" """%%1""" %%*' '.dan' 'danFile' -Verbose }"
powershell -ExecutionPolicy Bypass -command "& { . .\RegisterDropHandler.ps1; RegisterDropHandle 'danFile' -Verbose }"
需要注意以下几点:
a
中的 hasOpenWithList
生成起来相当复杂,因此无法复制粘贴。不幸的是,这就是为什么需要 PowerShell 脚本的原因。