Visual Basic .Net, держите окна поверх других окон сверху

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

Если у меня и мои программы, и панель задач Windows настроены так, чтобы они всегда были сверху, Моя программа находится поверх панели задач, пока я не щелкну где-нибудь на панели задач, например, чтобы активировать другую программу.

Мой код выглядит следующим образом:

Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) _
    Handles MyBase.Load

    Me.Bounds = Screen.PrimaryScreen.Bounds
    Me.TopMost = True

    '...
End Sub

Я рассматривал возможность использования таймера для активации моей программы время от времени, но недостатком этого подхода является то, что если я печатаю в другом приложении, а фокус перемещается на мою программу, это очень раздражает.

Итак, мой вопрос заключается в следующем: есть ли способ, которым я могу взаимодействовать с панелью задач, чтобы моя программа всегда была поверх нее, независимо от чего-либо еще, или возможно ли периодически восстанавливать статус поверх, чтобы моя программа становилась поверх панели задач снова без перехода фокуса на мою программу?

Я предпочитаю, чтобы моя программа всегда была поверх панели задач, и щелчок по панели задач не делал временно мою программу невидимой. Например, если бы я мог установить z-порядок своего приложения на более высокий уровень, чем панель задач, это было бы лучше всего. Если в противном случае я смогу каким-то образом создать свою программу как часть панели задач, это тоже сработает.

PS: я включил панель поиска на панели задач, и моя программа должна полностью ее покрывать. Я не пользуюсь панелью поиска, и она дает мне выделенное место, не беспокоясь о том, чтобы закрыть какие-либо открытые программы.

PS2: Это только для меня, не нужно беспокоиться о тех, у кого другие предпочтения. Моя цель — оптимизировать рабочий процесс, поэтому чем меньше хлопот у меня будет в день, тем лучше.

Вот как это выглядит, когда приложение запущено, но нажатие на панель задач делает окно невидимым.: < img src="https://i.stack.imgur.com/VduAR.png" alt="введите здесь описание изображения">

Итак... Как я могу убедиться, что моя программа остается поверх панели задач, даже если я щелкну где-нибудь на панели задач?


person LPChip    schedule 23.11.2017    source источник
comment
что ты имеешь в виду ›поверх панели задач???   -  person Christopher H.    schedule 23.11.2017
comment
@zackraiyan смотрите изображение, которое я добавил: мое приложение физически расположено над панелью задач. В моем приложении я включил всегда поверх, но на панели задач это тоже есть. Если я нажму на саму панель задач, мое приложение будет перемещено за панель задач.   -  person LPChip    schedule 23.11.2017
comment
Кроме того, тому, кто поставил мне минус: пожалуйста, объясните, почему это стоит того?   -  person LPChip    schedule 23.11.2017
comment
Вместо того, чтобы пытаться конкурировать с постоянно доступной функциональностью панели задач, возможно, лучше создать панель миниатюр панели задач: msdn.microsoft.com/en-us/library/gg491726(v=vs.85).aspx или некоторые другие варианты для стыковки это прямо над панелью задач или даже скрыть его за пределами экрана и показывать, когда вы перемещаете мышь к краям экрана.   -  person Chase Rocker    schedule 23.11.2017
comment
Привет, @ChaseRocker, спасибо, что помогаешь мыслить нестандартно. Если бы я мог создать панель инструментов, которую я мог бы закрепить на панели задач, это было бы лучше всего, но я не смог найти какой-либо источник или объяснение того, как это сделать. Панель миниатюр не будет отображаться на экране все время, поэтому нажатие этих кнопок займет гораздо больше времени. Что касается их сокрытия, это означало бы, что я должен переместить позицию, и мне очень нравится держать ее там. (иначе панель задач все равно будет перед ним.   -  person LPChip    schedule 23.11.2017
comment
@ChaseRocker, но ты дал мне идею. Возможно, я смогу получить положение мыши по осям x и y, и когда она находится над моим окном, даже если она находится ниже панели задач, она все равно может активироваться и показывать ее. Это было бы очень некрасиво, но, по крайней мере, это был бы обходной путь, который лучше, чем тот, который у меня есть сейчас: не иметь панели задач сверху.   -  person LPChip    schedule 23.11.2017


Ответы (1)


Судя по всему, решение было довольно простым.

Я боялся побочных эффектов, но раствор, который я применил, работает отлично.

Я добавил таймер, включил его, и каждый тик он просто делает:

me.Topmost = true

Если я сейчас щелкну панель задач, программа, очевидно, будет отодвинута назад, но каждые 100 мс, когда тикает таймер, программа автоматически возвращается наверх, а приложение фактически не получает фокус.

person LPChip    schedule 29.12.2017