101

Re: AHK: Экранная лупа

Ну да.

Разработка AHK-скриптов:
e-mail dfiveg@mail.ru
Skype dmitry_fiveg

102

Re: AHK: Экранная лупа

Ещё можно тень "размазать", наложив несколько раз подряд, сдвигая на 1 px.

Разработка AHK-скриптов:
e-mail dfiveg@mail.ru
Skype dmitry_fiveg

103

Re: AHK: Экранная лупа

Как то видел окно которое не было видно в GetDC, то есть лупа смотрела сквозь него, и изображение под ним обновлялось, никто не знает что за стили могут быть у таких окон?

По вопросам возмездной помощи пишите письма E-Mail: serzh82saratov@mail.ru
OS: Win7x64, AutoHotkey_L v1.1.30.01 (Unicode 32-bit). AhkSpy, Hotkey

104

Re: AHK: Экранная лупа

Не думаю, что здесь есть какие-то стили.
Возможно directx окно.

105

Re: AHK: Экранная лупа

По смутным воспоминаниям какое то OSD из ахк скрипта. На GDI возможно вывести окно вне контекста рабочего стола? Хочу заблюрить кусок экрана, и обновлять blur исходя из того что под ним.

По вопросам возмездной помощи пишите письма E-Mail: serzh82saratov@mail.ru
OS: Win7x64, AutoHotkey_L v1.1.30.01 (Unicode 32-bit). AhkSpy, Hotkey

106

Re: AHK: Экранная лупа

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

107

Re: AHK: Экранная лупа

Malcev пишет:

setwindowdisplayaffinity

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

По вопросам возмездной помощи пишите письма E-Mail: serzh82saratov@mail.ru
OS: Win7x64, AutoHotkey_L v1.1.30.01 (Unicode 32-bit). AhkSpy, Hotkey

108 (изменено: Malcev, 2019-01-09 13:55:57)

Re: AHK: Экранная лупа

Думаю такое можно сделать 2 способами. Через gdi, но захватывая все видимые окна по очереди и отрисовывая их. Либо делая скриншот через апи лупы. Там есть такая функция, но это придется самому реализовывать. Еще можно попробовать сделать скриншот через gdi и если лупы видно не будет, то можно на окно лупы накладывать blur через dwm api.

109 (изменено: MandarinKa02, 2019-01-10 00:17:53)

Re: AHK: Экранная лупа

DEL

110

Re: AHK: Экранная лупа

setwindowdisplayaffinity

Там только один флаг.

Malcev пишет:

Через gdi, но захватывая все видимые окна по очереди и отрисовывая их.

Ну это жесть, там надо ещё Z-Order вычислять, чтобы знать какое на какое наложено, а PrintWindow не со всеми окнами дружит.

Malcev пишет:

Либо делая скриншот через апи лупы

Да, кажется это была лупа, но сейчас не могу найти рабочий пример, этот берёт картинку только на х64 и далее не обновляет, кушая процессор.


#NoEnv
#Persistent
#SingleInstance Force

OnExit, Uninitialize
SetBatchLines, -1

Gui, +E0x80000
Gui, +AlwaysOnTop -Caption
Gui,Show,w320 h240, MagnifierWindowAHK
Gui,+LastFound
WinGet,guiHwnd,Id


WinSet, Transparent, 255


hInstance := DllCall("GetWindowLong"
	, "UInt", guiHwnd
	, "UInt", GWL_HINSTANCE:=-6)


DllCall("LoadLibrary", "str", "magnification.dll")
DllCall("magnification.dll\MagInitialize")


WS_CHILD := 0x40000000
WS_VISIBLE := 0x10000000
MS_SHOWMAGNIFIEDCURSOR := 0x1

magHwnd := DllCall("CreateWindowEx"
	, "UInt", 0
	, "Str", "Magnifier"
	, "Str", "MagnifierWindow"
	, "UInt", WS_CHILD | MS_SHOWMAGNIFIEDCURSOR | WS_VISIBLE
	, "Int", 0
	, "Int", 0
	, "Int", 320
	, "Int", 240
	, "UInt", guiHwnd
	, "UInt", 0
	, "UInt", hInstance
	, "UInt", 0)



; Magnification transform matrix

Matrix := "1|0|0|"
        . "0|1|0|"
        . "0|0|1"

StringSplit, Matrix, Matrix, |

VarSetCapacity(magMatrix, 36, 0)
Loop, 9
{
	NumPut(Matrix, magMatrix, (A_Index-1)*4, "float")
}

DllCall("magnification.dll\MagSetWindowTransform"
	, "UInt", magHwnd
	, "UInt", &magMatrix)

