gpt4 book ai didi

c# - 如何固定启动没有目标的特殊文件夹

转载 作者:可可西里 更新时间:2023-11-01 12:48:24 26 4
gpt4 key购买 nike

如何使用 powershell 固定启动特殊文件夹?喜欢“ThisPC”,iexplorer

这将固定启动 exe 很好,但是 Windows 资源管理器和 myComputer 呢?由于没有目标,如何固定这些项目?

鉴于此

 <start:DesktopApplicationTile Size="2x2" Column="0" Row="0" DesktopApplicationLinkPath="%APPDATA%\Microsoft\Windows\Start Menu\Programs\Windows System\This PC.lnk" />

“This PC”、“File Explorer”等的 .lnk 似乎有问题

Function PinLnk
{
Param
(
[Parameter(Mandatory,Position=0)]
[Alias('p')]
[String[]]$Path
)
$Shell = New-Object -ComObject Shell.Application
$Desktop = $Shell.NameSpace(0X0)
$WshShell = New-Object -comObject WScript.Shell
$Flag=0
Foreach($itemPath in $Path)
{
$itemName = Split-Path -Path $itemPath -Leaf
#pin application to windows Start menu
$ItemLnk = $Desktop.ParseName($itemPath)
$ItemVerbs = $ItemLnk.Verbs()
Foreach($ItemVerb in $ItemVerbs)
{
If($ItemVerb.Name.Replace("&","") -match "Pin to Start")
{
$ItemVerb.DoIt()
$Flag=1
}
}
}
}
PinLnk "C:\Program Files (x86)\Microsoft Visual Studio 14.0\Common7\IDE\devenv.exe"

我也尝试过这种方法,但仍然无法启动我的电脑

PS C:\WINDOWS\system32> Function PinLnk14
>> {
>>
>> $shell = new-object -com Shell.Application
>> $folder = $shell.NameSpace("shell:::{20D04FE0-3AEA-1069-A2D8-08002B30309D}") # ssfDRIVES
>> $ItemVerbs=$folder.Self.Verbs()
>> Foreach($ItemVerb in $ItemVerbs)
>> {
>> Write-Output $ItemVerb.Name
>> If($ItemVerb.Name.Replace("&","") -match "Pin to Start")
>> {
>> Write-Output "TRYING TO PIN"
>> $ItemVerb.DoIt()
>> }
>> }
>> }
PS C:\WINDOWS\system32>
PS C:\WINDOWS\system32> Pinlnk14
&Open
Pin to Quick access
Mana&ge
&Pin to Start
TRYING TO PIN
Map &network drive...
Dis&connect network drive...
Create &shortcut
&Delete
Rena&me
P&roperties

最佳答案

大多数特殊文件夹都可以使用特殊值访问,记录在此处:ShellSpecialFolderConstants enumeration

因此,如果您想获取“我的电脑”(又名“这台电脑”)文件夹,您可以这样做:

$shell = new-object -com Shell.Application
$folder = $shell.NameSpace(17) # "ssfDRIVES" constant

这会给你一个 Folder对象。

还有另一种方法使用文件夹 CLSID(一个 guid)。它将允许您访问所谓的 shell 命名空间中的任何文件夹,甚至是上面枚举中可能未定义的文件夹(例如第 3 方 shell 命名空间扩展)。语法是这样的:

$shell = new-object -com Shell.Application
$folder = $shell.Namespace("shell:::{CLSID}")

事实上,这个有趣的语法结合了 'shell:' URI monikershell namespace parsing syntax::{CLSID}。

因此,例如要获取“我的电脑”文件夹,您可以使用常量 CLSID_MyComputer像这样:

$shell = new-object -com Shell.Application
$folder = $shell.Namespace("shell:::{20D04FE0-3AEA-1069-A2D8-08002B30309D}")

这也行:

$shell = new-object -com Shell.Application
$folder = $shell.Namespace("shell:MyComputerFolder") # direct shell: syntax

它应该会带回与上次调用相同的对象。它们都是等价的。

有了 Folder 对象后,还有最后一个技巧来获取关联的动词,因为 Verbs() 方法仅在 FolderItem 上定义。目的。要从 Folder 获取 FolderItem(因为 Folder 也是 namespace 中的“项”,所以它也有 FolderItem 门面),您可以使用 Self属性(property),像这样:

$shell = new-object -com Shell.Application
$folder = $shell.NameSpace("shell:::{20D04FE0-3AEA-1069-A2D8-08002B30309D}") # ssfDRIVES
$folder.Self.Verbs()

好的,那是获取 FolderItem 的动词。然而,要将项目固定到开始,“固定到开始”动词调用并不总是有效(例如,对于“我的电脑”),或者动词甚至不可用(例如,对于标准文件夹)。一般来说,出于某种原因,它对文件夹不太适用。

因此,文件夹的一种解决方案是首先在该文件夹的某处(包括“我的电脑”或其他特殊位置)创建一个快捷方式文件 (.lnk),然后将该快捷方式文件固定到启动位置。注意:Pin to Start 的标准(非语言本地化)动词是“PinToStartScreen”,最好使用它而不是扫描各种动词(所有动词都有规范名称)。所以代码看起来像这样固定我的电脑启动:

$wshell = new-object -com WScript.Shell
$shortcut = $wshell.CreateShortcut("c:\temp\mypc.lnk")
$shortcut.TargetPath = "shell:MyComputerFolder" # use the same syntax as described above
$shortcut.Save()

$shell = new-object -com Shell.Application
$folder = $shell.NameSpace("c:\temp")
$lnk = $folder.ParseName("mypc.lnk") # get the shortcut file
$lnk.InvokeVerb("PinToStartScreen") # invoke "Pin To Start" on the shortcut file

事实上,当我们在“我的电脑”上执行“Pin to Start”时,这正是 Windows 所做的,它在 C:\Users\<my user>\AppData\Roaming\Microsoft\Windows\Start Menu\Programs 中创建了一个快捷方式。

关于c# - 如何固定启动没有目标的特殊文件夹,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45682468/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com