1

Тема: AHK: Скрестить AHKскрипт с новой тулзой мелкомягких PowerToys

Доброго времени суток, знатоки AHK.

Вопрос у меня к вам несовсем стандартный. Недавно узнал о такой неплохой тулзовине как PowerToys. После 6 лет жизни на MacOS-и эта тулза прям глоток воздуха в виндозе.

В этой тулзе есть очень интересная фича "FancyZones" Кратко: преднамеченные лейаут окон.
Для меня, в этой фиче, есть интересная функциональность: начиная перемещать окно по экрану + зажимаешь клавишу Shift (и/или вторую клавишу мышки) и на экране отображаются места для окон в текущем лейауте. Что позволяет тебе быстро переместить окно в нужные для тебя место.(вот маленькое видео)

Но есть одна маленькая проблема - эта функция работает только когда перетягиваешь окно за TitleBar. А я привык перетягивать окна скриптом от Androgen-a (чуть-чуть переделанный скрипт из справки к AutoHotkey - Easy Window Dragging (EWD)) - средней клавишей мыши за любую часть окна. И при использовании последнего, при зажатой клавише Shift, лейаут на экране не отображается.

Вот теперь я подошел к моей просьбе - может кто то из форумчан знает как скрестить функциональность FancyZones со скриптом Androgen-a?

Жизнь стоит того чтобы не быть сволочью. (с) Разные Люди

2

Re: AHK: Скрестить AHKскрипт с новой тулзой мелкомягких PowerToys

Если любите программировать, проще самому этот функционал на AHK организовать.

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

3

Re: AHK: Скрестить AHKскрипт с новой тулзой мелкомягких PowerToys

А если так переместить окно блокнота?
Надо двигать за любое место окна кроме поля ввода.

WM_NCLBUTTONDOWN := 0xA1, HTCAPTION := 2

~LShift & ~LButton::
	PostMessage, WM_NCLBUTTONDOWN, HTCAPTION, , , % "ahk_id " WinExist("A") 
	return
По вопросам возмездной помощи пишите на E-Mail: serzh82saratov@mail.ru
Win10x64 v2004, AutoHotkey_L v1.1.33.02 (Unicode 32-bit). AhkSpy, Hotkey, ClockGui

4 (изменено: Mikki, 2020-06-02 13:51:56)

Re: AHK: Скрестить AHKскрипт с новой тулзой мелкомягких PowerToys

teadrinker Сначала понял вашу фразу не правильно Потом перечитал. Понял правильно. И - для меня такое реализовать на АХК довольно таки челенджное задание. Я и так сейчас обучаюсь сразу стеку технологий, так еще и это сюда вплетать. Некада. Да и не вижу необходимости заново изобретать колесо.
serzh82saratov не совсем понимаю что делать с приведенным вами кодом: просто вставил на выполнение - ни чего не происходит визуального.

Жизнь стоит того чтобы не быть сволочью. (с) Разные Люди

5

Re: AHK: Скрестить AHKскрипт с новой тулзой мелкомягких PowerToys

Запустить, с помощь его хоткея LShift & LButton переместить окно например блокнота, смотреть появилось ли лейаут окон.

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

6

Re: AHK: Скрестить AHKскрипт с новой тулзой мелкомягких PowerToys

serzh82saratov нажал LShift & LButton, отпустил, начал перемещать окно за тайтлбар - ни чего не отображается на экране.

Жизнь стоит того чтобы не быть сволочью. (с) Разные Люди

7

Re: AHK: Скрестить AHKскрипт с новой тулзой мелкомягких PowerToys

Mikki пишет:

отпустил

Даже не знаю как ещё объяснить.
Надо переместить окно с помощью моего кода.

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

8

Re: AHK: Скрестить AHKскрипт с новой тулзой мелкомягких PowerToys

Использовать мой код вместо Easy Window Dragging.

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

9

Re: AHK: Скрестить AHKскрипт с новой тулзой мелкомягких PowerToys

serzh82saratov пишет:

А если так переместить окно блокнота?
Надо двигать за любое место окна кроме поля ввода.

Mikki, очевидно, нужно, запустив код, перемещать окно мышью "за любое место окна кроме поля ввода", удерживая левый шифт.
serzh82saratov, проблема в том, что у блокнота кроме поля ввода не так уж много мест — строка меню, разве что.

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

10

Re: AHK: Скрестить AHKскрипт с новой тулзой мелкомягких PowerToys

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

Жизнь стоит того чтобы не быть сволочью. (с) Разные Люди

11

Re: AHK: Скрестить AHKскрипт с новой тулзой мелкомягких PowerToys

