Толик Панков
hex_laden
............ .................. ................
Back October 20th, 2019 Forward
C# Всплывающая форма над областью уведомлений, делаем сами.

Продолжаем разговор о своем окне, всплывающем возле области уведомлений, там где NotifyIcon. Как в тех же мессенджерах при появлении нового сообщения.

На самом деле все оказывается довольно просто, и даже Ктулху вызывать пользоваться WinAPI не надо.

На первом этапе моделируем будущую всплывающую форму. Я, например, создал форму без границ (FormBorderStyle = none), поместил на нее TextBox, который будет отображать сообщение и PictureBox, который будет работать в качестве кнопки закрытия формы.

На форму добавляем необходимые компоненты, которые отвечают за отображение информации и таймер (tmrAni), который будет отвечать за анимацию всплытия формы.

1. Заводим переменные, сохраняющие позиции формы:

private int StartPosX; private int StartPosY;

Ну я еще добавил переменную для сообщения и экспортировал функцию WinAPI, прячущую текстовый курсор:

[System.Runtime.InteropServices.DllImport("user32.dll")]
private static extern bool HideCaret(IntPtr hWnd);
public string MessageText = "";


Плюс настроил в инициализации формы некоторые ее параметры:

public frmPopup()
{
    InitializeComponent();
    //Настройка формы
    this.TopMost = false;
    this.ShowInTaskbar = false;
}


TopMost = false нужен, чтоб форма всплывала из-за области уведомлений, а не загораживала ее собой.

2. Переопределяем обработчик события Load и в нем прячем форму за экран:

protected override void OnLoad(EventArgs e)
{
    //Прячем форму за экран
    StartPosX = Screen.PrimaryScreen.WorkingArea.Width - this.Width;
    StartPosY = Screen.PrimaryScreen.WorkingArea.Height;
    SetDesktopLocation(StartPosX, StartPosY);
    base.OnLoad(e);
    //запуск анимации всплытия
    tmrAni.Interval = 50;
    tmrAni.Start();

}


Туда же можно вставить запуск таймера, который будет анимировать всплытие формы (после base.OnLoad(e)).

Если просто вставить этот код в обработчик события Load, то форма на секунду появится на экране, и будет некрасиво.

3. Далее в обработчиках событий Load и Shown настраиваем нашу форму, например, присваиваем TextBox нужный текст и т.д.

private void frmPopup_Load(object sender, EventArgs e)
{
    //настраиваем TextBox с сообщением
    txtMessage.Height = this.Height - txtMessage.Location.Y - 3;
    txtMessage.Width = this.Width - txtMessage.Location.X - 3;
    txtMessage.BorderStyle = BorderStyle.None;
    txtMessage.BackColor = this.BackColor;
    txtMessage.Text = MessageText;
    txtMessage.ReadOnly = true;
    txtMessage.SelectionStart = 0;

    //и кнопку закрытия
    int CloseX = this.Width - pbClose.Width - 3;
    int CloseY = 3;
    pbClose.Location = new Point(CloseX, CloseY);
}

private void frmPopup_Shown(object sender, EventArgs e)
{
    HideCaret(txtMessage.Handle);
}


3. При каждом срабатывании таймера поднимаем форму на 5 пикселей, а когда форма покажется полностью, то останавливаем таймер и делаем ее "поверх всех окон" (TopMost = true;):

private void tmrAni_Tick(object sender, EventArgs e)
{
    //поднимаем форму на 5 пикселей
    StartPosY -= 5;

    //Если окно видно полностью - останавливаем таймер
    if (StartPosY < Screen.PrimaryScreen.WorkingArea.Height - Height)
    {
        tmrAni.Stop();
        this.TopMost = true;
    }
    else
    {
        SetDesktopLocation(StartPosX, StartPosY);
    }
}


Вот, что получилось:



Код примера целиком


На GitHub

Это репост с сайта http://tolik-punkoff.com
Оригинал: http://tolik-punkoff.com/2019/10/17/c-vsplyvayushhaya-forma-nad-oblastyu-uvedomlenij-delaem-sami/

Tags: , ,
Аццкий погодный информер.



Не, он и правда настолько аццкий и быдлокод, что я всем его даже не покажу. Редкий случай, когда мне почти стыдно. Там все, и наглое выдирание данных прямо из HTML, и стукнутое преобразование их в таблицу, CSV, а потом и DataSet, для дальнейшего анализа, и прочее, и прочее. Если дизайнер изменит сайт, с которого берется погода, то оно работать не будет, и не факт, что я буду это переделывать.

Изначально делалось по очень большой просьбе местных уфологов, плюс для того, чтобы поиграться с управляемым браузером WebKit .NET, который в результате из проекта был выкинут, поскольку оказался не сильно и нужен.

Единственное, что в нем действительно мне нравится - иконка в трее, отображающая последнюю температуру с заданной метеостанции.

В общем, скачать бинарники и исходники можно здесь, а ключик (у кого вдруг еще нет, или кто не из своих захочет на этот быдлокод посмотреть) спрашивать в редакции через Телеграм.

Это репост с сайта http://tolik-punkoff.com
Оригинал: http://tolik-punkoff.com/2019/10/20/atstskij-pogodnyj-informer/

Природо-интернетозащитная песня про Ёлочку

В лесу родилась ёлочка,
В лесу она росла.
Зимой и летом стройная,
Зеленая была.

Метель ей пела песенку:
«Спи, ёлочка, бай-бай!»
А сисадмин на ёлочку
Прикручивал вай-фай

Трусишка зайка серенький
И Леший с Водяным
Собралися под елочкой
С планшетом дорогим.

А кто и с ноутбуками
Под елочку пришел
Здесь нет Роскомнадзора, ведь
Халавный ВэПэЭн!

Везёт лошадка дровенки,
На дровнях - мужичок
А шел бы ты отсюда нах
От ёлки петушок.

И вот уже его бошка
На елочке висит
И наш Darknet Мизулина
Никак, бля, не сломит.

Это репост с сайта http://tolik-punkoff.com
Оригинал: http://tolik-punkoff.com/2019/10/20/prirodo-internetozashhitnaya-pesnya-pro-yolochku/

Настройка IPTABLES

На самом деле, жутко не люблю настраивать IPTables, поскольку синтаксис у него несколько инопланетный. Дома и на работе я как-то настроил один раз лет 10 назад и благополучно все забыл. Теперь вот приходится мучительно вспоминать: "Чем ты это делал? Ну вот этой вот мясорубкой.".

Настройки обновлены, старые под катом )

Вроде все правильно, но стойкое ощущение, что где-то накосячил. Кто больше шарит в IPTABLES, приму все комментарии по поводу данной темы.

Это репост с сайта http://tolik-punkoff.com
Оригинал: http://tolik-punkoff.com/2019/10/20/nastrojka-iptables/

Back October 20th, 2019 Forward