Wie in der Überschrift, gibt es eine Win32-API, um dies zu tun?
Hmmm... Ich habe gerade versucht, ein Element an die Taskleiste anzuheften, und dieser Ordner wurde nicht erstellt. Sind Sie sicher, dass es unter Windows 7 funktioniert?
Wie in der Überschrift, gibt es eine Win32-API, um dies zu tun?
Es funktioniert, aber nicht für alle Betriebssysteme, z.B. Windows 10:
[DllImport("kernel32.dll")]
private static extern IntPtr LoadLibrary(string dllName);
[DllImport("user32.dll", CharSet = CharSet.Auto)]
static extern int LoadString(IntPtr hInstance, uint uID, StringBuilder lpBuffer, int nBufferMax);
private static void PinUnpinTaskBar(string filePath, bool pin)
{
if (!File.Exists(filePath))
throw new FileNotFoundException(filePath + " not exists!");
int MAX_PATH = 255;
var actionIndex = pin ? 5386 : 5387; // 5386 is the DLL index for"Pin to Tas&kbar", ref. http://www.win7dll.info/shell32_dll.html
StringBuilder szPinToStartLocalized = new StringBuilder(MAX_PATH);
IntPtr hShell32 = LoadLibrary("Shell32.dll");
LoadString(hShell32, (uint)actionIndex, szPinToStartLocalized, MAX_PATH);
string localizedVerb = szPinToStartLocalized.ToString();
// create the shell application object
dynamic shellApplication = Activator.CreateInstance(Type.GetTypeFromProgID("Shell.Application"));
string path = Path.GetDirectoryName(filePath);
string fileName = Path.GetFileName(filePath);
dynamic directory = shellApplication.NameSpace(path);
dynamic link = directory.ParseName(fileName);
dynamic verbs = link.Verbs();
for (int i = 0; i < verbs.Count(); i++)
{
dynamic verb = verbs.Item(i);
if ((pin && verb.Name.Equals(localizedVerb)) || (!pin && verb.Name.Contains(localizedVerb)))
{
verb.DoIt();
break;
}
}
}
Ich habe festgestellt, dass es keine offizielle API dafür gibt, aber jemand hat es mit VBScript gemacht. http://blog.ananthonline.net/?p=37 Merci.
Hmmm... Ich habe gerade versucht, ein Element an die Taskleiste anzuheften, und dieser Ordner wurde nicht erstellt. Sind Sie sicher, dass es unter Windows 7 funktioniert?
@Larry Dieser Ordner funktioniert nur, um zu erkennen, ob ein Programm angeheftet ist oder nicht. Wenn Sie ihm neue Verknüpfungen hinzufügen, werden der Taskleiste keine angehefteten Elemente hinzugefügt.
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.