È ansible aggiungere le cartelle al pannello di Accesso rapido di Windows 10 in modo programmatico nella finestra di Explorer?

Apparentemente Microsoft ha sostituito (di sorta) l’elemento di esplorazione di Windows “Preferiti” con l’elemento Accesso rapido. Ma non sono stato in grado di trovare un modo per aggiungere a livello di programmazione cartelle (né su Google, né su MSDN). Non c’è ancora modo di farlo?

C’è un modo semplice per farlo in PowerShell (almeno):

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

Spero che sia d’aiuto.

Forse aiuterà qualcuno finché MS non rilascia un’API. Ho eseguito procmon e sembra che queste chiavi di registro siano coinvolte

Pin to Quick access:

 HKEY_CLASSES_ROOT\Folder\shell\pintohome 

Quando sblocchi:

 HKEY_CLASSES_ROOT\PinnedFrequentPlace\shell\unpinfromhome\command 

Anche questa risorsa viene utilizzata quando si blocca: ( EDIT1 : non riesce più a trovarlo ..)

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

Puoi provare ad aprirlo con 7-zip, ci sono diversi file che si adattano alla destinazione

EDIT2 : ho scoperto che l’esecuzione di questo in “Esegui” si apre Accesso rapido:

 shell:::{679F85CB-0220-4080-B29B-5540CC05AAB6} 

Ho una risposta qui:

Windows 10: utilizza l’accesso rapido al livello di programmazione

Apparentemente, non è ancora ansible, ma è stata fatta una proposta per tale API.

La risposta di Yohan Ney per appuntare un object è corretta. Per sbloccare un object puoi farlo:

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

Ecco una sceneggiatura che ho scritto per rendere il pin / sblocco un po ‘più semplice:

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

Mi piace la risposta di Johan, ma ho aggiunto un po ‘per non rimuovere alcuni degli elementi che erano già lì. Avevo una tonnellata bloccata lì per caso devo aver selezionato la cartella pin o qualcosa per l’accesso rapido.

 $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"); 
 void PinToHome(const std::wstring& folder) { ShellExecute(0, L"pintohome", folder.c_str(), L"", L"", SW_HIDE); } 

quella era la parte facile, ancora incapace di fare un unpiro da casa

Basandosi su ciò che altri hanno detto … Questo ti consente di rimuovere tutte le cartelle aggiunte (non solo tutte le cartelle / elementi recenti / recenti):

 $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") 

Avevo bisogno di questo in modo da poter eseguire il backup / ripristinare rapidamente il mio elenco di collegamenti di accesso rapido. Così ho messo questo in cima al mio script (per rimuovere tutti gli elementi aggiunti, quindi il resto dello script li ritriggers. Ciò garantisce che l’ordine sia corretto.

E sì, sono sicuro che c’è una syntax migliore per il codice sopra.

Sono stato in grado di farlo funzionare in C # usando shell32 sulla base delle informazioni in questo post e alcune informazioni su shell32 da questo post https://stackoverflow.com/a/19035049

È necessario aggiungere un riferimento a “Microsoft Shell Controls and Automation”.

Questo aggiungerà un link

 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"); 

Questo rimuoverà un link per nome

 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"); } }