Загрузка...

Adding a progress bar to the C# program icon

Thread in C# created by RaysMorgan Oct 2, 2016. 2294 views

  1. RaysMorgan
    RaysMorgan Topic starter Oct 2, 2016 Че скажете 54,006 Mar 7, 2013
    Всем привет. Сегодня мы будем делать прогресс бар для иконки вашей программы, находящейся в "таск баре":
    [IMG]

    Нажимаем Проект -> Добавить класс
    [IMG]

    Назовем его TaskbarProgress.cs

    Удаляем всё из него и вставляем этот код:
    Code

    using System;
    using System.Runtime.InteropServices;

    public static class TaskbarProgress
    {
    public enum TaskbarStates
    {
    NoProgress = 0,
    Indeterminate = 0x1,
    Normal = 0x2,
    Error = 0x4,
    Paused = 0x8
    }

    [ComImportAttribute()]
    [GuidAttribute("ea1afb91-9e28-4b86-90e9-9e9f8a5eefaf")]
    [InterfaceTypeAttribute(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);
    }

    [GuidAttribute("56FDF344-FD6D-11d0-958A-006097C9A090")]
    [ClassInterfaceAttribute(ClassInterfaceType.None)]
    [ComImportAttribute()]
    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);
    }
    }

    Класс готов! Переходим к реализации.

    Переходим в тик вашего таймера для обновления статистики и вписываем:
    Code
    TaskbarProgress.SetValue(this.Handle, count_checked, count_lines);
    count_checked - переменная, отвечающая за количество проверенных строк
    count_lines - переменная, отвечающая за общее количество строк

    Для теста можно вписать
    Code
    TaskbarProgress.SetValue(this.Handle, 70, 100);
     
  2. renameduser_73608
    renameduser_73608 May 5, 2017 C# PHP JS NodeJS Python MongoDb 305 Jan 8, 2017
    А как изменить цвет (к примеру на красный или желтый)?
    Я вижу TaskbarStates, но как его использовать?

    ЗЫ Не ругайтесь за ап)
     
  3. mbr_inactive
    Чутка ниже в коде можно было пролистать.

    Функция SetState
     
  4. renameduser_73608
    renameduser_73608 Nov 29, 2017 C# PHP JS NodeJS Python MongoDb 305 Jan 8, 2017
    да это я уже давно понял, спасибо)))
     
Loading...
Top