Виджет на C#, или Windows Forms Always On Bottom

265
05 сентября 2017, 08:06

Сделал приложение Windows Forms, хочу использовать его как виджет на рабочем столе, но не могу закрепить его так, чтобы оно находилось всегда сзади всех открытых процессов (то есть на рабочем столе). Почитал зарубежные сайты, способы описанные там не работают, может есть какой-то современный вариант это осуществить?

Answer 1

В событии Activated формы пишем:

private void Form1_Activated(object sender, EventArgs e)
{
    this.SendToBack();
}

Это будет постоянно размещать форму ниже всех остальных.

Чтобы форма была постоянно на рабочем столе, отключим возможность её минимизации:

this.MinimizeBox = false;
Answer 2

Вот так можно сделать форму, которую пользователь не сможет поместить поверх других. Однако, сама она появляется сверху и будет уходить вглубь по мере перехода в другие приложения.

class Form1 : Form
{
  protected override CreateParams CreateParams
  {
    get
    {
      const int WS_EX_NOACTIVATE = 0x08000000, WS_EX_APPWINDOW = 0x00040000;
      var cp = base.CreateParams;
      cp.ExStyle = (cp.ExStyle & ~WS_EX_APPWINDOW) | WS_EX_NOACTIVATE;
      return cp;
    }
  }
}
READ ALSO
DllImport в зависимости от условия

DllImport в зависимости от условия

Нужно подгружать разные нативные либы в зависимости от значения некоторой функцииНо название dll, которое указывается в DllImport, const, т

298
visual studio не видит классы?

visual studio не видит классы?

Скачал с сайта код проекта и подключил как на картинке, но visual studio не хочет видеть классыЧто и как поправить?

270
Сериализация без ссылок

Сериализация без ссылок

Как убрать z:Id="" и z:Ref="", для удобного ручного заполнения?

237