web-dev-qa-db-fra.com

Est-il possible d'ajouter par programme des dossiers au panneau d'accès rapide Windows 10 dans la fenêtre de l'explorateur?

Apparemment, Microsoft a (en quelque sorte) remplacé l'élément de l'Explorateur Windows "Favoris" par l'élément d'accès rapide. Mais je n'ai pas été en mesure de trouver un moyen d'ajouter des dossiers par programme (ni sur Google, ni sur MSDN). N'y a-t-il pas moyen de le faire pour l'instant?

12
conectionist

J'ai une réponse ici:

Windows 10 - Utiliser l'accès rapide par programme

Apparemment, ce n'est pas encore possible, mais une proposition pour une telle API a été faite.

4
conectionist

Il existe un moyen simple de le faire dans powershell (au moins): 

$o = new-object -com Shell.application
$o.Namespace('c:\My Folder').Self.InvokeVerb("pintohome")

J'espère que ça aide.

10
Yohan Ney

La réponse de Yohan Ney pour avoir épinglé un article est correcte. Pour désépingler un élément, vous pouvez le faire:

$QuickAccess = New-Object -ComObject Shell.application 
($QuickAccess.Namespace("Shell:::{679f85cb-0220-4080-b29b-5540cc05aab6}").Items() | where {$_.Path -eq "C:\Temp"}).InvokeVerb("unpinfromhome")

Voici un script que j'ai écrit pour simplifier un peu l'épinglette: 

https://gallery.technet.Microsoft.com/Set-QuickAccess-117e9a89

5
Johan Carlsson

Peut-être que cela aidera quelqu'un jusqu'à ce que MS publie une API. J'ai exécuté procmon et il semble que ces clés de registre soient impliquées.

Pin to Quick access:

HKEY_CLASSES_ROOT\Folder\Shell\pintohome

Quand désépingler:

HKEY_CLASSES_ROOT\PinnedFrequentPlace\Shell\unpinfromhome\command

De plus, cette ressource est utilisée pour épingler: ( EDIT1 : impossible de le trouver plus longtemps ..)

AppData\Roaming\Microsoft\Windows\Recent\AutomaticDestinations\{SOME_SORT_OF_GUID}.automaticDestinations-ms

Vous pouvez essayer de l’ouvrir avec 7-Zip. Il contient plusieurs fichiers qui correspondent à la destination. 

EDIT2 : J'ai trouvé en cours d'exécution cela dans le "Exécuter" s'ouvre Accès rapide:

Shell:::{679F85CB-0220-4080-B29B-5540CC05AAB6}
4
bondar

J'aime la réponse de Johan, mais j’en ai ajouté un peu pour ne pas supprimer certains des éléments déjà présents. J'avais une tonne coincée là-dedans par accident, je devais avoir sélectionné un dossier de broches ou quelque chose d'accès rapide.

$QuickAccess = New-Object -ComObject Shell.application 
$okItems = @("Desktop","Downloads","Documents","Pictures","iCloud Photos","iCloud Drive","PhpstormProjects","Wallpapers 5","Videos", "Schedules for testing")
($QuickAccess.Namespace("Shell:::{679f85cb-0220-4080-b29b-5540cc05aab6}").Items() | where {$_.name -notin $okItems}).InvokeVerb("unpinfromhome");
2
tiltedtimmy

J'ai pu obtenir que cela fonctionne en C # en utilisant Shell32 en fonction des informations contenues dans ce message et des informations sur Shell32 de ce message https://stackoverflow.com/a/19035049

Vous devez ajouter une référence à "Microsoft Shell Controls and Automation".

Cela va ajouter un lien

Type shellAppType = Type.GetTypeFromProgID("Shell.Application");
Object Shell = Activator.CreateInstance(shellAppType);
Shell32.Folder2 f = (Shell32.Folder2)shellAppType.InvokeMember("NameSpace", System.Reflection.BindingFlags.InvokeMethod, null, Shell, new object[] { "C:\\temp" });
f.Self.InvokeVerb("pintohome");

Cela va supprimer un lien par nom

Type shellAppType = Type.GetTypeFromProgID("Shell.Application");
Object Shell = Activator.CreateInstance(shellAppType);
Shell32.Folder2 f2 = (Shell32.Folder2)shellAppType.InvokeMember("NameSpace", System.Reflection.BindingFlags.InvokeMethod, null, Shell, new object[] { "Shell:::{679f85cb-0220-4080-b29b-5540cc05aab6}" });
Console.WriteLine("item count: " + f2.Items().Count);
foreach (FolderItem fi in f2.Items())
{
    Console.WriteLine(fi.Name);
    if (fi.Name == "temp")
    {
        ((FolderItem)fi).InvokeVerb("unpinfromhome");
    }
}
0
Toby Leduc
void PinToHome(const std::wstring& folder)
{
    ShellExecute(0, L"pintohome", folder.c_str(), L"", L"", SW_HIDE);
}

c'était la partie facile, toujours incapable de faire un unpinfromhome

0
Lompican

Construire sur ce que d’autres ont dit ... Cela vous permet de supprimer tous les pinned dossiers (pas seulement tous les/dossiers/éléments récents):

$o = new-object -com Shell.application
$($o.Namespace("Shell:::{679f85cb-0220-4080-b29b-5540cc05aab6}").Items() | where { $_.IsFolder -eq "True" -and ($($_.Verbs() | Where-Object {$_.Name -in "Unpin from Quick access"}) -ne $null)}).InvokeVerb("unpinfromhome")

J'avais besoin de cela pour pouvoir sauvegarder/restaurer rapidement ma liste de liens d'accès rapide. Donc, je mets ceci en haut de mon script (pour supprimer tous les éléments épinglés, puis le reste du script les rajoute. Cela garantit que l'ordre est correct.

Et oui, je suis sûr qu'il existe une meilleure syntaxe pour le code ci-dessus.

0
David