Отображение состояния батареи с помощью значка уведомлений в C#

Пример Показывать статус батареи дружелюбно в C# показывает, как нарисовать изображение батареи, чтобы показать состояние батареи. В этом примере отображается изображение аккумулятора и текстовое состояние аккумулятора в значке уведомлений.

В более ранних версиях Windows состояние батареи обычно было легко найти в панели задач. В Windows 10 она иногда исчезает. С большой работой вы можете снова включить ее. Вместо того чтобы идти на все эти проблемы каждый раз, когда он исчезает, я решил написать свой собственный монитор состояния для панели задач.

Чтобы создать программу, я добавил в форму компонент NotifyIcon. Я также добавил PictureBox, хотя вы не сможете увидеть его во время выполнения, потому что форма скрыта. Вы можете отобразить форму, чтобы увидеть PictureBox для целей отладки.

Когда программа запускается, она использует следующий код, чтобы полностью скрыть форму.

// Скрыть форму.
private void Form1_Load(object sender, EventArgs e)
{
    FormBorderStyle = FormBorderStyle.None;
    Size = new Size(0, 0);
    ShowInTaskbar = false;
    WindowState = FormWindowState.Minimized;
    Hide();

    ShowStatus();
}

Этот код не требует пояснений, за исключением метода ShowStatus, показанного в следующем коде.

// Последний отображаемый процент заряда.
private int Percent = -1;

// Обновляем состояние батареи.
private void ShowStatus()
{
    // Получаем проценты текущего заряда.
    PowerStatus status = SystemInformation.PowerStatus;
    int percent = (int)(status.BatteryLifePercent * 100);

    // Если процент не изменяется, ничего не делайте.
    if (Percent == percent) return;
    Percent = percent;

    // Отображение статуса в тексте NotifyIcon.
    niBatteryStatus.Text = percent.ToString() +
        "% " + status.PowerLineStatus.ToString();

    // Изменение значка.
    // Нарисуем изображение батареи.
    int wid = picIcon.ClientSize.Width / 2;
    int hgt = picIcon.ClientSize.Height;
    Bitmap battery_bm = BatteryStuff.DrawBattery(
        percent / 100f,
        wid, hgt,
        Color.Transparent, Color.Black,
        Color.Lime, Color.White,
        true);

    // Преобразуем изображение батареи в квадратный значок.
    Bitmap square_bm = new Bitmap(hgt, hgt);
    using (Graphics gr = Graphics.FromImage(square_bm))
    {
        gr.Clear(Color.Transparent);
        Point[] dest =
        {
            new Point((int)(0.5 * wid), 0),
            new Point((int)(1.5 * wid), 0),
            new Point((int)(0.5 * wid), hgt),
        };
        Rectangle source = new Rectangle(0, 0, wid, hgt);
        gr.DrawImage(battery_bm,
            dest, source, GraphicsUnit.Pixel);
    }
    picIcon.Image = square_bm;

    //
    Icon icon = Icon.FromHandle(square_bm.GetHicon());
    niBatteryStatus.Icon = icon;
}

Переменные Percent отслеживают последний процент от батареи, который был отображен.

Метод ShowStatus получает процент текущей загрузки аккумулятора и сравнивает его с переменной Percent. Если процент не изменился, метод выходит.

Далее метод обновляет свойство NotifyIcon компонента Text. Если вы наведите указатель мыши на значок уведомления, он отобразит этот текст. Это основной способ, которым вы можете использовать этот пример, чтобы узнать состояние батареи.

Затем метод использует метод DrawBattery для рисования небольшого изображения батареи. См. более ранний пример и загрузите его, чтобы посмотреть, как этот метод работы.

Метод DrawBattery рисует изображение батареи так, чтобы оно было относительно высоким и тонким, но значок должен быть квадратным. Если вы попытаетесь использовать значок, который не является квадратным, система изменяет его размер так, чтобы он был квадратным, и это исказило бы его.

Чтобы избежать этого искажения, программа рисует изображение батареи на середину нового квадратного растрового изображения. Затем код отображает квадратное изображение в форме PictureBox формы для целей отладки.

Наконец, метод преобразует квадратный битмап в значок и устанавливает для него свойство NotifyIcon компонента Значок.

Источник: http://csharphelper.com/blog/2016/09/display-battery-status-using-notify-icon-c/

1 Звезда2 Звезды3 Звезды4 Звезды5 Звезд (1 оценок, среднее: 5,00 из 5)
Adblock
detector