Quick demo: https://youtu.be/3t6zEnJP7Xo
Inspired by gamerguy80's setup and not-unreasonable complaint of not enough presets, I've been working on an AutoHotkey script to quickly resize and reposition the capture window displays with a single key press. You just need to install AutoHotkey, copy this code here into a .txt file called "New 3DS XL Capture Resizing" (or anything else, but ideally that) and then rename the extension from .txt to .ahk:
Code: Select all
SetTitleMatchMode, 2
+PrintScreen::Suspend ; Shift & PrintScreen to toggle suspend
#PrintScreen::Edit ; Windows Key & PrintScreen to edit
#IfWinActive, New 3DS XL Capture Resizing.ahk - Notepad
~^s::
reload
return
#IfWinActive
; automatic reloading
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
/*
_ _ _______ _ _ __ __ _
| | | | |__ __| | (_) \ \ / / | |
| |__| | _____ __ | | | |__ _ ___ \ \ /\ / /__ _ __| | _____
| __ |/ _ \ \ /\ / / | | | '_ \| / __| \ \/ \/ / _ \| '__| |/ / __|
| | | | (_) \ V V / | | | | | | \__ \ \ /\ / (_) | | | <\__ \
|_| |_|\___/ \_/\_/ |_| |_| |_|_|___/ \/ \/ \___/|_| |_|\_\___/
*/
/*
This script uses the number pad (and ONLY the number pad!) to quickly resize
and reposition the capture windows.
It also takes full advantage of the newest experimental build of the capture
software (currently 3ds_capture_20230214.exe) which adds the following:
- (20230214) Will notice external repositioning.
- (20230210) Rounded corners are gone.
- (20230210) "Hide border" setting was added.
- (20230210) Push Ctrl-0..9 to store a preset, and 0..9 to load it.
As long as you use the QWERTY row of numbers for saving and loading, you
shouldn't have any problems saving/loading presets and running this script
at the same time.
Your number pad and this script's functions at a glance:
.---------------------------------------------------------------------------.
| 7 | 8 | 9 |
| | | |
| reposition | toggle borders | reposition |
| top screen | on / off | bottom screen |
| (use w/ borders off) | (same as F5) | (use w/ borders off) |
|-------------------------+------------------------+------------------------|
| 4 | 5 | 6 |
| | | |
| resize top or bottom | move any 3DS capture | toggle split window |
| screen (borders off) | window to center | on / off |
| to native res x4 | | (same as F2) |
|-------------------------+------------------------+-----------------------=|
| 1 | 2 | 3 |
| | | |
| resize top or bottom | resize top or bottom | resize top or bottom |
| screen (borders off) | screen (borders off) | screen (borders off) |
| to native resolution | to native res x2 | to native res x3 |
`--------------------------------------------------------------------------'
There's no real reason to have borders on at all anymore. The hotkeys for
repositioning (7 and 9) were made assuming borders off, and results will
look wrong with borders on.
When resizing a window with borders on, hold Left Alt before pressing 1-4.
This was made intentionally less convenient to hit because, again, there's
no real reason to have borders on at all.
Table of resolutions for reference:
.---------------------------------------------------------------------------.
| | resolution | resolution | resolution | resolution |
| | x1 | x2 | x3 | x4 |
|---------------+--------------+--------------+--------------+--------------|
| Single screen | 400,480 | 800,960 | 1200,1440 | 1600,1920 |
|---------------+--------------+--------------+--------------+--------------|
| Split, top | 400,240 | 800,480 | 1200,720 | 1600,960 |
|---------------+--------------+--------------+--------------+--------------|
| Split, buttom | 320,240 | 640,480 | 960,720 | 1280,960 |
`--------------------------------------------------------------------------'
For best results, right click on a screen and choose:
Scaling > Point
Hide Border CHECKED
When playing older games on the 3DS (such as NDS games, and some Virtual
Console games), hold Start before starting the game to run in native
resolution, which will give you a smaller but sharper image.
*/
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
/*
_____ _
| __ \ (_)
| |__) |___ _ __ ___ __ _ _ __ _ __ _ _ __ __ _
| _ // _ \ '_ ` _ \ / _` | '_ \| '_ \| | '_ \ / _` |
| | \ \ __/ | | | | | (_| | |_) | |_) | | | | | (_| |
|_| \_\___|_| |_| |_|\__,_| .__/| .__/|_|_| |_|\__, |
| | | | __/ |
|_| |_| |___/
*/
; Hit 6 on the number pad acts like F2 (toggles split window view)
#IfWinActive - ahk_exe 3ds_capture.exe
Numpad6::
send {F2}
return
#IfWinActive
; Hit 8 on the number pad acts like F5 (toggles Hide border)
#IfWinActive - ahk_exe 3ds_capture.exe
Numpad8::
send {F5}
return
#IfWinActive
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
/*
_____ _ _
| __ \ (_) (_)
| |__) |___ ___ _ _____ _ __ __ _
| _ // _ \/ __| |_ / | '_ \ / _` |
| | \ \ __/\__ \ |/ /| | | | | (_| |
|_| \_\___||___/_/___|_|_| |_|\__, |
__/ |
|___/
*/
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;; SINGLE WINDOW BOTH SCREENS :;
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
; Hit 1, 2, 3, or 4 on the number pad to resize to that multiple
#IfWinActive - ahk_class 3DS Capture - Single
{
WinGetPos,X,Y,W,H,A88888888
If %Width% = 0
Width := W
If %Height% = 0
Height := H
WinMove,A,,%X%,%Y%,%Width%,%Height%
}
; With borders
~LAlt & Numpad1::ResizeWin(416,519) ; x1
~LAlt & Numpad2::ResizeWin(816,999) ; x2
; Without borders
Numpad1::ResizeWin(400,480) ; x1
Numpad2::ResizeWin(800,960) ; x2
return
#IfWinActive
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;; TOP SCREEN ;;
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
; Hit 1, 2, 3, or 4 on the number pad to resize to that multiple
#IfWinActive - ahk_class 3DS Capture - Top
ResizeWin(Width = 0,Height = 0)
{
WinGetPos,X,Y,W,H,A
If %Width% = 0
Width := W
If %Height% = 0
Height := H
WinMove,A,,%X%,%Y%,%Width%,%Height%
}
; With borders
~LAlt & Numpad1::ResizeWin(416,279) ; x1
~LAlt & Numpad2::ResizeWin(816,519) ; x2
~LAlt & Numpad3::ResizeWin(1216,759) ; x3
~LAlt & Numpad4::ResizeWin(1616,999) ; x4
; Without borders
Numpad1::ResizeWin(400,240) ; x1
Numpad2::ResizeWin(800,480) ; x2
Numpad3::ResizeWin(1200,720) ; x3
Numpad4::ResizeWin(1600,960) ; x4
return
#IfWinActive
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;; BOTTOM SCREEN ;;
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
; Hit 1, 2, 3, or 4 on the number pad to resize to that multiple
#IfWinActive - ahk_class 3DS Capture - Bottom
{
WinGetPos,X,Y,W,H,A
If %Width% = 0
Width := W
If %Height% = 0
Height := H
WinMove,A,,%X%,%Y%,%Width%,%Height%
}
; With borders
~LAlt & Numpad1::ResizeWin(336,279) ; x1
~LAlt & Numpad2::ResizeWin(656,519) ; x2
~LAlt & Numpad3::ResizeWin(976,759) ; x3
~LAlt & Numpad4::ResizeWin(1296,999) ; x4
; Without borders
Numpad1::ResizeWin(320,240) ; x1
Numpad2::ResizeWin(640,480) ; x2
Numpad3::ResizeWin(960,720) ; x3
Numpad4::ResizeWin(1280,960) ; x4
return
#IfWinActive
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
/*
_____ _ _ _ _
| __ \ (_) | (_) (_)
| |__) |___ _ __ ___ ___ _| |_ _ ___ _ __ _ _ __ __ _
| _ // _ \ '_ \ / _ \/ __| | __| |/ _ \| '_ \| | '_ \ / _` |
| | \ \ __/ |_) | (_) \__ \ | |_| | (_) | | | | | | | | (_| |
|_| \_\___| .__/ \___/|___/_|\__|_|\___/|_| |_|_|_| |_|\__, |
| | __/ |
|_| |___/
*/
; CENTERING
; Hit 5 on the number pad to move any window to center
#IfWinActive - ahk_exe 3ds_capture.exe
Numpad5::
WinExist("A")
WinGetPos,,, sizeX, sizeY
WinMove, (A_ScreenWidth/2)-(sizeX/2), (A_ScreenHeight/2)-(sizeY/2)
return
#IfWinActive
; BELOW: 7 moves the top screen and 9 moves the bottom
; The "a" and "b" refer to variations for monitors are 2560x1080 (a) and 1920x1080 (b)
; Hit 7 on the number pad to move top screen
#IfWinActive - ahk_exe 3ds_capture.exe
Numpad7::
WinExist("A")
WinGetPos,,, sizeX, sizeY
WinMove, 0,0 ; Config 1a (1920x1080) - use at 4x
; WinMove, 320,40 ; Config 2a (2560x1080)
return
#IfWinActive
; Hit 9 on the number pad to move bottom screen
#IfWinActive - ahk_exe 3ds_capture.exe
Numpad9::
WinExist("A")
WinGetPos,,, sizeX, sizeY
WinMove, 1600,0 ; Config 1a (2560x1080) - use at 3x
; WinMove, 1920,760 ; Config 2b (2560x1080)
return
#IfWinActive
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
/*
_______ _
|__ __| | |
| | ___ __| | ___
| |/ _ \ / _` |/ _ \
| | (_) | | (_| | (_) |
|_|\___/ \__,_|\___/
*/
/*
- More templates, along with their 1080p counterparts!
- Maybe touch on why integer scaling is important
- https://youtu.be/TI60A3DpI6w?t=275
- Wacky fun with OnTopReplica
- https://github.com/LorenzCK/OnTopReplica
- Get back to making AviSynth templates, with the goal of doing this:
- https://youtu.be/a_4lnZn7ZMI
*/
1 = native resolution
2 = native resolution x2
3 = native resolution x3
4 = native resolution x4
5 = center the window on your main monitor
6 = same as F2 (toggle split window / single window)
7 = move top screen (currently set at 0,0 which is the upper-left of your monitor - ideally, set to x4 on an ultrawide monitor)
8 = same as F5 (toggle hide borders)
9 = move bottom screen (currently set to fill the rest of the horizontal space at x3 on an ultrawide monitor)
There are still plenty of presets to dial in but I've already got my ideal (x4 top screen on the left and x3 bottom screen on the right), and that's what this script is currently set up for, so any further presets will be a long time coming. Or, you know, just get the dang numbers yourself. Consider it an exercise!
Old rant on resizing windows with borders (no longer relevant because we can hide them and resizing and repositioning is even easier):
Spoiler
You will notice that the values for the multiples aren't exactly x2, x3, or x4. That's because in addition to the raw pixels being multiplied, I'm also accounting for the borders, title bar, and... something else. While the numbers for resizing & repositioning look to be correct, that was only after more trial and error and measuring pixels again in GIMP. I did grab what I thought were the correct values, but when I tried out my resizings for myself, they were all smaller than I thought. I ended up having to add 16 to all my widths and 39 to all my heights. My repositioning values also all had to be shifted -8 horizontally. This has all been documented and I'm glad I'm not crazy. The short answer is, there's an invisible border we also have to account for. Fun, right? Just got to find the time to read and digest it all!
For reference:
Single screen in x1, x2, x3, x4
400,480 / 800,960 / 1200,1440 / 1600,1920
Top screen in x1, x2, x3, x4
400,240 / 800,480 / 1200,720 / 1600,960
Bottom screen in x1, x2, x3, x4
320,240 / 640,480 / 960,720 / 1280,960
For reference:
Single screen in x1, x2, x3, x4
400,480 / 800,960 / 1200,1440 / 1600,1920
Top screen in x1, x2, x3, x4
400,240 / 800,480 / 1200,720 / 1600,960
Bottom screen in x1, x2, x3, x4
320,240 / 640,480 / 960,720 / 1280,960
(My old requests arein this spoiler tag, and were implemented very quickly (Thanks, loopy!). Be sure to check loopy's latest posts in this thread for the latest experimental builds of the software!
Spoiler
So, request time:
Windows 11 forces rounded corners for everything that isn't in full screen, which probably isn't ideal for split screen setups. There's something on github to disable exactly this, but it seems stupidly risky (i.e. bricking your system!). Maybe add a "compact mode" like in Media Player Classic that removes all window borders and prevents rounded corners?
"Borderless" view is especially important because I happily found that a 1080p monitor will fit exactly the top screen resized to x4 (1600x960) and the bottom screen in its original 320x240 resolution (1600+320=1920). Ultrawide monitor owners have it even better; the top screen in x4 (1600x960) and the bottom screen at x3 (960x720) also fill the width nicely (1600+960=2560). With the 1-pixel wide borders and those rounded corners, we're losing... well, still not a lot, but it's just enough to make me feel icky.
Oh, and restore focus to the screens when toggling with F2. Should make any future fancy AutoHotkey scripts easier (for me, anyway).
Windows 11 forces rounded corners for everything that isn't in full screen, which probably isn't ideal for split screen setups. There's something on github to disable exactly this, but it seems stupidly risky (i.e. bricking your system!). Maybe add a "compact mode" like in Media Player Classic that removes all window borders and prevents rounded corners?
"Borderless" view is especially important because I happily found that a 1080p monitor will fit exactly the top screen resized to x4 (1600x960) and the bottom screen in its original 320x240 resolution (1600+320=1920). Ultrawide monitor owners have it even better; the top screen in x4 (1600x960) and the bottom screen at x3 (960x720) also fill the width nicely (1600+960=2560). With the 1-pixel wide borders and those rounded corners, we're losing... well, still not a lot, but it's just enough to make me feel icky.
Oh, and restore focus to the screens when toggling with F2. Should make any future fancy AutoHotkey scripts easier (for me, anyway).