From 4683de4c6ee114250d790d0ea20a7aabdb869929 Mon Sep 17 00:00:00 2001 From: jolheiser Date: Thu, 21 Apr 2022 15:53:19 -0500 Subject: [PATCH] Initial commit Signed-off-by: jolheiser --- .gitignore | 1 + .woodpecker.yml | 30 +++++++++++ LICENSE | 19 +++++++ README.md | 9 ++++ icon.ico | Bin 0 -> 31997 bytes src/WindowUtils-Install.ahk | 16 ++++++ src/WindowUtils.ahk | 103 ++++++++++++++++++++++++++++++++++++ src/config.ini | 2 + src/options.ahk | 2 + 9 files changed, 182 insertions(+) create mode 100644 .gitignore create mode 100644 .woodpecker.yml create mode 100644 LICENSE create mode 100644 README.md create mode 100644 icon.ico create mode 100644 src/WindowUtils-Install.ahk create mode 100644 src/WindowUtils.ahk create mode 100644 src/config.ini create mode 100644 src/options.ahk diff --git a/.gitignore b/.gitignore new file mode 100644 index 0000000..62c8935 --- /dev/null +++ b/.gitignore @@ -0,0 +1 @@ +.idea/ \ No newline at end of file diff --git a/.woodpecker.yml b/.woodpecker.yml new file mode 100644 index 0000000..2898abc --- /dev/null +++ b/.woodpecker.yml @@ -0,0 +1,30 @@ +pipeline: + compile-main: + image: jolheiser/woodpecker-ahk:latest + settings: + script: src/WindowUtils.ahk + icon: icon.ico + out: src/WindowUtils.exe + when: + event: push + branch: main + compile-installer: + image: jolheiser/woodpecker-ahk:latest + settings: + script: src/WindowUtils-Install.ahk + icon: icon.ico + out: src/WindowUtils-Install.exe + when: + event: push + branch: main + release-main: + image: jolheiser/drone-gitea-main:latest + settings: + base: https://git.jojodev.com + token: + from_secret: gitea_token + files: + - "src/WindowUtils-Install.exe" + when: + event: push + branch: main \ No newline at end of file diff --git a/LICENSE b/LICENSE new file mode 100644 index 0000000..ec2045e --- /dev/null +++ b/LICENSE @@ -0,0 +1,19 @@ +Copyright (c) 2022 John Olheiser + +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the "Software"), to deal +in the Software without restriction, including without limitation the rights +to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the Software is +furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in all +copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE +SOFTWARE. diff --git a/README.md b/README.md new file mode 100644 index 0000000..a9eee93 --- /dev/null +++ b/README.md @@ -0,0 +1,9 @@ +# WindowUtils + +![icon](icon.ico) + +An AHK script that enhances the mouse side buttons for dragging windows around. + +## License + +[MIT](LICENSE) \ No newline at end of file diff --git a/icon.ico b/icon.ico new file mode 100644 index 0000000000000000000000000000000000000000..969786aa990c104dca6e5ac220dcbf89d241fd96 GIT binary patch literal 31997 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 literal 0 HcmV?d00001 diff --git a/src/WindowUtils-Install.ahk b/src/WindowUtils-Install.ahk new file mode 100644 index 0000000..84fca33 --- /dev/null +++ b/src/WindowUtils-Install.ahk @@ -0,0 +1,16 @@ +#Include options.ahk + +GoSub, CheckInstall + +return + +CheckInstall: + FileCreateDir, %k_base% + FileInstall, config.ini, %k_config%, 0 + FileInstall, WindowUtils.exe, %k_base%\WindowUtils.exe, 1 + MsgBox, 36, WindowUtils, Installed successfully!`nWould you like to start WindowUtils? + IfMsgBox, Yes + { + Run, %k_base%\WindowUtils.exe + } +return \ No newline at end of file diff --git a/src/WindowUtils.ahk b/src/WindowUtils.ahk new file mode 100644 index 0000000..1a99269 --- /dev/null +++ b/src/WindowUtils.ahk @@ -0,0 +1,103 @@ +#SingleInstance FORCE +#Include options.ahk + +Menu, TRAY, Tip, WindowUtils +Menu, TRAY, NoStandard +Menu, TRAY, add, About, About +Menu, TRAY, add, Invert Keys, Invert +Menu, TRAY, add +Menu, TRAY, add, Close WindowUtils, Close + +SetWinDelay,2 + +CoordMode,Mouse + +k_inverted= + +GoSub, hotkeys + +return + +hotkeys: + IniRead, k_inverted, %k_config%, Settings, Inverted + if k_inverted + { + Menu, TRAY, check, Invert Keys + k_key1=XButton2 + k_key2=XButton1 + } else { + Menu, TRAY, uncheck, Invert Keys + k_key1=XButton1 + k_key2=XButton2 + } + HotKey, %k_key1%, key1 + HotKey, %k_key2%, key2 +return + +Invert: + if k_inverted + { + k_inverted := false + } else { + k_inverted := true + } + IniWrite, %k_inverted%, %k_config%, Settings, Inverted + GoSub, hotkeys +return + +key1: +; Get the initial mouse position and window id, and +; abort if the window is maximized. +MouseGetPos,KDE_X1,KDE_Y1,KDE_id +WinGet,KDE_Win,MinMax,ahk_id %KDE_id% +if (A_ThisHotkey = A_PriorHotkey && A_TimeSincePriorHotkey < 300) + WinMinimize, ahk_id %KDE_id% +else if (A_ThisHotkey = A_PriorHotkey && A_TimeSincePriorHotkey < 1000) + WinRestore, ahk_id %KDE_id% +return + +key2: + +; Get the initial mouse position and window id, and +; abort if the window is maximized. +MouseGetPos,KDE_X1,KDE_Y1,KDE_id +WinGet,KDE_Win,MinMax,ahk_id %KDE_id% +; Get the initial window position. +WinGetPos,KDE_WinX1,KDE_WinY1,,,ahk_id %KDE_id% +WinActivate, ahk_id %KDE_id% +WinRestore, ahk_id %KDE_id% +if (A_ThisHotkey = A_PriorHotkey && A_TimeSincePriorHotkey < 500) +{ + WinMaximize, ahk_id %KDE_id% + return +} +Loop +{ + GetKeyState,KDE_Button,%k_key2%,P ; Break if button has been released. + If KDE_Button = U + { + If KDE_Win + { + WinMaximize, ahk_id %KDE_id% + } + break + } + MouseGetPos,KDE_X2,KDE_Y2 ; Get the current mouse position. + KDE_X2 -= KDE_X1 ; Obtain an offset from the initial mouse position. + KDE_Y2 -= KDE_Y1 + KDE_WinX2 := (KDE_WinX1 + KDE_X2) ; Apply this offset to the window position. + KDE_WinY2 := (KDE_WinY1 + KDE_Y2) + WinMove,ahk_id %KDE_id%,,%KDE_WinX2%,%KDE_WinY2% ; Move the window to the new position. +} +return + + +Close: + MsgBox, 52, WindowUtils, Are you sure you want to close WindowUtils? + IfMsgBox, YES + ExitApp +return + +About: + MsgBox,, WindowUtils, WindowUtils is designed to make moving windows easier.`nNOTE: WindowUtils will change the window to a box for easier moving, but will remember if it was full-screen to start with and restore it after.`n`nButtons Used -`nFirst extra mouse button (generally a shortcut for 'back')`nSecond extra mouse button (generally a shortcut for 'forward')`n`nFunction 1: By holding the first extra button on your mouse, you can move a window from anywhere inside its' border.`n`nFunction 2: By double-clicking the first extra mouse button, you can maximize a window.`n`nFunction 3: By slowly double clicking the second extra button on your mouse, you can 'box' a window.`n`nFunction 4: By quickly double clicking the second extra button on your mouse, you can minimize a window.`n`n`nGive it a try with this window! +return \ No newline at end of file diff --git a/src/config.ini b/src/config.ini new file mode 100644 index 0000000..a8d960b --- /dev/null +++ b/src/config.ini @@ -0,0 +1,2 @@ +[Settings] +inverted=false \ No newline at end of file diff --git a/src/options.ahk b/src/options.ahk new file mode 100644 index 0000000..1af3624 --- /dev/null +++ b/src/options.ahk @@ -0,0 +1,2 @@ +k_base=C:\Applications\WindowUtils +k_config=%k_base%\config.ini \ No newline at end of file