Загрузка...

Добавляем прогресс бар в иконку программы C#

Тема в разделе C# создана пользователем RaysMorgan 2 окт 2016. 2282 просмотра

Загрузка...
  1. RaysMorgan
    RaysMorgan Автор темы 2 окт 2016 https://lolz.live/support-tickets/open 51 794 7 мар 2013
    Всем привет. Сегодня мы будем делать прогресс бар для иконки вашей программы, находящейся в "таск баре":
    [IMG]

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

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

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

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

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

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

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

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

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