1

Тема: Клик сквозь поверхностное окно

/*
WinSet_Click_Through = Делает окно сквозь кликабельным

I = ID окна чтобы сделать клики сквозь

T = Transparency к окну

если окно не существует оно возвращается в Return 0
*/

WinSet_Click_Through(I, T="254") {
    IfWinExist, % "ahk_id " I
    {
        If (T == "Off")
        {
            WinSet, AlwaysOnTop, Off, % "ahk_id " I
            WinSet, Transparent, Off, % "ahk_id " I
            WinSet, ExStyle, -0x20, % "ahk_id " I
        }
        Else
        {
            WinSet, AlwaysOnTop, On, % "ahk_id " I
            If(T < 0 || T > 254 || T == "On")
                T := 254
            WinSet, Transparent, % T, % "ahk_id " I
            WinSet, ExStyle, +0x20, % "ahk_id " I
        }
    }
    Else
        Return 0
}


Gui, 1: -Caption +AlwaysOnTop +E0x08000000 +Lastfound 
Gui, 1: Margin, 0, 0
ID := WinExist()
Gui, 1: Add, Picture,, E:\Bind.png
Gui, 1: Show, NA x127 y71, Bind1
WinSet_Click_Through(ID)
GuiControl,, Bind1, Un-Clickable 

Я написал код, который показывает картинку поверх всех окон. При щелчке на картинке щелчок посылается за нее. Собственно вопрос встает в производительности активного окна (не GUI картинки). В окне над которым GUI картинка FPS без включенного скрипта составляет 120, со включенным 99-101. Меня раздражают небольшие "пролаги" внутри этого окна со включенным скриптом. Есть какие-нибудь идеи как сделать щелчок через GUI картинку без урезания FPS'a в окне под GUI картинкой?

2

Re: Клик сквозь поверхностное окно

Это весь скрипт или есть еще продолжение, со сменой картинки или вроде того?

Win 10 x64
AHK v1.1.33.02
                       Справка тебе в помощь.

3

Re: Клик сквозь поверхностное окно

WinSet_Click_Through(I, T="254") {
    IfWinExist, % "ahk_id " I
    {
        If (T == "Off")
        {
            WinSet, AlwaysOnTop, Off, % "ahk_id " I
            WinSet, Transparent, Off, % "ahk_id " I
            WinSet, ExStyle, -0x20, % "ahk_id " I
        }
        Else
        {
            WinSet, AlwaysOnTop, On, % "ahk_id " I
            If(T < 0 || T > 254 || T == "On")
                T := 254
            WinSet, Transparent, % T, % "ahk_id " I
            WinSet, ExStyle, +0x20, % "ahk_id " I
        }
    }
    Else
        Return 0
}

Для работы с прозрачностью окон, ниже используется любой код по надобности. В моем случае это кусок, в котором есть продолжение.

4 (изменено: Alectric, 2014-04-05 18:54:18)

Re: Клик сквозь поверхностное окно

По моему фпс у Вас снижает другая часть кода...
Или Вы пробовали запускать именно этот кусок?

Win 10 x64
AHK v1.1.33.02
                       Справка тебе в помощь.

5

Re: Клик сквозь поверхностное окно

Да, именно этот кусок. В принципе не важно какой код запускать, везде способы делать клик сквозь это через прозрачный фон, а прозрачный фон снижает фпс.


Gui -Caption +AlwaysOnTop +E0x08000000 +Lastfound
Gui Color, 000000
Gui Margin, 0, 0
Gui Show, NA x0 y0, GUI Window
WinSet, TransColor, 0, GUI Window
Winset, ExStyle, +0x20, GUI Window

Последние две строчки даже в этом коде делают фпс ниже.

6

Re: Клик сквозь поверхностное окно

А что за окно, над которым прозрачный фон? Это полноэкранный режим? Какова загрузка ЦП при нормальных условиях? А при использовании прозрачного фона поверх основного окна?

7

Re: Клик сквозь поверхностное окно

В окне без рамки. 6-18% ЦП при нормальных с кодом на окна без прозрачности, с прозрачностью 24-30%

8

Re: Клик сквозь поверхностное окно

ypppu пишет:

А что за окно, над которым прозрачный фон? Это полноэкранный режим?

9

Re: Клик сквозь поверхностное окно

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

10

Re: Клик сквозь поверхностное окно

В игре есть счётчик FPS или это на глазок? На картинке есть области с полной или частичной прозрачностью? Которое окно во время работы является активным?

