web-dev-qa-db-de.com

Ist es möglich, dem Windows 10-Schnellzugriffsfenster im Explorer-Fenster programmgesteuert Ordner hinzuzufügen?

Anscheinend hat Microsoft das Windows Explorer-Element "Favoriten" durch das Element "Schnellzugriff" ersetzt. Es ist mir jedoch nicht gelungen, programmgesteuert Ordner hinzuzufügen (weder bei Google noch bei MSDN). Gibt es noch keine Möglichkeit, dies zu tun?

12
conectionist

Ich habe hier eine Antwort bekommen:

Windows 10 - Programmgesteuerter Schnellzugriff verwenden

Anscheinend ist es noch nicht möglich, aber ein Vorschlag für eine solche API wurde gemacht.

4
conectionist

Es gibt eine einfache Möglichkeit, dies in Powershell (zumindest) zu tun: 

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

Ich hoffe es hilft.

10
Yohan Ney

Yohan Neys Antwort für das Anheften eines Gegenstands ist richtig. Um ein Element zu entfernen, können Sie Folgendes tun:

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

Hier ist ein Skript, das ich geschrieben habe, um Pin/Unpin etwas einfacher zu machen: 

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

5
Johan Carlsson

Vielleicht hilft es jemandem, bis MS eine API veröffentlicht. Ich habe procmon ausgeführt und es scheint, dass diese Registrierungsschlüssel beteiligt sind

Pin zum Schnellzugriff:

HKEY_CLASSES_ROOT\Folder\Shell\pintohome

Wenn unpin:

HKEY_CLASSES_ROOT\PinnedFrequentPlace\Shell\unpinfromhome\command

Auch diese Ressource wird beim Pinnen verwendet: ( EDIT1 : kann es nicht mehr finden ..)

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

Sie können es mit 7-Zip öffnen. Dort befinden sich mehrere Dateien, die zum Ziel passen 

EDIT2 : Ich habe festgestellt, dass das Ausführen im 'Ausführen' Schnellzugriff öffnet:

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

Ich mag Johans Antwort, aber ich habe ein wenig hinzugefügt, damit einige der Elemente, die bereits da waren, nicht entfernt werden. Ich hatte versehentlich eine Tonne drin gesteckt, ich muss Pin-Ordner oder etwas für den schnellen Zugriff ausgewählt haben.

$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

Ich konnte dies in C # unter Verwendung von Shell32 basierend auf den Informationen in diesem Beitrag und einigen Informationen zu Shell32 aus diesem Beitrag erreichen https://stackoverflow.com/a/19035049

Sie müssen einen Verweis auf "Microsoft Shell Controls and Automation" hinzufügen.

Dies wird einen Link hinzufügen

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

Dadurch wird eine Verknüpfung nach Namen entfernt

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

das war der einfache Teil, der immer noch nicht in der Lage war, sich von Haus aus zu entfernen

0
Lompican

Aufbauend auf das, was andere gesagt haben ... Dies ermöglicht Ihnen das Entfernen aller gepinnter Ordner (nicht nur aller/letzter Ordner/Elemente):

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

Ich brauchte das, um meine Liste der Quick Access-Links schnell zu sichern/wiederherzustellen. Also habe ich dies ganz oben in mein Skript gestellt (um alle angehefteten Elemente zu entfernen, fügt der Rest des Skripts sie erneut hinzu. Dadurch wird sichergestellt, dass die Reihenfolge korrekt ist.

Und ja, ich bin sicher, dass es eine bessere Syntax für den obigen Code gibt.

0
David