Как сохранить окно поверх запущенной игры?

Я пишу программу и хочу, чтобы она отображалась даже поверх игры, запущенной в полноэкранном режиме (например, counter-strike).

Я использую Visual Basic как язык программирования. Приветствуется каждая помощь.


person Kanellis    schedule 06.08.2015    source источник
comment
Какие исследования вы уже провели?   -  person rory.ap    schedule 06.08.2015
comment
Спасибо, что ответили на @roryap! Я искал в Google (конечно) и на других форумах. Но ... к сожалению, я пока ничего не могу найти.   -  person Kanellis    schedule 06.08.2015
comment
stackoverflow .com / questions / 8543765 /   -  person jhegeman2    schedule 06.08.2015
comment
Да, я это уже проверил. Но я этого почти не понимал!   -  person Kanellis    schedule 06.08.2015
comment
@ jhegeman2 Это не сработает. По его словам, он хочет, чтобы программа отображалась даже поверх игры, запущенной в полноэкранном режиме! И эти игры не на высшем уровне. Это особое состояние ...   -  person Drarig29    schedule 06.08.2015
comment
что я делаю в этих особых случаях?   -  person Kanellis    schedule 06.08.2015


Ответы (2)


Отображать окно в полноэкранном приложении

Но это не лучший вариант. В полноэкранном режиме есть монопольный доступ к дисплею, и вы можете отображать его поверх него только в том случае, если вам разрешено его реализовать, если это игра в OpenGL, DirectX и BackBuffer для наложения ваших данных.

person Игорь Хоружа    schedule 14.07.2018
comment
Пожалуйста, не просто размещайте ссылки - включите основную часть связанной информации в свой ответ. - person CertainPerformance; 14.07.2018

Это не так уж и сложно. Вам просто нужно прочитать ответ на этот вопрос .

Самый простой способ сделать окно самым верхним - указать флаг WS_EX_TOPMOST при создании окна. .NET Framework скрывает большую часть работы по созданию окон за кулисами, но вы можете настроить параметры, когда вам нужно, переопределив _ 2_ вашего класса формы.

Вот код:

Protected Overrides ReadOnly Property CreateParams() As CreateParams
    Get
        Const WS_EX_TOPMOST As Integer = &H00000008

        Dim cp As CreateParams = MyBase.CreateParams
        cp.ExStyle = cp.ExStyle Or WS_EX_TOPMOST
        Return cp
    End Get
End Property

Но в любом случае, потому что это не сработает. Как я сказал jhegeman2, это не лучшее решение.

person Drarig29    schedule 06.08.2015
comment
Жду вашего ответа! - person Kanellis; 06.08.2015
comment
Думаю, решения нет ... Как сказал Rudedog2 здесь: "Unless you run your games in a window mode, you're going to have issues. Most games completely take over the display and popping up windows is not really an option without it giving windows back the display. You may have luck drawing your own, but it would compete with the game for display on the screen." - person Drarig29; 06.08.2015
comment
Вот еще один хороший ответ. Также возможна альтернатива: создание наложения DirectX, как в Steam. Есть пара вопросов по поводу этого: stackoverflow.com/questions/3549004/… stackoverflow.com/questions/2649702/…. - person Drarig29; 06.08.2015
comment
Предыдущие ссылки написаны на C #, но это не имеет значения, это даст вам представление, и в любом случае можно будет преобразовать код в vb.net ...;) - person Drarig29; 06.08.2015
comment
На всех форумах, которые я нашел, ответ таков: вы не можете. Есть еще один хороший пример из веток, доказывающих, что это невозможно. Я думаю, ты можешь отказаться от этого: / Жаль тебя. - person Drarig29; 06.08.2015
comment
WS_EX_TOPMOST не будет работать в полноэкранной игре DirectX. Вы просто выведете игру из полноэкранного режима, когда появится ваше окно. - person MickyD; 07.08.2015
comment
Да, это то, что я сказал. - person Drarig29; 07.08.2015