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.

2voto

Sergio Punkte 71

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

1voto

Yigang Wu Punkte 3516

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.

0voto

tsurahman Punkte 1822

Dieser Ordner enthält die Verknüpfung der angehefteten Anwendung

C:\Users\Your -Benutzername \AppData\Roaming\Microsoft\Internet Entdecker \Quick Start \User Angeheftet \TaskBar

0 Stimmen

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?

1 Stimmen

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

0 Stimmen

Wenn Sie jemals versucht hätten, eine Verknüpfung zu diesem Ordner zu kopieren, hätten Sie gesehen, dass sie NICHT in der Taskleiste erscheint. Das bloße Vorhandensein der Datei reicht nicht aus. Siehe die richtige Antwort von Ciantic.

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