loop
DllCall("magnification.dll\MagSetWindowSource"
	, "UInt", magHwnd
	, "Int", -110
	, "Int", 110
	, "Int", 320
	, "Int", 240)

return

Escape::
GuiEscape:
GuiClose:	
Uninitialize:
	Gui, Destroy 
	DllCall("magnification.dll\MagUninitialize")
	ExitApp
По вопросам возмездной помощи пишите письма E-Mail: serzh82saratov@mail.ru
OS: Win7x64, AutoHotkey_L v1.1.30.01 (Unicode 32-bit). AhkSpy, Hotkey

111 (изменено: Malcev, 2019-01-11 18:39:28)

Re: AHK: Экранная лупа

serzh82saratov пишет:

там надо ещё Z-Order вычислять

Не надо.
https://autohotkey.com/docs/commands/WinGet.htm#List

serzh82saratov пишет:

сейчас не могу найти рабочий пример

Пример для взятия скриншота:
https://www.codeproject.com/Articles/60 … on-library
Враппер апи лупы на автоит:
https://www.autoitscript.com/forum/topi … ipulation/

112 (изменено: serzh82saratov, 2019-01-11 18:52:44)

Re: AHK: Экранная лупа

Malcev пишет:

Не надо.

Как не надо, надо же всё равно смотреть какое выше, координаты чтобы края видимых за ним знать, и WinGet List всех окон это долго.

Malcev пишет:

Пример для взятия скриншота

В общем на АНК ничего нет.

По вопросам возмездной помощи пишите письма E-Mail: serzh82saratov@mail.ru
OS: Win7x64, AutoHotkey_L v1.1.30.01 (Unicode 32-bit). AhkSpy, Hotkey

113

Re: AHK: Экранная лупа

serzh82saratov пишет:

надо же всё равно смотреть какое выше

WinGet list возвращает их в порядке z-order.

serzh82saratov пишет:

Вообщем на АНК ничего нет

Переведи с автоит.
Там вызовы dllcall практически идентичны.

114

Re: AHK: Экранная лупа

Прошу не писать "вобщем" и "вообщем".

115

Re: AHK: Экранная лупа

Исправил.

По вопросам возмездной помощи пишите письма E-Mail: serzh82saratov@mail.ru
OS: Win7x64, AutoHotkey_L v1.1.30.01 (Unicode 32-bit). AhkSpy, Hotkey

116

Re: AHK: Экранная лупа

Malcev пишет:

WinGet list возвращает их в порядке z-order.

Знаю, но это же всё равно долго.

Malcev пишет:

Там вызовы dllcall практически идентичны.

Попробую.

Malcev пишет:

Пример для взятия скриншота:

Это совсем тяжело, а в чём примерно отличие от DllCall("GetDC", "UPtr", 0, "UPtr")?

По вопросам возмездной помощи пишите письма E-Mail: serzh82saratov@mail.ru
OS: Win7x64, AutoHotkey_L v1.1.30.01 (Unicode 32-bit). AhkSpy, Hotkey

117

Re: AHK: Экранная лупа

Отличие в том, что есть возможность внести в список окна, которые не надо захватывать:
https://docs.microsoft.com/en-us/window … filterlist

118 (изменено: Malcev, 2019-01-11 21:35:19)

Re: AHK: Экранная лупа

serzh82saratov пишет:

Да, кажется это была лупа, но сейчас не могу найти рабочий пример, этот берёт картинку только на х64 и далее не обновляет, кушая процессор.

Для ahk64 бит функцию MagSetWindowSource надо вызывать так:

VarSetCapacity(rect, 16, 0)
NumPut(-110, rect, 0, "int")
NumPut(110, rect, 4, "int")
NumPut(320, rect, 8, "int")
NumPut(240, rect, 12, "int")
loop
{
   DllCall("magnification.dll\MagSetWindowSource", "ptr", magHwnd, ptr, &rect)
   sleep 50
}

Если требуется передавать в вызове копию структуры, то есть свои правила.

Structs and unions of size 8, 16, 32, or 64 bits, and __m64 types, are passed as if they were integers of the same size. Structs or unions of other sizes are passed as a pointer to memory allocated by the caller.
So indeed, struct S {int;int;} must be passed as int64 for x64 calling convention, and it can be for cdecl too. But struct S2 {char c1;short s;char c2;} would need to be passed as "ptr", &S2 for x64. But, for cdecl, S2 would be passed as "int64", c1 | (s << 16) | (c2 << 32), you cannot do "char", c1, "short", s, "char", c2. Finally struct d {double; double; ... double;} must be passed as "ptr", &d for x64 and "double", d1, ..., "double", dn for cdecl.

119 (изменено: serzh82saratov, 2019-01-11 21:39:43)

