Wenn Sie in der Windows 7-Betaversion festgestellt haben, dass beim Kopieren von Dateien oder anderen Systemaktionen das Windows Explorer-Symbol in der Taskleiste mit einem grünen Fortschrittsbalken angezeigt wird, der dem Fortschrittsbalken im Formular entspricht. Gibt es eine Möglichkeit, dass ich in meinen C# -Formularen den Taskbar-Fortschrittsbalken zwingen kann, den Fortschritt meiner Aufgaben zu vergleichen? Konvertieren, Übertragen, Erzeugen, es gibt so viele Verwendungsmöglichkeiten für diesen Fortschrittsbalken.Windows 7 Fortschrittsbalken in der Taskleiste in C#?
Antwort
Schauen Sie in die Windows API Code Pack for Microsoft .Net Framework.
Ja, Sie müssen diese API verwenden.
Ja, Microsoft hat die neue Taskleiste Funktionen in dem folgenden Dokument abgedeckt (Quellen enthalten): Windows 7 taskbar: Developer Resources
Für Menschen, die in der Dokumentation überspringen wollen lesen und nur etwas, das funktioniert ...
- Laden Sie die Windows API Code Pack for Microsoft .Net Framework herunter.
- Führen Sie das Installationsprogramm, die eine Zip-Datei
- Extrahieren Sie die folgenden DLLs aus dem Binär-Dateien-Ordner der ZIP-Datei erstellt:
Microsoft.WindowsAPICodePack.dll
Microsoft.WindowsAPICodePack.Shell.dll
- Fügen Sie einen Verweis auf sie in Ihrem Projekt
- Fügen Sie den folgenden Code in Ihre App ein und ändern Sie sie bei Bedarf:
-
int max = 100;
var prog = Microsoft.WindowsAPICodePack.Taskbar.TaskbarManager.Instance;
prog.SetProgressState(Microsoft.WindowsAPICodePack.Taskbar.TaskbarProgressBarState.Normal);
for(int i=0;i<max;i++) {
prog.SetProgressValue(i, max);
Thread.Sleep(100);
}
prog.SetProgressState(Microsoft.WindowsAPICodePack.Taskbar.TaskbarProgressBarState.NoProgress);
Der Nuget-Download ist ein bisschen nervig, aber ja, funktioniert super. Implementiert in meiner Fortschrittsbalken-Handler-Klasse :) – Nyerguds
fand ich einen schönen Artikel (Link), die eine einfache Lösung in der Taskleiste Statusleiste Problem bietet. Zusammenfassend weist es Ihnen die Windows-API-Pack from the MSDN website, das Hinzufügen eines Verweises auf die Microsoft.WindowsAPICodePack.Shell.dll herunterladen, die es enthält, und schließlich drei Zeilen Code in die Anwendung einzufügen:
Imports Microsoft.WindowsAPICodePack
Imports Microsoft.WindowsAPICodePack.Taskbar
// ...
TaskbarManager.Instance.SetProgressValue(X, 100)
wo X ist der Fortschritt, den Sie anzeigen möchten.
Beachten Sie, dass [nur Link-Antworten entmutigt werden] (http://meta.stackoverflow.com/tags/link-only-answers/info), SO-Antworten sollten der Endpunkt sein einer Suche nach einer Lösung (im Gegensatz zu einem weiteren Zwischenstopp von Referenzen, die im Laufe der Zeit abgestanden werden). Bitte beachten Sie, dass Sie hier eine eigenständige Zusammenfassung hinzufügen und den Link als Referenz beibehalten. – kleopatra
Ich wollte nur eine Taskleiste Fortschrittsanimation zu meiner WinForms-Anwendung hinzufügen, , ohne Code Packs herunterladen oder wechseln zu WPF, um TaskbarItemInfo zu verwenden.
Die Lösung war eine Klasse, die die ITaskbarList3-Schnittstelle verwendet:
using System;
using System.Runtime.InteropServices;
public static class TaskbarProgress
{
public enum TaskbarStates
{
NoProgress = 0,
Indeterminate = 0x1,
Normal = 0x2,
Error = 0x4,
Paused = 0x8
}
[ComImport()]
[Guid("ea1afb91-9e28-4b86-90e9-9e9f8a5eefaf")]
[InterfaceType(ComInterfaceType.InterfaceIsIUnknown)]
private interface ITaskbarList3
{
// ITaskbarList
[PreserveSig]
void HrInit();
[PreserveSig]
void AddTab(IntPtr hwnd);
[PreserveSig]
void DeleteTab(IntPtr hwnd);
[PreserveSig]
void ActivateTab(IntPtr hwnd);
[PreserveSig]
void SetActiveAlt(IntPtr hwnd);
// ITaskbarList2
[PreserveSig]
void MarkFullscreenWindow(IntPtr hwnd, [MarshalAs(UnmanagedType.Bool)] bool fFullscreen);
// ITaskbarList3
[PreserveSig]
void SetProgressValue(IntPtr hwnd, UInt64 ullCompleted, UInt64 ullTotal);
[PreserveSig]
void SetProgressState(IntPtr hwnd, TaskbarStates state);
}
[ComImport()]
[Guid("56fdf344-fd6d-11d0-958a-006097c9a090")]
[ClassInterface(ClassInterfaceType.None)]
private class TaskbarInstance
{
}
private static ITaskbarList3 taskbarInstance = (ITaskbarList3)new TaskbarInstance();
private static bool taskbarSupported = Environment.OSVersion.Version >= new Version(6, 1);
public static void SetState(IntPtr windowHandle, TaskbarStates taskbarState)
{
if (taskbarSupported) taskbarInstance.SetProgressState(windowHandle, taskbarState);
}
public static void SetValue(IntPtr windowHandle, double progressValue, double progressMax)
{
if (taskbarSupported) taskbarInstance.SetProgressValue(windowHandle, (ulong)progressValue, (ulong)progressMax);
}
}
Beispiel dafür, wie einfach es ist, zu verwenden:
TaskbarProgress.SetState(this.Handle, TaskbarProgress.TaskbarStates.Indeterminate);
or
TaskbarProgress.SetValue(this.Handle, 50, 100);
TaskbarProgress.SetState(this.Handle, TaskbarProgress.TaskbarStates.Error);
Das ist eine unglaublich fantastische Antwort; keine externen Abhängigkeiten oder Downloads, und funktioniert einfach – Ben
Wenn Sie SetOverlayIcon hinzufügen möchten, wie ich tat, achten Sie darauf, alle zusätzlichen Methoden * in der richtigen Reihenfolge * hinzuzufügen. Siehe die akzeptierte Antwort für http://stackoverflow.com/questions/1024786/windows-7-taskbar-setoverlayicon-from-wpf-app-doesnt-work –
Leider bricht dies die Anwendung bei der Ausführung unter Windows XP! Irgendeine Lösungsmöglichkeit? –
- 1. Get Liste der Windows in der Taskleiste auf Windows 7?
- 2. Festhalten von angekündigten Verknüpfungen in der Taskleiste in Windows 7
- 3. Wie Fortschritt in Windows 7 Taskleiste (mit Qt) angezeigt werden?
- 4. Windows 7 Anwendungsproblem - erscheint nur in der Taskleiste
- 5. Change pinned Taskleiste Symbol (Windows 7)
- 6. Zeichnen Sie auf Windows-Taskleiste in C#
- 7. Wie Visual Studio-Lösungen in Windows 7 Taskleiste
- 8. Bildschirmbereich in Windows 7 reservieren
- 9. Windows-Formularsymbol wird nicht in der Taskleiste angezeigt C#
- 10. Anwendung in der Taskleiste
- 11. C# Beim Schließen der Taskleiste in die Taskleiste minimieren
- 12. Erstellen Sie eine Unschärfe wie Windows 7 Taskleiste mit CSS?
- 13. "Falsche" App wird an die Taskleiste angeheftet (Windows 7)
- 14. wie man Programm, das in der Taskleiste windows-CE
- 15. Wie ‚Fenster schließen‘ in Kontextmenü der Taskleiste in Windows
- 16. Anwendung wie in Windows 7 minimieren
- 17. Windows 7 Taskbar Fortschritt
- 18. Windows 98-Stil Fortschrittsbalken
- 19. .NET Embedding-Anwendung in Windows-Taskleiste
- 20. Anpassen/Ersetzen der Windows CE 5.0-Taskleiste?
- 21. Platzieren der Symbolleiste in Windows-Taskleiste (Ala-Sprachbar)
- 22. Windows-Dienst in Windows 7
- 23. Windows Phone 8 Leistung Fortschrittsbalken
- 24. C# Anzeigen von Schaltflächen in der Miniaturansicht der Taskleiste
- 25. uwsgi Installationsfehler in Windows 7
- 26. Wie erkennen Sie Änderungen an der Windows-Taskleiste?
- 27. Wie erkennen Sie Änderungen an der Windows-Taskleiste?
- 28. Cards.dll in Windows 7
- 29. In Windows Telefon 7
- 30. Bessere Benachrichtigungen in der Taskleiste
Auch ein schönes Video zu diesem Thema enthält. – Larsenal
Benötigt .NET 3.5 oder 4. Scheint nicht anwendbar für .NET 2. –
3.5 ist mit Windows 7 gemäß http://en.wikipedia.org/wiki/.NET_Framework – jocull