teadrinker
Я знаю, это же просто тест.
Интереса ради установил тулзу, с моим кодом работает.
Ещё бы понять как отправить WM_NCLBUTTONDOWN без клика в окно, и была бы хорошая альтернатива архаичному EWD.
Блокировать LButton нельзя, но и кликать в окно тоже.
Например если наложить на блокнот это окно, и попробовать переместить блокнот, почему по твоему это не сработает?

WM_NCLBUTTONDOWN := 0xA1, HTCAPTION := 2 
WS_EX_NOACTIVATE := 0x08000000 

Gui, -Caption  +AlwaysOnTop +E%WS_EX_NOACTIVATE% +LastFound
Gui, Show, na w333 h333 
WinSet, TransParent, 55
Return
 
~LShift & ~LButton::
	WinExist("A")
	PostMessage, WM_NCLBUTTONDOWN, HTCAPTION
	return
По вопросам возмездной помощи пишите на E-Mail: serzh82saratov@mail.ru
Win10x64 v2004, AutoHotkey_L v1.1.33.02 (Unicode 32-bit). AhkSpy, Hotkey, ClockGui

12

Re: AHK: Скрестить AHKскрипт с новой тулзой мелкомягких PowerToys

serzh82saratov пишет:

Интереса ради установил тулзу, с моим кодом работает.

Ээээ, а можно подробнее - что работает и как работает? Потому что у меня ни чего нового не добавилось с твоим кодом.

Жизнь стоит того чтобы не быть сволочью. (с) Разные Люди

13

Re: AHK: Скрестить AHKскрипт с новой тулзой мелкомягких PowerToys

Если перетаскиваю блокнот, появляются "FancyZones".

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

14

Re: AHK: Скрестить AHKскрипт с новой тулзой мелкомягких PowerToys

serzh82saratov да. сработало. Почемуто тольуо с блокнотом. Ни с каким другим приложением не работает. Тапаю не на текстовое поле.

Жизнь стоит того чтобы не быть сволочью. (с) Разные Люди

15

Re: AHK: Скрестить AHKскрипт с новой тулзой мелкомягких PowerToys

Не проще ли SC_MOVE посылать?

16 (изменено: serzh82saratov, 2020-06-02 21:36:50)

Re: AHK: Скрестить AHKскрипт с новой тулзой мелкомягких PowerToys

Malcev
Возможно, не пробовал, а WinMove что посылает?

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

17

Re: AHK: Скрестить AHKскрипт с новой тулзой мелкомягких PowerToys

Можно через spy++ посмотреть.

18

Re: AHK: Скрестить AHKскрипт с новой тулзой мелкомягких PowerToys

Я думал ты посмотрел и не увидел его, ещё есть WM_MOVE, WM_MOVING, WM_WINDOWPOSCHANGING, WM_WINDOWPOSCHANGED и.т.п.
Тут нужно расследование, на что срабатывает эта программа.

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

19

Re: AHK: Скрестить AHKскрипт с новой тулзой мелкомягких PowerToys

Это всё не сообщения, а уведомления.

20

Re: AHK: Скрестить AHKскрипт с новой тулзой мелкомягких PowerToys

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

 
WM_SYSCOMMAND := 0x112
SC_MOVE := 0xF010
WS_EX_NOACTIVATE := 0x08000000 

Gui, -Caption  +AlwaysOnTop +E%WS_EX_NOACTIVATE% +LastFound
Gui, Show, na w333 h333 
WinSet, TransParent, 55
Return
 
+LButton::
	Hwnd := WinExist("A")
	SendMessage, WM_SYSCOMMAND, SC_MOVE, 0, , ahk_id %Hwnd% 
	return
По вопросам возмездной помощи пишите на E-Mail: serzh82saratov@mail.ru
Win10x64 v2004, AutoHotkey_L v1.1.33.02 (Unicode 32-bit). AhkSpy, Hotkey, ClockGui

21

Re: AHK: Скрестить AHKскрипт с новой тулзой мелкомягких PowerToys

А зачем тут гуи?
Да и Sendmessage тоже не нужен.

setwindelay -1
MButton::
Critical
MouseGetPos,,, win
WinActivate, ahk_id %win%
WinWaitActive, ahk_id %win%
PostMessage 0x112, 0xF010   ; WM_SYSCOMMAND, SC_MOVE
PostMessage 0x100, 0x25   ; WM_KEYDOWN, VK_LEFT
PostMessage 0x101, 0x25   ; WM_KEYUP,   VK_LEFT
PostMessage 0x100, 0x27   ; WM_KEYDOWN, VK_RIGHT
PostMessage 0x101, 0x27   ; WM_KEYUP,   VK_RIGHT
KeyWait, MButton
Click, up

22

Re: AHK: Скрестить AHKскрипт с новой тулзой мелкомягких PowerToys

Интересно.
На этом окне залипает LButton.

Gui, New, -Caption
Gui, Show, na w333 h333 