Re: AHK: Экранная лупа

Malcev пишет:

Для ahk64 бит функцию MagSetWindowSource надо вызывать так:

Работает! А на х32 это возможно запускать?

Malcev пишет:

Если требуется передавать в вызове копию структуры

А зачем это может понадобится?
Не пойму, всё что надо это вроде как правильно вызвать:

DllCall("magnification\MagSetWindowFilterList","Ptr",magHwnd,"Int",0,"Int",1,"Ptr*",guiHwnd)

может в "Ptr*" надо как то по другому передавать.

По вопросам возмездной помощи пишите письма E-Mail: serzh82saratov@mail.ru
OS: Win7x64, AutoHotkey_L v1.1.30.01 (Unicode 32-bit). AhkSpy, Hotkey

120

Re: AHK: Экранная лупа

serzh82saratov пишет:

А на х32 это возможно запускать?

На x32 должен работать твой код из 110 поста.
Но в udf пишут:

; Built-In Windows Magnification API (since Windows Vista)
;
; NOTE: TRY to run this at the same bit-mode your O/S is running in, as the GUI can be funky at times
; when run in an incompatible bit mode.  So for 64-bit O/S's, run this as x64 only!

Не знаю так оно или нет - я не копался.

serzh82saratov пишет:

А зачем это может понадобится?

Это надо спрашивать у авторов библиотеки.

serzh82saratov пишет:

Не пойму, всё что надо это вроде как правильно вызвать:

Не понимаю, что ты хочешь добиться, но если сделать принтскрин через апи лупы, то возможно придется поплясать с бубном, так как MagImageScalingCallback() - устарела и может по каким-то причинам не пойти, а аналогов у нее нету.

121

Re: AHK: Экранная лупа

Copy of structure vs pointer:
https://flaviocopes.com/golang-methods-receivers/
https://github.com/golang/go/wiki/CodeR … eiver-type

122

Re: AHK: Экранная лупа

Malcev пишет:

Copy of structure vs pointer:

Это для меня дебри, я даже не понял к чему ты это привёл.

Malcev пишет:

Не понимаю, что ты хочешь добиться, но если сделать принтскрин через апи лупы, то возможно придется поплясать с бубном, так как MagImageScalingCallback() - устарела и может по каким-то причинам не пойти, а аналогов у нее нету.

А зачем нужна MagImageScalingCallback?
С MagSetWindowFilterList разобрался. То есть теперь мне надо запустить окно лупы скрыто, запустить окно с блюром, добавить его в исключения и как то выуживать битмап из лупы которая показывает в скрытом окне экран в тех же координатах что и окно с блюром.

По вопросам возмездной помощи пишите письма E-Mail: serzh82saratov@mail.ru
OS: Win7x64, AutoHotkey_L v1.1.30.01 (Unicode 32-bit). AhkSpy, Hotkey

123

Re: AHK: Экранная лупа

Malcev пишет:

Не знаю так оно или нет - я не копался.

Иногда запускается под х32.

По вопросам возмездной помощи пишите письма E-Mail: serzh82saratov@mail.ru
OS: Win7x64, AutoHotkey_L v1.1.30.01 (Unicode 32-bit). AhkSpy, Hotkey

124 (изменено: Malcev, 2019-01-11 22:28:23)

Re: AHK: Экранная лупа

serzh82saratov пишет:

Это для меня дебри, я даже не понял к чему ты это привёл.

Ты же спрашивал почему авторы функции MagSetWindowSource  требуют чтобы им отправляли копию структуры, а не указатель на структуру.
Наверное, это происходит из-за каких-то причин описываемых по этим ссылкам.
Не совсем понял твой алгоритм.
Я изначально предполагал 2 алгоритма.
Первый:
1) Создать прозрачное окно с лупой
2) Брать снимок через Gdi
3) Анализировать этот снимок
4) По результатам анализа делать размытие через wdm на окно с лупой.
Если первый чем-то не подходит, то второй:
1) Создать прозрачное окно Gdi
2) Создать прозрачное окно с лупой
3) Брать снимок через лупу, беря в исключения окно Gdi
4) Анализировать этот снимок
5) По результатам анализа делать размытие через gdi на окно с Gdi.
Для второго алгоритма нужен MagImageScalingCallback, иначе не достать информацию с снимка через лупу.

125

Re: AHK: Экранная лупа

Malcev пишет:

Если первый чем-то не подходит, то второй:

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

По вопросам возмездной помощи пишите письма E-Mail: serzh82saratov@mail.ru
OS: Win7x64, AutoHotkey_L v1.1.30.01 (Unicode 32-bit). AhkSpy, Hotkey