jjzjj

windows - FTYPE/ASSOC 优先级和从命令行添加到 OpenWithList

coder 2024-06-11 原文

(不确定这是否属于 super 用户,但这里似乎有一个 cmd.exe 标签,所以这里...)

作为背景,我正在研究一个 Firefox 附加组件(这个问题不需要 Firefox 的知识,顺便说一句,因为 Firefox 附加组件可以调用命令行。)该附加组件旨在构建不同类型的cmd.exe 的快捷方式(特别是为了我的项目 https://github.com/brettz9/webappfind,它允许文件直接从桌面打开到 Web 应用程序中)。

无论如何,我想为用户提供关联这些快捷方式的选项:

  1. 作为特定文件扩展名或文件类型的默认处理程序。
  2. 显示在应用程序的“打开方式”列表中(即使用户选择不将应用程序设置为默认处理程序)

就默认处理而言,我找到了 ftypeassoc(以及 associate)命令,但我已经阅读了该用户选择将覆盖他们的行为。有什么方法可以确保我可以从命令行获得优先权,将文件扩展名与类型和特定可执行文件相关联(直到用户再次更改它),或者如果不可能,那么至少通过 C++ 或类似的?

就打开方式列表而言:

 HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\Explorer\FileExts\<file extension>\OpenWithList

...在我的测试中(使用 exe),这个命令:

reg add HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\Explorer\FileExts\.svg\OpenWithList /v d /d D:\wamp\www\webappfind\cplusplus\WebAppFinder-view-mode-Firefox.exe

...确实导致 exe 文件出现在:

reg query HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\Explorer\FileExts\.svg\OpenWithList

...但是当我随后右键单击扩展名为“.svg”的文件时,它并没有出现。

对于这两点,我将不胜感激。

最佳答案

REGEDIT4

[HKEY_CURRENT_USER\Software\Classes\Applications\MYFOO.exe\shell\open\command]
@="\"C:\\MYFOO.exe\" \"%1\""

[HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\Explorer\FileExts\.myfoo]
"Application"="MYFOO.EXE"

[HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\Explorer\FileExts\.myfoo\OpenWithList]
"a"="MYFOO.EXE"
"MRUList"="a"

所以我开始调查是什么导致了这些文件关联。看来您必须创建一个从裸 EXE 名称到完整路径的映射,如前两行长行所示。那么您只能在 .extension 分支中使用 EXE 名称。设置 .extension 的 Application 值将立即为您提供默认应用程序。请记住,仅使用 APP.EXE,其完整路径必须如上定义。这是你的主要错误。 “%1”部分允许您自定义程序的参数,这样它就不必只是引号中打开的文档,如此处所示。反斜杠只是 Regedit 的转义字符,您可以根据需要丢弃它们。

从某种意义上说,OpenWithList 是棘手的,因为条目有字母,而只是盲写可能会覆盖用户最喜欢的一些应用程序。一种方法是将您的项目称为“z”以降低覆盖的可能性。正确的方法是枚举 key 并为您的应用程序提供第一个免费字母。 MRUList 不是必需的,尽管它应该让每个使用的字母都使用一次,并且您的字母会跳到开头。

关于用户友好性的注意事项:Explorer 将缓存这些值直到下次重新启动。确保先更新注册表并放置 exe,然后再创建文件。虽然缓存只是完全影响文件的显示和运行时,重新读取注册表,它会执行你想要的。

提示:如果您决定使用 Regedit 而不是 reg/s 参数会跳过确认消息并立即应用这些值。确保在完整路径中使用双反斜杠,如图所示。准备临时 .reg 文件时,请确保在末尾附加两个 CRLF,否则可能会导致最后一行代码被忽略。此示例以表示 ANSI 文件的 REGEDIT4 开头。如果您的应用程序路径需要支持 Unicode,则必须使用 Windows Registry Editor Version 5.00 启动文件并将其存储为 UTF16。这已经是调用 reg 的绝佳解决方案,因为您无法让 CMD.EXE 通过命令行处理特殊的 UTF 内容而不进行修改。

关于windows - FTYPE/ASSOC 优先级和从命令行添加到 OpenWithList,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21082752/

有关windows - FTYPE/ASSOC 优先级和从命令行添加到 OpenWithList的更多相关文章

  1. ruby - 在 Ruby 程序执行时阻止 Windows 7 PC 进入休眠状态 - 2

    我需要在客户计算机上运行Ruby应用程序。通常需要几天才能完成(复制大备份文件)。问题是如果启用sleep,它会中断应用程序。否则,计算机将持续运行数周,直到我下次访问为止。有什么方法可以防止执行期间休眠并让Windows在执行后休眠吗?欢迎任何疯狂的想法;-) 最佳答案 Here建议使用SetThreadExecutionStateWinAPI函数,使应用程序能够通知系统它正在使用中,从而防止系统在应用程序运行时进入休眠状态或关闭显示。像这样的东西:require'Win32API'ES_AWAYMODE_REQUIRED=0x0

  2. ruby - 在 Ruby 中编写命令行实用程序 - 2

    我想用ruby​​编写一个小的命令行实用程序并将其作为gem分发。我知道安装后,Guard、Sass和Thor等某些gem可以从命令行自行运行。为了让gem像二进制文件一样可用,我需要在我的gemspec中指定什么。 最佳答案 Gem::Specification.newdo|s|...s.executable='name_of_executable'...endhttp://docs.rubygems.org/read/chapter/20 关于ruby-在Ruby中编写命令行实用程序

  3. ruby - 在 Windows 机器上使用 Ruby 进行开发是否会适得其反? - 2

    这似乎非常适得其反,因为太多的gem会在window上破裂。我一直在处理很多mysql和ruby​​-mysqlgem问题(gem本身发生段错误,一个名为UnixSocket的类显然在Windows机器上不能正常工作,等等)。我只是在浪费时间吗?我应该转向不同的脚本语言吗? 最佳答案 我在Windows上使用Ruby的经验很少,但是当我开始使用Ruby时,我是在Windows上,我的总体印象是它不是Windows原生系统。因此,在主要使用Windows多年之后,开始使用Ruby促使我切换回原来的系统Unix,这次是Linux。Rub

  4. Vscode+Cmake配置并运行opencv环境(Windows和Ubuntu大同小异) - 2

    之前在培训新生的时候,windows环境下配置opencv环境一直教的都是网上主流的vsstudio配置属性表,但是这个似乎对新生来说难度略高(虽然个人觉得完全是他们自己的问题),加之暑假之后对cmake实在是爱不释手,且这样配置确实十分简单(其实都不需要配置),故斗胆妄言vscode下配置CV之法。其实极为简单,图比较多所以很长。如果你看此文还配不好,你应该思考一下是不是自己的问题。闲话少说,直接开始。0.CMkae简介有的人到大二了都不知道cmake是什么,我不说是谁。CMake是一个开源免费并且跨平台的构建工具,可以用简单的语句来描述所有平台的编译过程。它能够根据当前所在平台输出对应的m

  5. 深度学习部署:Windows安装pycocotools报错解决方法 - 2

    深度学习部署:Windows安装pycocotools报错解决方法1.pycocotools库的简介2.pycocotools安装的坑3.解决办法更多Ai资讯:公主号AiCharm本系列是作者在跑一些深度学习实例时,遇到的各种各样的问题及解决办法,希望能够帮助到大家。ERROR:Commanderroredoutwithexitstatus1:'D:\Anaconda3\python.exe'-u-c'importsys,setuptools,tokenize;sys.argv[0]='"'"'C:\\Users\\46653\\AppData\\Local\\Temp\\pip-instal

  6. ruby - 是否有将图像文件转换为 ASCII 艺术的命令行程序或库? - 2

    有这样的事吗?我想在Ruby程序中使用它。 最佳答案 试试这个http://csl.sublevel3.org/jp2a/此外,Imagemagick可能还有一些东西 关于ruby-是否有将图像文件转换为ASCII艺术的命令行程序或库?,我们在StackOverflow上找到一个类似的问题: https://stackoverflow.com/questions/6510445/

  7. ruby - 如何在 Ruby 中执行 Windows CLI 命令? - 2

    我在目录“C:\DocumentsandSettings\test.exe”中有一个文件,但是当我用单引号编写命令时`C:\DocumentsandSettings\test.exe(我无法在此框中显示),用于在Ruby中执行命令,我无法这样做,我收到的错误是找不到文件或目录。我尝试用“//”和“\”替换“\”,但似乎没有任何效果。我也使用过系统、IO.popen和exec命令,但所有的努力都是徒劳的。exec命令还使程序退出,这是我不想发生的。提前致谢。 最佳答案 反引号环境就像双引号,所以反斜杠用于转义。此外,Ruby会将空格解

  8. ruby - 将命令行上的变量传递给 Cucumber 测试 - 2

    我正在尝试将cucumber项目的用户名和密码置于版本控制之外。有没有办法在命令行上手动将用户名和密码等变量传递给Cucumber脚本?我的备份计划是将它们放在一个YML文件中,然后将该文件添加到gitignore,这样它们就不会被置于版本控制中。 最佳答案 所以,我看到了您对铁皮人的评论,答案是肯定的。cucumberPASSWORD=my_passwordPASSWORD被设置为环境变量,您可以通过将其引用为ENV['PASSWORD']来使用它的值。例如,browser.text_field(:id=>'pwd').setEN

  9. ruby - ruby 中的同一个程序如何接受来自用户的输入以及命令行参数 - 2

    我的ruby​​脚本从命令行参数获取某些输入。它检查是否缺少任何命令行参数,然后提示用户输入。但是我无法使用gets从用户那里获得输入。示例代码:test.rbname=""ARGV.eachdo|a|ifa.include?('-n')name=aputs"Argument:#{a}"endendifname==""puts"entername:"name=getsputsnameend运行脚本:rubytest.rbraghav-k错误结果:test.rb:6:in`gets':Nosuchfileordirectory-raghav-k(Errno::ENOENT)fromtes

  10. ruby - 如何使用 rspec stub /模拟对命令行的调用? - 2

    我正在尝试测试命令行工具的输出。如何使用rspec来“伪造”命令行调用?执行以下操作不起作用:it"shouldcallthecommandlineandreturn'text'"do@p=Pig.new@p.should_receive(:run).with('my_command_line_tool_call').and_return('resulttext')end如何创建stub? 最佳答案 使用newmessageexpectationsyntax:规范/虚拟规范.rbrequire"dummy"describeDummy

随机推荐