26

Re: AHK: IfWinNotActive для всех полноэкранных приложений

Ну, если только это, то таймер не нужен. Просто добавить проверку.


Lwin & Я::
If ActiveAppNotFullScreen() {
    Menu, MyMenu, Show  ; Показывать меню по нажатию Win-Z или Ctrl+Правый клик. ,
}
return

27

Re: AHK: IfWinNotActive для всех полноэкранных приложений

Все работает, спасибо.

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

28 (изменено: Malcev, 2017-02-25 00:47:36)

Re: AHK: IfWinNotActive для всех полноэкранных приложений

YMP пишет:

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

Проверяли сейчас на актуальной версии автохотки?
На какой системе и на какой игре?
Специально установил на Win7 Heroes of Might and Magic 3, которая запускается под разрешением 800 на 600.
A_ScreenWidth показал 800.
Также посмотрел исходник автохотки:
https://github.com/Lexikos/AutoHotkey_L … cript2.cpp
Там есть такая функция для A_ScreenWidth, A_ScreenHeight:

VarSizeType BIV_ScreenWidth_Height(LPTSTR aBuf, LPTSTR aVarName)
{
	return aBuf
		? (VarSizeType)_tcslen(ITOA(GetSystemMetrics(aVarName[13] ? SM_CYSCREEN : SM_CXSCREEN), aBuf))
		: MAX_INTEGER_LENGTH;
}

И такая для sysget:

	case SYSGET_CMD_METRICS: // In this case, aCmd is the value itself.
return output_var.Assign(GetSystemMetrics(ATOI(aCmd))); // Input and output are both signed integers.

Из чего можно сделать вывод, что и в первом и во втором случае идет обращение к GetSystemMetrics function.
https://msdn.microsoft.com/en-us/librar … s.85).aspx

29

Re: AHK: IfWinNotActive для всех полноэкранных приложений

АНК последний, Windows 10 x64, игра DeadHunt. Но при ближайшем рассмотрении эта игра ведёт себя странно, в ней оба варианта ActiveAppFullScreen (с переменными и с SysGet) то работают, то нет. Но isWindowFullScreen("A") стабильно не работает. Видимо, просто совпало. Сначала isWindowFullScreen и ActiveAppFullScreen обе не работали, потом я заменил у себя переменные на SysGet и моя функция заработала. Значит, просто чудила игра. Надо разбираться, что с ней не так. В Fallout 4 работают все три варианта, в Crysis тоже.

В общем, эта тема сложнее, чем казалась изначально.

30

Re: AHK: IfWinNotActive для всех полноэкранных приложений

В общем, при загрузке DeadHunt её клиентская область равна разрешению экрана, в меню она становится меньше и остаётся таковой в самой игре, что визуально никак не проявляется. Если в настройках сменить разрешение, то в дальнейшем клиентская область остаётся равной экрану до выхода из игры. Лучше здесь использовать размер окна, с ним таких изменений не происходит.