如何在Windows中创建一个热键来打开文件

3
我正在创建一个应用程序,希望用户打开我的应用程序时,它可以为自己创建一个热键,例如 ctrl + alt + f,这样每次用户按下这些组合键时,应用程序都会自动运行。
我知道在Windows中可以通过右键单击应用程序并添加快捷键组合来手动实现此目标,但是我不知道如何以编程方式实现此目标,因为我不想让用户自己完成此操作。

1
我认为通过编程方式注册和注销热键只能通过Windows API实现,因此您需要使用Pinvoke与VBS或C#一起,并使类型可用于PowerShell,如果您计划编写PowerShell脚本。这里有一个VB示例(https://dev59.com/UHE95IYBdhLWcg3wHqMV#34755545),您可以从中获取一些灵感。 - Ash
1
@Ash,你可以使用PowerShell中的COM来创建一个带有热键的快捷方式文件;请参见下文。 - mklement0
1个回答

4
您可以通过编程方式创建一个指向应用程序可执行文件的 快捷方式文件*.lnk),同时还可以定义调用快捷键。
以下示例在您的桌面上创建名为MyApp.lnk 的快捷方式,该快捷方式启动记事本,如果需要则可以使用热键Ctrl+Alt+F;热键立即生效:
  • 注意:仅将快捷方式文件保存到某些目录中才能确保其热键定义具有持久性,即在重新启动后继续工作。 (当前用户的)桌面可以工作 - 我不确定其他目录也是否有效。
# Get the Desktop dir. path.
$desktopDir = [Environment]::GetFolderPath('Desktop') 

# Create the shortcut object, initially in-memory only.
$shc = 
  (New-Object -ComObject 'Wscript.Shell').CreateShortcut("$desktopDir\MyApp.lnk") 

# Set the target executable (name will do if in $env:PATH).
# If arguments must be passed, use the separate .Arguments property (single string)
$shc.TargetPath = 'notepad.exe' 

# Assign the hotkey.
$shc.Hotkey = 'Ctrl+Alt+F'

# Save to disk (using the initially specified path).
$shc.Save() 

请查看WshShortcut COM对象的文档,该对象可以实例化。


我有一个问题。这个脚本需要4-5秒才能通过热键打开所需的应用程序。你可以告诉我如何加快它的速度吗?当我启动计算机时,它可以在一秒内快速运行,但之后它就变得缓慢了。像5秒钟打开应用程序太长了... - Abhay Salvi
1
很抱歉听到这个消息,@Abhaysalvi - 不幸的是,我没有解释。您确定是热键机制使其变慢,还是应用程序本身在启动时变慢?无论哪种方式,这听起来都像是一个单独的问题(在我的测试中没有看到这个问题,无论您是交互式分配热键还是编程分配热键都不应该有任何区别),所以我鼓励您提出一个新问题。 - mklement0
1
啊,这是同一个记事本应用程序。谢谢你的回答! - Abhay Salvi
1
请检查我的编辑1和2,网址为:https://stackoverflow.com/questions/69574360/powershell-script-is-slow-in-opening-an-application。你是对的。这只是与我的电脑有关的问题... - Abhay Salvi
嗨,我陷入了一个奇怪的境地。当将“.lnk”文件分配到桌面时,您的脚本可以正常工作。但是,当我尝试使用不同的位置时,它确实创建了快捷方式,但由于某种原因热键无法工作。只有当“.lnk”文件在桌面上时才能正常工作。对此有什么想法吗? - Abhay Salvi
1
@Abhaysalvi,是的,这也是答案中提到的限制。我不知道这种行为在哪里有记录,以及除了桌面之外是否还有其他特殊文件夹支持具有持久性热键的快捷方式文件。从实用的角度来看,不仅仅是_任何_文件夹都可以被支持,因为系统将不得不扫描整个硬盘以查找所有热键。 - mklement0

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接