Как сделать без перемещения курсора в верх окна?

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

23

Re: AHK: Скрестить AHKскрипт с новой тулзой мелкомягких PowerToys

У меня вроде не залипает.
Без перемещения курсора, наверное, никак.
Разве что прятать, и отрисовывать свой.

24

Re: AHK: Скрестить AHKскрипт с новой тулзой мелкомягких PowerToys

А ты LEFT RIGHT опытным путём вычислил?

Malcev пишет:

У меня вроде не залипает.

У меня 10 из 10. Пока ещё раз не кликнешь, окно следует за курсором со всеми отпущенными кнопками.

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

25

Re: AHK: Скрестить AHKскрипт с новой тулзой мелкомягких PowerToys

serzh82saratov пишет:

А ты LEFT RIGHT опытным путём вычислил?

Не, с оффорума.
Но посыл клавиш вполне логичен, так как WM_SYSCOMMAND, SC_MOVE - это тоже самое, что и alt+space+m.
Окно начнет двигаться только после нажатия стрелок.

26

Re: AHK: Скрестить AHKскрипт с новой тулзой мелкомягких PowerToys

Malcev код работает на ура. только да - прыгающий курсор раздражает. И да, залипает, но только на окошке созданном serzh82saratov. На остальных окнах не залипает

Жизнь стоит того чтобы не быть сволочью. (с) Разные Люди

27

Re: AHK: Скрестить AHKскрипт с новой тулзой мелкомягких PowerToys

Malcev
Как думаешь почему WM_NCLBUTTONDOWN работает только когда курсор над msctls_statusbar32 и MenuBar.

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

28

Re: AHK: Скрестить AHKскрипт с новой тулзой мелкомягких PowerToys

Потому что так и было задумано.

Posted when the user presses the left mouse button while the cursor is within the nonclient area of a window. This message is posted to the window that contains the cursor. If a window has captured the mouse, this message is not posted.

https://docs.microsoft.com/en-us/window … buttondown
Насчет залипов с SC_MOVE, то у меня их почему-то не наблюдается.
Надо проверять, как отправить клик, чтобы их не было.

Mikki пишет:

Malcev код работает на ура. только да - прыгающий курсор раздражает

Прячьте курсор, рисуйте свой, ставьте хук на мышку и отслеживайте её перемещение.

29

Re: AHK: Скрестить AHKскрипт с новой тулзой мелкомягких PowerToys

within the nonclient area of a window.

Но ведь это клиентские части окон. Может надо как то отменить захват мыши перед WM_NCLBUTTONDOWN.

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

30 (изменено: serzh82saratov, 2020-06-03 15:02:59)

Re: AHK: Скрестить AHKскрипт с новой тулзой мелкомягких PowerToys

Так например уже можно перемещать своё окно за "Edit", и окно калькулятора за область вывода результата.


Menu, Menu, Add, Menu
Gui, -Caption
Gui, Menu, Menu
Gui, Add, Text, w111 h111 border, qwerty
Gui, Add, Button, w111 h111 border, qwerty
Gui, Add, Edit, w111 h111 border, qwerty
Gui, Show, na w333

WM_NCLBUTTONDOWN := 0xA1, HTCAPTION := 2

~+LButton::
	ActiveHwnd := WinExist("A")
	Sleep 1
	DllCall("ReleaseCapture") 
	PostMessage, WM_NCLBUTTONDOWN, HTCAPTION, 0
Menu:
	Return
По вопросам возмездной помощи пишите на E-Mail: serzh82saratov@mail.ru
Win10x64 v2004, AutoHotkey_L v1.1.33.02 (Unicode 32-bit). AhkSpy, Hotkey, ClockGui

31

Re: AHK: Скрестить AHKскрипт с новой тулзой мелкомягких PowerToys

serzh82saratov пишет:

Но ведь это клиентские части окон.

Нет.
https://docs.microsoft.com/en-us/windows/win32/gdi/nonclient-area

serzh82saratov пишет:

Может надо как то отменить захват мыши перед WM_NCLBUTTONDOWN

Думаю, придется инжектить dll в целевое приложение.

32

Re: AHK: Скрестить AHKскрипт с новой тулзой мелкомягких PowerToys

Обоих случаях работает только со Sleep, и в случае с калькулятором ReleaseCapture не имеет значения, так как оно работает только для текущего потока.

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

33

Re: AHK: Скрестить AHKскрипт с новой тулзой мелкомягких PowerToys

Malcev пишет:

Думаю, придется инжектить dll в целевое приложение.

Только чтобы вызвать ReleaseCapture?

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

34

Re: AHK: Скрестить AHKскрипт с новой тулзой мелкомягких PowerToys

Да.

35 (изменено: serzh82saratov, 2020-06-04 00:29:01)

Re: AHK: Скрестить AHKскрипт с новой тулзой мелкомягких PowerToys

