如上图所示,我在使用 打开的“发送到菜单”文件夹中拥有所有默认条目以及一些我自己手动添加的条目shell:SendTo
。
但并非所有条目都会显示在“发送至”菜单中。
如何解决这个问题?
答案1
根据https://winhelponline.com/xp/sendtofix.htm,这可能是管理 SendTo 功能的一些注册表项的问题。他们有一个脚本可以修复它。
它最初适用于 Windows XP、Vista 和 7,所以我做了一些改动使其适用于 Windows 10。
将以下脚本保存到文件中修复发送程序,然后使用命令提示符执行它wscript.exe "C:\Scripts\fixsendto.vbs"
。相应地更改文件路径。您可能必须wscript
从管理员级别的命令提示符运行。
'-----------------------------------------------------------------
'Compatibility : Windows XP, Windows Vista and Windows 7 (added 8 and 10)
'Author : Ramesh Srinivasan - Microsoft MVP (Windows Shell)
'Created on : February 19, 2005
'Revised on : November 01, 2010
'Description : Fixes the Send To menu (missing all the shortcuts)
'Homepage : http://windowsxp.mvps.org
'More Info : http://windowsxp.mvps.org/sendtofix.htm
'Requirement : Needs Administrative privileges
'-----------------------------------------------------------------
Set WshShell = CreateObject("WScript.Shell")
strComputer = "."
Set objWMIService = GetObject _
("winmgmts:\\" & strComputer & "\root\cimv2")
'Determine OS version
Set colOperatingSystems = objWMIService.ExecQuery _
("Select * from Win32_OperatingSystem")
For Each objOperatingSystem in colOperatingSystems
if instr(objOperatingSystem.Caption,"Vista") Or instr(objOperatingSystem.Caption,"Windows 7") Or instr(objOperatingSystem.Caption,"Windows 8") Or instr(objOperatingSystem.Caption,"Windows 10") then
strSendTo = "%USERPROFILE%\AppData\Roaming\Microsoft\Windows\SendTo"
elseif instr(objOperatingSystem.Caption,"XP") Then
strSendTo = "%USERPROFILE%\SendTo"
else
MsgBox "This script runs in Windows 10/8/7/Vista/XP systems only"
wscript.Quit
end if
Next
USFolderPath = "HKCU\Software\Microsoft\Windows\CurrentVersion\Explorer\User Shell Folders"
On Error Resume Next
WshShell.RegWrite "HKCR\exefile\shellex\DropHandler\", "{86C86720-42A0-1069-A2E8-08002B30309D}", "REG_SZ"
WshShell.RegWrite "HKCR\lnkfile\shellex\DropHandler\", "{00021401-0000-0000-C000-000000000046}", "REG_SZ"
WshShell.RegWrite USFolderPath & "\SendTo", strSendTo, "REG_EXPAND_SZ"
Wshshell.RUN ("regsvr32.exe shell32.dll /i /s")
'Get curr. user name
Set colItems = objWMIService.ExecQuery("Select * From Win32_ComputerSystem")
For Each objItem in colItems
strCurrentUserName = objItem.UserName
Next
'Restart user shell
Set colProcessList = objWMIService.ExecQuery _
("Select * from Win32_Process Where Name = 'Explorer.exe'")
For Each objProcess in colProcessList
colProperties = objProcess.GetOwner(strNameOfUser,strUserDomain)
If strUserDomain & "\" & strNameOfUser = strCurrentUserName then
objProcess.Terminate()
End If
Next
MsgUser = Msgbox ("Fixed the Send To menu.", 4160, "'Send To' menu fix for Windows 10/8/7/Vista/XP.")
Set WshShell = Nothing
答案2
这是电源外壳Ramesh 代码的等价版本(无需版本检查)。这可以粘贴到电源外壳 行政控制台或保存为.ps1 文件。
New-PSDrive -Name HKCR -PSProvider Registry -Root HKEY_CLASSES_ROOT | out-null
$Splat = @{
'Path' = 'HKCR:\exefile\shellex\DropHandler\'
'Value' = '{86C86720-42A0-1069-A2E8-08002B30309D}'
}
Set-Item @Splat
$Splat = @{
'Path' = 'HKCR:\lnkfile\shellex\DropHandler\'
'Value' = '{00021401-0000-0000-C000-000000000046}'
}
Set-Item @Splat
$Splat = @{
'Path' = 'HKCU:\Software\Microsoft\Windows\CurrentVersion\Explorer\User Shell Folders'
'Name' = 'SendTo'
'Value' = '%USERPROFILE%\AppData\Roaming\Microsoft\Windows\SendTo'
'Type' = 'ExpandString'
}
Set-ItemProperty @Splat
start-Process -FilePath regsvr32.exe -ArgumentList shell32.dll, /i, /s
Get-Process Explorer | Stop-Process
答案3
请注意,所有其他答案(截至 2021 年 12 月 27 日)都解释了问题的修复方法,其中快捷方式无法被 SendTo 菜单识别。它无法解决将文件直接添加到 shell:SendTo 文件夹的“问题”(或缺少 Windows 功能)。
您会发现,如果您直接在 shell:SendTo 中添加某些文件扩展名,SendTo 菜单将只识别这些文件扩展名。这些文件扩展名包括 *.cmd、*.bat 和 *.vbs。但是,大多数其他文件不会以这种方式显示在“发送到”菜单中。
使其工作的一种方法是添加引用该文件的快捷方式,并将此快捷方式放在 shell:SendTo 中。快捷方式必须包括与该文件扩展名关联的可执行文件的路径。
举例来说,快捷方式是否需要包含 AutoHotkey.exe 的路径才能使 *.ahk 文件快捷方式正常工作(即使 ahk 文件与 Windows 其他地方的 AutoHotkey.exe 相关联):
“C:\Program Files\AutoHotkey\AutoHotkey.exe” D:\TEMP\test.ahk