Si ha notado en la versión beta de Windows 7, si copia archivos u otras acciones del sistema, el ícono del explorador de Windows en la barra de tareas se llenará con una barra de progreso verde equivalente a la barra de progreso en el formulario. ¿Hay alguna forma de que, en mis formularios C#, pueda forzar la barra de progreso de mi barra de tareas para que coincida con el progreso de cualquier tarea que esté haciendo? Convirtiendo, transfiriendo, generando, hay tantos usos para esa barra de progreso.Barra de progreso de Windows 7 en la barra de tareas en C#?
Respuesta
Sí, necesita utilizar esta API.
Sí, Microsoft cubrió las nuevas funciones de la barra de tareas en el siguiente documento (fuentes incluidos): Windows 7 taskbar: Developer Resources
Para las personas que quieren dejar de leer la documentación y acaba de obtener algo que funciona ...
- Descargue el Windows API Code Pack for Microsoft .Net Framework.
- ejecutar el instalador que crea un archivo zip
- Extracto de los siguientes archivos DLL de la carpeta de archivos binarios del archivo zip:
Microsoft.WindowsAPICodePack.dll
Microsoft.WindowsAPICodePack.Shell.dll
- Añadir una referencia a ellos en su proyecto
- Ponga el siguiente código en su aplicación y modifíquelo según sea necesario:
-
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);
La descarga Nuget es un poco molesto, pero sí, funciona muy bien. Implementado en mi clase de controlador de barra de progreso :) – Nyerguds
He encontrado un artículo hermoso (Link) que proporciona una solución sencilla al problema barra de progreso barra de tareas. En resumen, se le indica que debe descargar el paquete de API de Windows from the MSDN website, añadiendo una referencia a la Microsoft.WindowsAPICodePack.Shell.dll que contiene, y por último añadir tres líneas de código para su aplicación:
Imports Microsoft.WindowsAPICodePack
Imports Microsoft.WindowsAPICodePack.Taskbar
// ...
TaskbarManager.Instance.SetProgressValue(X, 100)
donde X es el progreso que desea mostrar.
Tenga en cuenta que [se desaconsejan las respuestas solo de enlace] (http://meta.stackoverflow.com/tags/link-only-answers/info), entonces las respuestas deberían ser el punto final de una búsqueda de una solución (frente a otra escala más de referencias, que tienden a quedar obsoletas en el tiempo). Considere agregar una sinopsis independiente aquí, manteniendo el enlace como referencia. – kleopatra
Sólo quería añadir algo de animación de progreso barra de tareas para mi aplicación WinForms, sin tener que descargar los paquetes de código o cambiar a WPF usar TaskbarItemInfo.
La solución era una clase que utiliza la interfaz 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);
}
}
ejemplo de lo fácil que es usar:
TaskbarProgress.SetState(this.Handle, TaskbarProgress.TaskbarStates.Indeterminate);
or
TaskbarProgress.SetValue(this.Handle, 50, 100);
TaskbarProgress.SetState(this.Handle, TaskbarProgress.TaskbarStates.Error);
Esta es una respuesta increíblemente fantástica; no hay dependencias o descargas externas, y solo funciona – Ben
Si desea agregar SetOverlayIcon, como lo hice, asegúrese de agregar todos los métodos adicionales * en el orden correcto *. Consulte la respuesta aceptada para http://stackoverflow.com/questions/1024786/windows-7-taskbar-setoverlayicon-from-wpf-app-doesnt-work –
Desafortunadamente, esto rompe la aplicación cuando se ejecuta en Windows XP. ¿Alguna solución? –
- 1. barra de tareas de Windows 7 progreso
- 2. Barra de progreso de la Barra de tareas de Windows 7 en Java
- 3. .NET Barra de progreso en la barra de tareas en Windows 7
- 4. ¿Cómo mostrar el progreso en la barra de tareas de Windows 7 (usando Qt)?
- 5. Cómo obtener el botón de la barra de tareas de Windows para mostrar el progreso de la barra de progreso
- 6. Iconos de barra de tareas de Windows 7 Resaltar Color
- 7. Uso de TaskBarItemInfo en WPF para la barra de progreso en la barra de tareas de Win 7
- 8. Widget o barra de herramientas de la barra de tareas de Windows 7
- 9. El progreso de la barra de tareas de Windows 7 funciona en una aplicación pero no en otra
- 10. Uso de las funciones de la barra de tareas de Windows 7 en PyQt
- 11. Barra de progreso de estilo Windows 98
- 12. ¿Cómo se muestra el progreso en el botón de estado/barra de tareas usando Delphi 7?
- 13. Barra de progreso de Windows en Tkinter de Python
- 14. Actualizar la barra de progreso en la barra de notificaciones
- 15. ¿Obtener la lista de ventanas en la barra de tareas en Windows 7?
- 16. barra de progreso en la barra de título
- 17. Cómo establecer el icono de la barra de tareas de la aplicación en Windows 7
- 18. wxPython barra de progreso
- 19. Aplicación en la barra de tareas
- 20. Insertar en la barra de tareas
- 21. ¿Cómo creo una barra de herramientas para la barra de tareas en Windows?
- 22. ¿Integre Qt con la barra de tareas de Windows 7 utilizando Python?
- 23. Cambiar el icono en la barra de tareas de Windows 7 para una aplicación anclada
- 24. ¿Cómo asocio mi aplicación con un programa fijado en la barra de tareas de Windows 7?
- 25. Barra de progreso vertical
- 26. control de la agrupación de la barra de tareas de windows 7 para mi aplicación
- 27. barra de progreso circular
- 28. Django-apio barra de progreso
- 29. Subir la barra de progreso en Android?
- 30. agrupación de iconos de la barra de tareas de Windows 7 con varias ventanas similares
Incluso incluye un bonito vídeo sobre este mismo tema. – Larsenal
Requiere .NET 3.5 o 4. Parece que no es aplicable para .NET 2. –
3.5 se distribuye con Windows 7 de acuerdo con http://en.wikipedia.org/wiki/.NET_Framework – jocull