8 Stimmen

Windows 7 - Taskleiste - Programmverknüpfungen anheften oder lösen

Wie in der Überschrift, gibt es eine Win32-API, um dies zu tun?

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.

16voto

Kevin Montrose Punkte 21631

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.

10 Stimmen

Kevins Antwort ist die richtige :). Widerstehen Sie einfach dem Druck Ihres Kunden.

0 Stimmen

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.

1 Stimmen

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.

7voto

Ciantic Punkte 5594

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.

1 Stimmen

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.

0 Stimmen

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 ".

0 Stimmen

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.

2voto

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.

1 Stimmen

Übrigens scheinen die neueren Versionen von Chrome dies sowohl bei der Installation als auch beim ersten Start zu tun.

2voto

Brandon Payton Punkte 418

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

2voto

Julien Roncaglia Punkte 16839

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.

0 Stimmen

Die Antwort von Kevin ist definitiv FALSCH. Siehe meinen Kommentar dort.

CodeJaeger.com

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.

Powered by:

X