11

Re: Клик сквозь поверхностное окно

Да, если нет счетчика(например, в другой видеоигре), то использую Fraps, в котором также видно меньше FPS'а чем обычно. Да и на глаз очень сильно заметен - "пролаг" (дерганье, не плавные движения). Все только на активном игровом окне.

12

Re: Клик сквозь поверхностное окно

Разберитесь хотя бы для себя, что такое "полная прозрачность", а что такое "частичная прозрачность". Что есть "окно поверх остальных окон", а что есть "активное окно". У меня складывается впечатление, что Вы забабахали полупрозрачное окно и поставили его поверх окна игры в полноэкранном режиме. А ставить что-либо поверх всех окон в полноэкранном режиме - зачастую, приводит к диким мельканиям.

Вообще желательно приложить снимок экрана, или короткий видеоролик выложить.

13

Re: Клик сквозь поверхностное окно

Странникх пишет:

Да, именно этот кусок. В принципе не важно какой код запускать, везде способы делать клик сквозь это через прозрачный фон, а прозрачный фон снижает фпс.


Gui -Caption +AlwaysOnTop +E0x08000000 +Lastfound
Gui Color, 000000
Gui Margin, 0, 0
Gui Show, NA x0 y0, GUI Window
WinSet, TransColor, 0, GUI Window
Winset, ExStyle, +0x20, GUI Window

Последние две строчки даже в этом коде делают фпс ниже.

А если убрать только последнюю строку, разница есть?

По вопросам возмездной помощи пишите на E-Mail: serzh82saratov@mail.ru Telegram: https://t.me/sergiol982
Win10x64 AhkSpy, Hotkey, ClockGui

14

Re: Клик сквозь поверхностное окно

Извиняюсь за долгие ответы. Разницы нет.

#NoEnv
Gui -Caption +AlwaysOnTop +Lastfound +E0x08000000
Gui Margin, 0, 0
Gui Color, 0
Gui Add, Picture,, C:\Scripts\Target.png
Gui Show, NA x0 y0, GUI Window
WinSet, TransColor, 0, GUI Window
;Winset, ExStyle, +0x20, GUI Window
return

http://images.vfl.ru/ii/1398093866/3ccc1d96/4903377_m.jpg
http://images.vfl.ru/ii/1398093869/856d49a4/4903379_m.jpg
В кратце, скрипт добавляет просто картинку еще одного прицела с прозрачным фоном. Сама игра находится в разрешении 1920 на 1080 (Оконный режим) без загаловка. Скрины немного обрезаны сверху. FPS виден в правом нижнем углу. Первая картинка четко демонстрирует FPS со включенным скриптом, вторая без. Настройки разрешения:
http://images.vfl.ru/ii/1398093873/37f83084/4903380_m.jpg
Я все обо этом говорю со своего начала изучения Gui. FPS сильно падает и самое главное - из-за этого появляются "пролаги" (дерганье, фризы и т.д.)
Я пробовал задавать приоритет активного окна игры (в данном примере Team Fortress 2), но никакого результата. Пробовал обрезать картинку до минимального. Пробовал в самом фотошопе делать фон прозрачным, но скрипт все равно ставит фон как непрозрачный. Много пробовал вариантов, которые попадались в интернете, но ничего похожего на мои запросы мне не доводилось видеть. Поэтому я до сих пор ищу решение на данную проблему. Надеюсь, вы сможете понять проблему и открыть неведомое мне решение.

15

Re: Клик сквозь поверхностное окно

Кстати, возможно это особенность игры, потому что игры от Valve, если считаются не активными (т.е. находятся под другим окном или в фоновом режиме), снижают фпс, чтобы разгрузить процессор.

16

Re: Клик сквозь поверхностное окно

Правда нет решения?

17

Re: Клик сквозь поверхностное окно

Поднимаю проблему, до сих пор нуждаюсь в решении этой проблемы.

18 (изменено: kharlashkin, 2014-06-26 10:50:27)

Re: Клик сквозь поверхностное окно

Delete

19

Re: Клик сквозь поверхностное окно

Обнаружил удивительную особенность - при обычном стиле Windows 7 значение ФПС'а игр не падает, но глазами видно, что картинка дергается раза в три сильнее, чем включить прозрачность окна на, скажем, упрощенном стиле Windows 7.
Не понимаю в чем проблема, хочется поиграть в оконную игру, над которой было бы какое-нибудь прозрачное GUI AHK без потери плавности картинки.