我正在使用win32 gem创建文本文件的快捷方式链接。
大多数情况下,它有效,但我想添加一个部分,以便我可以点击链接并打开它指向的文件(例如,记事本)。
代码运行时没有任何明显的问题,但是当我点击链接时,没有任何反应。
require 'win32/shortcut'
include Win32
def new_shortcut(args = {})
folder1 = args[:folder1]
folder2 = args[:folder2]
shortcut_name = args[:shortcut_name]
shortcut_description = args[:shortcut_description]
file_ext = args[:file_ext]
Shortcut.new("#{folder1}/#{shortcut_name}.lnk") do |s|
s.description = shortcut_description
s.path = folder2
s.show_cmd = Shortcut::SHOWNORMAL
s.working_directory = folder1
if file_ext == ".rb"
s.path = Dir::WINDOWS << "\\notepad.exe"
end
end
end
答案 0 :(得分:0)
如果我们通过更改此行来修复path
部分该怎么办:
s.path = Dir::WINDOWS << "\\notepad.exe"
要么
s.path = "%WINDIR%/notepad.exe"
#or
s.path = %x(echo %WINDIR%).chomp << "/notepad.exe"
%WINDIR%
是Windows目录的Windows环境变量,因此这些选项中的任何一个都可以为您工作,而无需额外的依赖项。
不要担心正向斜杠win32-shortcut
宝石已经在处理那些宝石了。然后你需要指定要打开的实际文件,因为你要覆盖这些文件path
所以让我们更进一步
if file_ext == ".rb"
s.path = "%WINDIR%/notepad.exe"
s.arguments = folder2
end
这将导致&#34;目标&#34;在链接中是&#34;%WINDIR%\ notepad.exe WHATEVER_FOLDER2_IS&#34;这是使用链接中的记事本打开文件的正确语法。
总而言之,我会将方法编写为(稍加清理)
def new_shortcut(args = {})
folder1 = args[:folder1]
folder2 = args[:folder2]
shortcut_name = args[:shortcut_name]
shortcut_description = args[:shortcut_description]
# use `File` class to get the extension
file_ext = File.extname(folder2)
Shortcut.new("#{folder1}/#{shortcut_name}.lnk") do |s|
s.description = shortcut_description
s.show_cmd = Shortcut::SHOWNORMAL
if file_ext == ".rb"
#set the working directory so no need to make it part of path
s.working_directory = "%WINDIR%"
s.path = "notepad.exe"
s.arguments = folder2
else
s.path = folder2
end
end
end
显然,这可能会对缺少名称使用额外的处理,对于可能使用explorer.exe
的目录,其他扩展的其他应用程序等等,但你明白了。