Jeśli zauważyłeś w wersji beta Windows 7, jeśli skopiujesz pliki lub inne działania systemowe, ikona Eksploratora Windows na pasku zadań wypełni się zielonym paskiem postępu odpowiadającym paskowi postępu w formularzu. Czy istnieje sposób, że w moich formularzach C# mogę wymusić pasek postępu paska zadań, aby dopasować postęp każdego zadania, które robię? Konwersja, przenoszenie, generowanie jest tak wiele zastosowań dla tego paska postępu.Pasek postępu Windows 7 na pasku zadań w C#?
Odpowiedz
Tak, musisz użyć tego interfejsu API.
Tak, Microsoft objęte nowe funkcje paska zadań w poniższym dokumencie (źródła w komplecie): Windows 7 taskbar: Developer Resources
Dla ludzi, którzy chcą pominąć czytanie dokumentacji i po prostu coś, co działa ...
- Pobierz Windows API Code Pack for Microsoft .Net Framework.
- Uruchom instalator, który tworzy plik zip
- wyodrębnić następujące bibliotek DLL z folderu plików binarnych w pliku zip:
Microsoft.WindowsAPICodePack.dll
Microsoft.WindowsAPICodePack.Shell.dll
- dodać odwołanie do nich w projekt
- Umieść poniższy kod w swojej aplikacji i zmodyfikuj go w razie potrzeby:
-
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);
Pobieranie nugetu jest trochę denerwujące, ale tak, działa świetnie. Wdrożone w mojej klasie obsługi paska postępu :) – Nyerguds
znalazłem piękny artykuł (Link), która zapewnia proste rozwiązanie do paska zadań problemu pasku postępu. Podsumowując, zaleci, aby pobrać pakiet API systemu Windows from the MSDN website, dodając odniesienie do Microsoft.WindowsAPICodePack.Shell.dll że zawiera ona, a na końcu dodać trzy linie kodu do aplikacji:
Imports Microsoft.WindowsAPICodePack
Imports Microsoft.WindowsAPICodePack.Taskbar
// ...
TaskbarManager.Instance.SetProgressValue(X, 100)
gdzie X to postęp, który chcesz wyświetlić.
Należy pamiętać, że [odradza się tylko odpowiedzi z linkami] (http://meta.stackoverflow.com/tags/link-only-answers/info), odpowiedzi w formacie SO powinny być punktem końcowym poszukiwania rozwiązania (w przeciwieństwie do kolejnego zatrzymania referencji, które z czasem stają się nieaktualne). Proszę rozważyć dodanie samodzielnego streszczenia tutaj, zachowując odnośnik jako odniesienie. – kleopatra
Po prostu chciałem dodać animację postępu paska zadań do mojej aplikacji WinForm, , bez konieczności pobierania pakietów kodu lub przełączania się do WPF w celu użycia TaskbarItemInfo.
Rozwiązaniem była klasa, która korzysta z interfejsu ITaskbarList3:
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);
}
}
Przykład, jak łatwo jest używać:
TaskbarProgress.SetState(this.Handle, TaskbarProgress.TaskbarStates.Indeterminate);
or
TaskbarProgress.SetValue(this.Handle, 50, 100);
TaskbarProgress.SetState(this.Handle, TaskbarProgress.TaskbarStates.Error);
To jest niesamowicie fantastyczna odpowiedź; brak zewnętrznych zależności lub plików do pobrania, i po prostu działa – Ben
Jeśli chcesz dodać SetOverlayIcon, tak jak ja, pamiętaj, aby dodać wszystkie dodatkowe metody * w poprawnej kolejności *. Zobacz akceptowaną odpowiedź na http://stackoverflow.com/questions/1024786/windows-7-taskbar-setoverlaylay-mod-wpf-app-doesnt-work –
Niestety, powoduje to uszkodzenie aplikacji podczas pracy w systemie Windows XP! Jakieś rozwiązanie? –
- 1. Windows 7 Pasek zadań Pasek narzędzi lub pasek narzędzi
- 2. Jak ukryć aplikację na pasku zadań w systemie Windows 7?
- 3. Zmiana przypiętej ikony na pasku zadań (Windows 7)
- 4. Osadzanie na pasku zadań
- 5. Zmień ikonę Microsoft Excel na pasku zadań w systemie Windows 7, a wcześniej w VBA
- 6. Pasek postępu w stylu Windows 98
- 7. Pasek postępu JQuery Pasek postępu
- 8. Ukryj pasek zadań w Windows 8
- 9. jak zrobić program, który będzie na pasku zadań Windows-CE
- 10. Pasek postępu konsoli libcurl C++
- 11. Postępy paska zadań Windows 7 działają w jednej aplikacji, ale nie innej.
- 12. Pozioma szerokość paska postępu w pasku akcji
- 13. Jak uzyskać przycisk paska zadań systemu Windows, aby wyświetlić postęp paska postępu
- 14. Jak mogę wyświetlić moją usługę systemu Windows na pasku zadań?
- 15. Jak powiązać moją aplikację z przypiętym programem na pasku zadań systemu Windows 7?
- 16. Korzystanie z funkcji paska zadań systemu Windows 7 w PyQt
- 17. Jak programowo przenieść pasek zadań systemu Windows?
- 18. Spraw, aby gradient przesuwał się bez końca po pasku postępu, tak jak w Windows 7
- 19. Pasek ładowania na pasku stanu?
- 20. Pasek postępu z 2 wskaźnikami
- 21. Qt Ukryj pasek zadań Pozycja
- 22. Jak utworzyć pasek narzędzi dla paska zadań w systemie Windows?
- 23. Ułożone belki na pasku zadań nie wypełniają rodzica
- 24. Zintegruj Qt z paskiem zadań Windows 7 za pomocą pythona?
- 25. jak kodować pasek postępu
- 26. Ogólny pasek postępu w Django
- 27. Przepełnianie tekście bootstrap pasku postępu
- 28. Jak wprowadzić alert JFrame na pasku zadań?
- 29. Jak wyświetlać postęp pobierania na pasku postępu w systemie Android?
- 30. zmianę wartości postępu jQuery UI pasku
Nawet obejmuje piękny film o tym samym temacie. – Larsenal
Wymaga .NET 3.5 lub 4. Wydaje się, że nie dotyczy .NET 2. –
3.5 jest rozpowszechniany z Windows 7 zgodnie z http://en.wikipedia.org/wiki/.NET_Framework – jocull