«Поместите» WinForm прямо на рабочий стол - PullRequest
0 голосов
/ 05 октября 2018

Так что я хочу иметь что-то похожее на наложение рабочего стола.Итак, дело в том, что я попытался нарисовать обои на рабочем столе напрямую, но это будет перерисовано, и из того, что я прочитал, действительно нет хорошего способа обойти это.Поэтому я попытался использовать прозрачную WinForm без текста без текста.

Проблема, с которой я столкнулся, заключается в том, что нажатие Windows + D скроет приложение иЯ не нашел способа предотвратить это или поднять это снова.Также я прочитал, что установка формы в качестве дочернего элемента рабочего стола может также вызвать проблемы.

До сих пор я устанавливал положение формы непосредственно над рабочим столом:

[DllImport("user32.dll")]
    static extern bool SetWindowPos(IntPtr hWnd, IntPtr hWndInsertAfter, int X, int Y, int cx, int cy, uint uFlags);

    static readonly IntPtr HWND_BOTTOM = new IntPtr(1);
    const UInt32 SWP_NOSIZE = 0x0001;
    const UInt32 SWP_NOMOVE = 0x0002;
    const UInt32 SWP_NOACTIVATE = 0x0010;
    //By calling SetWindowPos(Handle, HWND_BOTTOM, 0, 0, 0, 0, SWP_NOMOVE | SWP_NOSIZE | SWP_NOACTIVATE); it will move to the very back of all windows.

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

1 Ответ

0 голосов
/ 05 октября 2018

Вы должны запустить поток, который за небольшую часть времени (например, 100 мс) вызывает BringWindowToTop api и выводит аппликацию вашего окна наверх, он решит Win + D выпуск.

[DllImport("user32.dll", SetLastError=true)]
static extern bool BringWindowToTop(IntPtr hWnd);

[DllImport("user32.dll", SetLastError=true)]
static extern bool BringWindowToTop(HandleRef hWnd);
...