1 2014-10-25 20:02:51 (изменено: DD, 2014-10-25 20:07:59)
2 2014-10-25 20:20:46 (изменено: serzh82saratov, 2014-10-25 20:22:47)
Re: AHK: Множественные действия на левой и верхней границах экрана
Если независимо от разрешения, и относительно экрана, то так:
CoordMode, Mouse
Loop
ToolTip % WhatArea()
WhatArea() {
Static R := [[0.0,0.5,0.05,1]
, [0.0,0.05,0.05,0.5]
, [0.0,0.0,0.05,0.05]
, [0.05,0.0,0.5,0.05]
, [0.5,0.0,1,0.05]]
MouseGetPos, X, Y
X := X / A_ScreenWidth, Y := Y / A_ScreenHeight
For K, V in R
If (X >= V[1] && X <= V[3] && Y >= V[2] && Y <= V[4])
Return K
}
Как привязать кнопку, думаю сообразите.
Win10x64 AhkSpy, Hotkey, ClockGui
3 2014-10-25 20:49:02 (изменено: DD, 2014-10-25 20:54:43)
Re: AHK: Множественные действия на левой и верхней границах экрана
CoordMode, Mouse
#If WhatArea()
~LButton::
ToolTip % WhatArea()
return
#If
WhatArea() {
Static R := [[0.0,0.5,0.05,1]
, [0.0,0.05,0.05,0.5]
, [0.0,0.0,0.05,0.05]
, [0.05,0.0,0.5,0.05]
, [0.5,0.0,1,0.05]]
MouseGetPos, X, Y
X := X / A_ScreenWidth, Y := Y / A_ScreenHeight
For K, V in R
If (X >= V[1] && X <= V[3] && Y >= V[2] && Y <= V[4])
Return K
}
Огромное спасибо, пример замечательный! Только недокумекаю, как задавать условия на действия в определенных областях? Т.е. сейчас, если я правильно понимаю, это как бы общая функция. Интересует, как ставить условия: "если активна нижняя половина левой границы экрана, делать этак", "если активна правая половина верхней границы — делать раз-этак" и т.д.?
Re: AHK: Множественные действия на левой и верхней границах экрана
как ставить условия: после клика по нижней половине левой границы делать этак, после клика по правой половине верхней границы делать раз-этак и т.д.?
Думал что догадаетесь.
CoordMode, Mouse
#If (Area := WhatArea())
LButton::
If Area = 1
MsgBox 1
Else If Area = 2
MsgBox 2
Else If Area = 3
MsgBox 3
Else If Area = 4
MsgBox 4
Else If Area = 5
MsgBox 5
Return
#If
WhatArea() {
Static R := [[0.0,0.5,0.05,1]
, [0.0,0.05,0.05,0.5]
, [0.0,0.0,0.05,0.05]
, [0.05,0.0,0.5,0.05]
, [0.5,0.0,1,0.05]]
MouseGetPos, X, Y
X := X / A_ScreenWidth, Y := Y / A_ScreenHeight
For K, V in R
If (X >= V[1] && X <= V[3] && Y >= V[2] && Y <= V[4])
Return K
}
Win10x64 AhkSpy, Hotkey, ClockGui
Re: AHK: Множественные действия на левой и верхней границах экрана
Ну, кнопку я таки привязал — а это уже заоблочные вещи))) Благодарю!
6 2014-10-25 22:53:58 (изменено: serzh82saratov, 2014-10-26 00:42:23)
Re: AHK: Множественные действия на левой и верхней границах экрана
Думаю, здорово бы расширило возможности от одиночных кликов.
Кстати задумка хорошая, но не по духу мне по всему экрану мышью махать, куда то целится и что то вспоминать. Короче вспомнилась такая тема, вроде удобный и наглядный лаунчер получился.
; http://forum.script-coding.com/viewtopic.php?pid=87738#p87738
#SingleInstance Force
#NoEnv
ListLines Off
SetBatchLines -1
OnExit, OnExit
OnMessage(0x200, "WM_MOUSEMOVE")
CoordMode Mouse
VarSetCapacity(RECT, 16 ,0)
Global prArea, Area, Color := "D9952F", Light := "696969"
wside := 150, hside := 70, margin := 5
Action := [["Action1","Action1"]
, ["Action2","Action2"]
, ["Action3","Action3"]
, ["Action4","Action4"]
, ["Отмена",""]
, ["Action5","Action5"]
, ["Action6","Action6"]
, ["Action7","Action7"]
, ["Action8","Action8"]]
Gui, -DPIScale +AlwaysOnTop -Caption +HWNDhThisGui +E0x08000000
Gui, Font, s12
Gui, Margin, 0, 0
Loop 9 {
Gui, Add, Progress, % (Mod(A_Index+2, 3) ? "x+" margin : "x0")
. " y" ((A_Index-1)//3)*(hside+margin) " h" hside " w" wside " c" Color " v" A_Index, % A_Index = 5 ? 0 : 100
Gui, Add, Text, xp yp wp hp BackgroundTrans +0x201 vText%A_Index%, % Action[A_Index][1]
}
Return
#If NeedCoords(0, 0, 11, 11)
RButton::
Gui, Show, NA x11 y11
WinSet, Transparent, 210, ahk_id %hThisGui%
Show := 1, DllCall("GetWindowRect","uint",hThisGui,"uint",&RECT)
DllCall("ClipCursor","uint",&RECT)
DllCall("ShowCursor", "uint", 1)
SetTimer, IsThisGui, 100
GoSub MoveCenter
Return
#If Show
~RButton Up::
GoSub Close
MouseMove, 0, 0, 0
Try GoSub % Action[Area][2]
Return
#If
IsThisGui:
MouseGetPos, , , WinID
DllCall("ClipCursor","uint",&RECT)
If (WinID = hThisGui || WinID = "")
Return
GoTo Close
MoveCenter:
WinGetPos, WinX, WinY, WinWidth, WinHeight, ahk_id %hThisGui%
MouseMove, WinX+WinWidth/2, WinY+WinHeight/2, 0
Color(Color, prArea), Color(Light, prArea := 5)
Return
Close:
Gui, Hide
SetTimer, IsThisGui, Off
DllCall("ClipCursor"), Show := 0
SetTimer, MoveCenter, Off
Color(Color, prArea), prArea := 5
Return
OnExit:
DllCall("ClipCursor")
ExitApp
WM_MOUSEMOVE() {
Area := A_GuiControl
If (Area = prArea)
Return
Color(Color, prArea), prArea := Area
If (Area = "")
Return
Color(Light, Area)
SetTimer, MoveCenter, % Area = 5 ? "Off" : -1200
}
NeedCoords(x1, y1, x2, y2) {
MouseGetPos, X, Y
Return X >= x1 && X <= x2 && Y >= y1 && Y <= y2
}
Color(c, ctrl) {
GuiControl, +c%c%, % ctrl
GuiControl, +Redraw, % ctrl
GuiControl, +Redraw, Text%ctrl%
}
Action1:
Action2:
Action3:
Action4:
Action5:
Action6:
Action7:
Action8:
MsgBox,,, % A_ThisLabel, 0.7
Return
RButton зажимаем в левом верхнем углу экрана, отпускаем где надо.
RButton, цвета, угол экрана - конечно по вкусу.
Win10x64 AhkSpy, Hotkey, ClockGui
Re: AHK: Множественные действия на левой и верхней границах экрана
Серж, это гениально! По нему Коллекция плачет! Это будет отечественное "радиальное меню". То есть квадрадиальное)))
Re: AHK: Множественные действия на левой и верхней границах экрана
По-моему, поле "Отмена" лишнее, только место зря занимает. Проще убрать DllCall("ClipCursor","uint",&RECT) и делать отмену по отпусканию RButton вне поля. Сам пользуюсь подобным меню, но появление его просто посажено на одну из кнопок мыши.
Re: AHK: Множественные действия на левой и верхней границах экрана
teadrinker
Ну это всё добавлять по вкусу, кому как.
Но для меня всё удобство тут именно в ClipCursor. Я почти не целюсь, то есть всё задаётся направлением мыши, и она никуда не убежит, также как и угол экрана. Ну и также то, что всё это делается только одним кликом.
Win10x64 AhkSpy, Hotkey, ClockGui
10 2014-11-02 18:15:56 (изменено: Xwansu, 2014-11-02 18:17:17)
Re: AHK: Множественные действия на левой и верхней границах экрана
Тоже давно пользуюсь похожей штукой, у меня задействован правый край экрана, используется 2 хоткея по ПКМ и СКМ.