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 выдает неправильные координаты, зависит от игры и разрешения экрана устанавливаемого игрой.

5

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

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

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

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

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