Wie in der Überschrift, gibt es eine Win32-API, um dies zu tun?
Kevins Antwort ist die richtige :). Widerstehen Sie einfach dem Druck Ihres Kunden.
Wie in der Überschrift, gibt es eine Win32-API, um dies zu tun?
Tun Sie das nicht.
Ich bin mir zu 99 % sicher, dass es keine offizielle API dafür gibt, und zwar aus genau demselben Grund, aus dem es keine gab programmatischer Zugriff auf die Pin-Liste des alten Startmenüs .
Kurz gesagt, die meisten Benutzer wollen nicht, dass Programme Müll in ihre Favoriten, Schnellstart, Taskleiste usw., so dass Windows Sie dabei nicht unterstützt.
Es gibt triftige Gründe, z.B. verwende ich mehrere Desktops (opensource) VirtuaWin, und ich möchte verschiedene Programme an verschiedene Desktops anheften. Ich muss API für diese zu finden, um es zu implementieren.
Kevin, du liegst zu 99% FALSCH! Es ist typisch, dass Leute hier antworten, was sie GLAUBEN, wenn sie es nicht WISSEN, und dann stimmen andere, die es auch nicht wissen, für diese falsche Antwort. Der von Ciantic gepostete Code zeigt, dass du falsch liegst. "Die Nutzer wollen nicht..." Das ist Blödsinn. Wenn ich ein Installationsprogramm schreibe, das den Benutzer fragt, ob er eine Verknüpfung in der Taskleiste haben möchte, dann IST es die Entscheidung des Benutzers, dass mein Installationsprogramm eine Verknüpfung in die Taskleiste schreibt. Warum sollte Miscrosoft dies verbieten? Es gibt viele Benutzer ohne Computerkenntnisse, die ein Programm nicht finden, wenn es nicht in der Taskleiste ist, selbst seit Windows 8, wo das Startmenü ein schlechter Witz ist.
Ich versuche, eine VirtuaWin (quelloffene virtuelle Desktop-Software) Plugin, das es mir ermöglicht, verschiedene Schaltflächen an verschiedene virtuelle Desktops anzuheften. Ein absolut triftiger Grund, dies zu verwenden.
Ich habe bereits einen Weg gefunden, ihn anzustecken/abzustecken:
Der folgende Codeschnipsel stammt aus Chromium shortcut.cc Datei fast unverändert, siehe auch die ShellExecute
Funktion auf dem MSDN
bool TaskbarPinShortcutLink(const wchar_t* shortcut) {
int result = reinterpret_cast<int>(ShellExecute(NULL, L"taskbarpin", shortcut,
NULL, NULL, 0));
return result > 32;
}
bool TaskbarUnpinShortcutLink(const wchar_t* shortcut) {
int result = reinterpret_cast<int>(ShellExecute(NULL, L"taskbarunpin",
shortcut, NULL, NULL, 0));
return result > 32;
}
// Copyright (c) 2012 The Chromium Authors. All rights reserved.
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.
Scheint ziemlich einfach zu sein, wenn man die Abkürzung kennt. Für mich ist dies jedoch nicht ausreichend, ich muss auch über die folgenden Punkte iterieren bestehende Schaltflächen und heben Sie die Anheftung auf verschiedenen Desktops auf und heben Sie sie wieder auf.
GROSSARTIG! Das funktioniert perfekt. Es scheint sich um eine undokumentierte Funktion zu handeln. Das MSDN sagt uns nichts über die Operation "taskbarpin". Sie haben vergessen zu erwähnen, dass "Verknüpfung" in Ihrem Code der Pfad zu einer bereits bestehenden Verknüpfung irgendwo auf der Festplatte sein muss. ShellExecute erstellt keine neue Verknüpfung. Es kopiert lediglich eine bestehende Verknüpfung in den Ordner "%AppData%". \Microsoft\Internet Entdecker \Quick Start \User Angeheftet \TaskBar " und macht die Verknüpfung in der Taskleiste sichtbar. WICHTIG: Wenn Sie eine Verknüpfung nur in diesen Ordner kopieren, wird sie NICHT in der Taskleiste angezeigt.
Beachten Sie, dass ShellExecute("taskbarpin") den Fehler 31 zurückgibt, wenn das Symbol bereits in der Taskleiste angezeigt wird. In diesem Fall kopiert die Funktion die LNK-Datei NICHT in den Ordner "...User Pinned". \TaskBar ".
Ein weiterer wichtiger Punkt ist, dass ShellExecute("taskbarunpin") mit Fehler 5 fehlschlägt, wenn die Datei, auf die die Verknüpfung verweist, nicht existiert. (Es scheint sich um einen Fehler zu handeln.) Das bedeutet: Wenn Sie eine Verknüpfung in der Taskleiste sehen und die entsprechende LNK-Datei existiert, aber das Ziel der LNK-Datei nicht existiert, dann ist es unmöglich, die Taskleistenverknüpfung zu entfernen. Wenn Sie also ein Deinstallationsprogramm schreiben, müssen Sie zuerst die Verknüpfung Ihrer Anwendung entfernen und dann die Anwendung selbst löschen.
In den Kommentaren zu einem Code Projektartikel heißt es, dass Sie nur einen symbolischen Link im Ordner "" erstellen müssen. C:\Users\Username\AppData\Roaming\Microsoft\Internet Entdecker \Quick Start \User Angeheftet \TaskBar ".
Aber wie in den anderen Kommentaren festgestellt wurde, scheint es sich dabei im Allgemeinen um eine ungesellige Praxis zu handeln.
Sie können Anwendungen über Windows-Shell-Verben anheften/entheften:
http://blogs.technet.com/deploymentguys/archive/2009/04/08/pin-items-to-the-start-menu-or-Windows-7-taskbar-via-script.aspx
Für die API gibt es eine skriptfreundliche COM-Bibliothek für die Arbeit mit der Shell:
http://msdn.microsoft.com/en-us/library/bb776890%28VS.85%29.aspx
Hier ist ein in JScript geschriebenes Beispiel:
// Warning: untested and probably needs correction
var appFolder = "FOLDER CONTAINING THE APP/SHORTCUT";
var appToPin = "FILENAME OF APP/SHORTCUT";
var shell = new ActiveXObject("Shell.Application");
var folder = shell.NameSpace(appFolder);
var folderItem = folder.ParseName(appToPin);
var itemVerbs = folderItem.Verbs;
for(var i = 0; i < itemVerbs.Count; i++)
{
// You have to find the verb by name,
// so if you want to support multiple cultures,
// you have to match against the verb text for each culture.
if(itemVerbs[i].name.Replace(/&/, "") == "Pin to Start Menu")
{
itemVerbs[i].DoIt();
}
}
Nur um einige Links zu den Informationen zu setzen, da Microsoft jetzt eine offizielle Dokumentation zu " Taskleisten-Erweiterungen " :
Eine kleine Anzahl von Anwendungen wird standardmäßig für neue Installationen. Abgesehen von diesen kann nur der Benutzer weitere Anwendungen anheften; programmatisch Pinning durch eine Anwendung ist nicht erlaubt.
Also Kevin Montrose ist die richtige Antwort: NICHT.
CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.
1 Stimmen
Mein Kunde möchte, dass unser Installationsprogramm die Anwendung standardmäßig an die Taskleiste anheftet/entfernt. Danke.
11 Stimmen
Ich glaube, dass diese Funktion, ähnlich wie Pin to Start Menu in XP/Vista, eine absichtlich nicht offengelegt, so dass Programme nicht die Benutzer Entscheidung darüber, ob ein Programm wertvollen Platz in der Taskleiste verdient. Andernfalls würde sich jedes spammige Programm für SO VERDAMMT WICHTIG halten, dass es sich unabhängig von der Zustimmung des Benutzers an die Taskleiste anheften würde. Siehe zahlreiche Artikel von Raymond Chen passim.
0 Stimmen
Wenn Sie einen bestimmten Kunden haben, der Ihre Anwendung an die Taskleisten seiner Benutzer anheften/aufheben möchte, würde ich eher nach einer Gruppenrichtlinieneinstellung als nach einer API suchen. (Die Designentscheidung lautet: "Wem vertrauen wir die Entscheidung an, ob Programm X auf der Taskleiste erscheint: dem Systemadministrator oder Programm X?") Ich weiß nicht, ob es eine solche Einstellung gibt, aber Sie könnten versuchen, auf serverfault.com zu fragen.
2 Stimmen
@Yigang Wu: Ist Ihr Kunde die Regierung? Wenn nicht, dann hoffe ich, dass sie einen sehr guten Grund dafür haben, die Präferenzen des Benutzers außer Kraft zu setzen.
0 Stimmen
Ich verstehe die Gefahren einer solchen API, aber sie wäre nützlich, um ein Programm zu erstellen, das die Taskleiste zwischen benutzerdefinierten Kontexten wie "Entwicklung", "Persönlich" und "Spiele" umschaltet. Je nachdem, warum ich meinen Computer benutze, möchte ich, dass eine andere Reihe von Anwendungen in der Taskleiste angezeigt wird.
2 Stimmen
Es ist typisch, dass Leute hier antworten, was sie GLAUBEN, wenn sie es nicht WISSEN (wie itowlson) und dann andere Leute, die es auch nicht wissen, diesen falschen Kommentar abstimmen. Die richtige Antwort wurde unten von Ciantic gegeben. "Die Entscheidung des Nutzers..." Das ist Blödsinn. Wenn ich ein Installationsprogramm schreibe, das den Benutzer fragt, ob er eine Verknüpfung in der Taskleiste haben möchte, dann IST es die Entscheidung des Benutzers, dass mein Installationsprogramm eine Verknüpfung in die Taskleiste schreibt. Warum sollte Miscrosoft dies verbieten? Es gibt viele Benutzer ohne Computerkenntnisse, die ein Programm nicht finden, wenn es nicht in der Taskleiste ist, selbst seit Windows 8, wo das Startmenü ein schlechter Witz ist.