Кстати работает не только при клике в окне. Точнее в данном случае у меня чаще срабатывает Gui с Edit за пределами Calculator.
Надо активировать Gui, и в Edit нажать +LButton. Двигает любые указанные окна, блокнот двигает только если перед нажатием он был свёрнут.


WM_NCLBUTTONDOWN := 0xA1, HTCAPTION := 2  
 
Gui, New, -Caption  
Gui, Add, Edit, w111 h111 border 
Gui, Show 
Return 

~+LButton::  
	Hwnd := WinExist("Calculator")  
	WinActivate 
	Sleep 10 
	PostMessage, WM_NCLBUTTONDOWN, HTCAPTION, , , % "ahk_id " Hwnd 
	Return
По вопросам возмездной помощи пишите на E-Mail: serzh82saratov@mail.ru
Win10x64 v2004, AutoHotkey_L v1.1.33.02 (Unicode 32-bit). AhkSpy, Hotkey, ClockGui

36

Re: AHK: Скрестить AHKскрипт с новой тулзой мелкомягких PowerToys

Нагляднее, калькулятор и справку двигает 10 из 10.


CoordMode, Mouse, Screen 

WM_NCLBUTTONDOWN := 0xA1, HTCAPTION := 2  

Gui, -Caption +AlwaysOnTop +LastFound +ToolWindow
Gui, Show, Na Hide w20 h20
WinSet, TransParent, 1
Return 

1::
MButton::    
	BlockInput, MouseMove
	MouseGetPos x, y, win, child, 2 
	Gui, Show, % "x" x - 10 " y" y - 10
	Hwnd := WinExist("ahk_id" win)
	Sleep 10
	Send {LButton Down} 
	WinActivate  
	Sleep 10
	PostMessage, WM_NCLBUTTONDOWN, HTCAPTION, , , % "ahk_id " Hwnd 
	Key := A_ThisHotkey 
	Send {LButton Up}
	Gui, Show, Na Hide
	BlockInput, MouseMoveOff
	KeyWait %Key%   
	Send {LButton Up}
	Return

С блокнотом вредничает, но если после PostMessage продолжить действия по таймеру, то кое как работает.

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

37

Re: AHK: Скрестить AHKскрипт с новой тулзой мелкомягких PowerToys

Тулза к слову непонятно на что срабатывает, например на Total Commander и справку у меня вообще не реагирует.

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

38

Re: AHK: Скрестить AHKскрипт с новой тулзой мелкомягких PowerToys

serzh82saratov пишет:

Тулза к слову непонятно на что срабатывает, например на Total Commander и справку у меня вообще не реагирует.

Чистая тулза? Без наших скриптов? У меня на тотал отлично срабатывает. А какая справка?

Жизнь стоит того чтобы не быть сволочью. (с) Разные Люди

39

Re: AHK: Скрестить AHKскрипт с новой тулзой мелкомягких PowerToys

Mikki пишет:

Чистая тулза? Без наших скриптов?

Да.

Mikki пишет:

справка?

Справка AutoHotkey.
У меня в этих окнах по Alt+Space заблокирован пункт переместить. Сегодня после перезагрузки "FancyZones" с ними заработало. В общем что то глючит.

Так у вас код из 36 что то двигает?

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

40

Re: AHK: Скрестить AHKскрипт с новой тулзой мелкомягких PowerToys

serzh82saratov пишет:

..Так у вас код из 36 что то двигает?

У меня - нет.

Жизнь стоит того чтобы не быть сволочью. (с) Разные Люди

41

Re: AHK: Скрестить AHKскрипт с новой тулзой мелкомягких PowerToys

У меня тоже не двигает.

42

Re: AHK: Скрестить AHKскрипт с новой тулзой мелкомягких PowerToys

На калькуляторе нажимаешь 1 и держишь, и не двигается?
А если по двойному клику на 1, и по второму удерживаешь, тоже нет? У меня именно так на блокноте срабатывает, единственный с которым по одиночному не работает, но по двойному работает 10 из 10.

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

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

43 (изменено: Malcev, 2020-06-04 20:36:08)

Re: AHK: Скрестить AHKскрипт с новой тулзой мелкомягких PowerToys

serzh82saratov пишет:

А если по двойному клику на 1, и по второму удерживаешь

Так вроде работает, но не со всеми окнами.
Например с окнами эксплорера.

44

Re: AHK: Скрестить AHKскрипт с новой тулзой мелкомягких PowerToys

Да, забыл сказать, с эксплорером у меня тоже не работает.

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

45

Re: AHK: Скрестить AHKскрипт с новой тулзой мелкомягких PowerToys

Тут видно дело не в эксплорере, а в окнах у которых ribbon menu.
Так как с пейнтом тоже не работает.