1

Тема: Взаимодействие с GUI, отображаемым поверх полноэкранной игры

Здравствуйте. Я пытаюсь реализовать GUI, которое отображается поверх игры, запущенной в полноэкранном режиме. С самим отображением проблем нет (использую +AlwaysOnTop), однако при взаимодействии с данным GUI игра сворачивается. Есть ли какой-то способ это предотвратить?

2

Re: Взаимодействие с GUI, отображаемым поверх полноэкранной игры

stealzy, к сожалению, не помогло, игра сворачивается сразу после показа GUI.

3 (изменено: Gh0stz, 2018-08-21 01:11:08)

Re: Взаимодействие с GUI, отображаемым поверх полноэкранной игры

stealzy, да, заменял название окна на своё, добавлял "NA", результата не дало.

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

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

4 (изменено: stealzy, 2018-08-21 14:46:20)

Re: Взаимодействие с GUI, отображаемым поверх полноэкранной игры

Так можно сделать gui прозрачным для кликов мыши, а событие клика определять по координатам курсора в момент клика:

#SingleInstance Force
#NoEnv
hWnd := WinExist("Окно игры")
Gui WinPicture: +HwndGuiH -Caption -Border +AlwaysOnTop +ToolWindow +Owner%hWnd% +Lastfound +E0x20 ; +Disabled
Gui WinPicture: Margin, 0, 0
Gui WinPicture: Color, 0
WinSet TransColor, 0 200
Gui WinPicture: Add, Button,, My Button
Gui WinPicture: Show, NA
Return

Esc::ExitApp

#If WinActive("ahk_id" hWnd)
*LButton::
	WinGetPos, guiX, guiY, guiWidth, guiHeight, % "ahk_id" GuiH
	CoordMode, Mouse, Screen
	MouseGetPos, cursorX, cursorY, cursorWin
	If (cursorX>guiX and cursorX<guiX+guiWidth and cursorY>guiY and cursorY<guiY+guiHeight) {
		SetTimer, Action, -1
	} Else {
		Send {LButton Down}
		ToolTip % "cursorX= " cursorX ", cursorY= " cursorY "`nguiX= " guiX ", guiY= " guiY
	}
Return
*~LButton Up::Return
#If

Action:
	MsgBox
Return

В некоторых играх MouseGetPos выдает неправильные координаты, зависит от игры и разрешения экрана устанавливаемого игрой.

Win7x64 up to 2018, AutoHotkey 1.1.30.00

5

Re: Взаимодействие с GUI, отображаемым поверх полноэкранной игры

stealzy, идеально работает в нужной мне игре, спасибо за помощь!

6 (изменено: Gh0stz, 2018-12-30 12:32:43)

Re: Взаимодействие с GUI, отображаемым поверх полноэкранной игры

Уже долго время код, опубликованный выше, работает как часы, но есть один нюанс. GUI нормально отображается только на Windows 10, на других ОС (Win 7/8.1) GUI видно только в момент переключения между окнами (Alt+Tab), при этом нет никаких сообщений об ошибке. Игра используется одна и та же. Возможно, кому-то известно, как эту проблему можно решить?

7 (изменено: Foma, 2019-09-12 09:38:30)

Re: Взаимодействие с GUI, отображаемым поверх полноэкранной игры

А с моей игрой  +AlwaysOnTop никак не помогает.
Даже, если в полноэкранном режиме игры заново отослать окну GUI +AlwaysOnTop, оно не появляется. Вне игры, или если игра в оконном режиме, всё работает замечательно.
  Можно как-то преодолеть эту проблему?

8

Re: Взаимодействие с GUI, отображаемым поверх полноэкранной игры

Gh0stz, это выясняется экспериментально - видно ли в игре другие окна поверх всех (диспетчер задач), видно ли окно без TransColor, ...
Foma, если через DirectX не осилите, то нет.

Win7x64 up to 2018, AutoHotkey 1.1.30.00

9

Re: Взаимодействие с GUI, отображаемым поверх полноэкранной игры

Foma, если осилите через DirectX, то поделитесь с форумом.
Я так и не осилил - не получается у меня хукать endscene у чужих directx приложений, как это делает фрапс - приложение валится.
http://forum.script-coding.com/viewtopic.php?id=14526

10 (изменено: Foma, 2019-09-13 09:37:12)

Re: Взаимодействие с GUI, отображаемым поверх полноэкранной игры

Понял, сдаюсь.
PS. Пробовал хоть что-то поверх вывести. ToolTip и тот не показывается.

11 (изменено: Foma, 2019-09-17 08:45:40)

Re: Взаимодействие с GUI, отображаемым поверх полноэкранной игры

Вот эта штука справляется с задачей: https://recursiontracker.com/
Видео: https://www.youtube.com/watch?v=8XImO6ul1gg

12

Re: Взаимодействие с GUI, отображаемым поверх полноэкранной игры

Вот тут что-то появилось: http://forum.script-coding.com/viewtopi … 11#p136111, но мне ничего не понятно.