altdrag icon indicating copy to clipboard operation
altdrag copied to clipboard

Windows 10 window borders

Open stefansundin opened this issue 9 years ago • 24 comments

It seems Windows 10 includes some invisible window borders in GetClientRect, causing snapping to have a few extra pixels of distance to other windows (only seem to affect horizontally).

According to a stack overflow article, another function can be used:

DwmGetWindowAttribute(hwnd, DWMWA_EXTENDED_FRAME_BOUNDS, &rect, sizeof(RECT));

Unfortunately this window size cannot simply be used with MoveWindow, because it is smaller than what MoveWindow represents the window size as. So it will cause the dragged window to shrink by a few pixels every time it is moved.

The solution requires a lot of code to be reworked, so I won't fix it for v1.1.

stefansundin avatar Aug 20 '15 07:08 stefansundin

Hi -thanks for your work on this great tool. Just verifying that in my case it isn't just horizontal : by my measurements, it is 7px on the Left, Right and Bottom -but not the top. This is also reflected in normal Windows cursor/resize behaviour at the edges. The result is that the top snaps tight to screen top, but 'loose' against the screen bottom and sides. I look forward to a fix in v4.0!

win10_borders_1 win10_borders_2

apatternjugglers avatar Aug 25 '15 04:08 apatternjugglers

Thanks for creating this issue @stefansundin and thanks a lot for creating AltDrag, I use it so often that I often find myself accidentally pressing Alt when attempting to move windows on computers that don't have this tool installed 😂

What would be your target version to fix this? I'm usually the type to just build it myself but I might pick up C just for this if it haunts me enough.

patricknelson avatar Dec 01 '16 22:12 patricknelson

I'm not sure. My time is very limited these days so I won't even try to make a prediction. Sorry. :/

Patches are always welcome though. :) https://stefansundin.github.io/altdrag/doc/build.html

Btw, now that there's Bash on Windows, you should be able to use that instead of Cygwin. I will try to update the page with new instructions when I get around to it.

stefansundin avatar Dec 01 '16 22:12 stefansundin

Love alt-drag. It makes my life so much easier.

But you've mentioned Bash on Windows, which I've just installed, and I'm sad to see that alt-drag doesn't work with either the Bash console (though it does work with the cmd console) - the bash console grabs alt drag to determine whether to do line-wrapping text selection or rectangular text selection.

And unfortunately it doesn't work when I launch an xterm with the ubuntu subsystem for windows either (using ming) though that's not much of a surprise.

daveola avatar Jun 06 '17 18:06 daveola

@daveola Could you provide a screen capture (e.g. ShareX) of what your experience looks like when interacting with the console window?

patricknelson avatar Jun 06 '17 19:06 patricknelson

The photo would just show the bash window, I don't know how to take a screenshot of a drag not working.

If I drag in the window, it does multi-line selection, as if you were just selecting a region of text.

If I alt-drag in the window, then it does a rectangle selection, where the text selection is a rectangle with no line wrap.

There's a session option that lets me switch which is the default selection type and which is controlled by alt, so it seems that the app is catching the 'alt' modifier. Is there any way to overide this?

daveola avatar Jun 07 '17 16:06 daveola

Is there any way to overide this?

Hmm, not sure. Probably a silly question, but: Have you tried ensuring you launch AltDrag with elevated privileges?

patricknelson avatar Jun 07 '17 20:06 patricknelson

I did not realize that was a possibility/fix!

Thanks much!

daveola avatar Jun 08 '17 21:06 daveola

I appreciate everything you have done with this project. While I am not able to contribute to the project's code, because I don't know C. I am more than willing to put my money where my mouth is, if it means you get an opportunity to implement this feature. I understand you are busy so, I would happily donate $100 immediately if you agree to try an fix this. @stefansundin

loligans avatar Feb 10 '19 05:02 loligans

I second that! I would be happy to give $100 in advance for you to take another shot at this.

wngrtn avatar Feb 11 '19 10:02 wngrtn

This has been bugging me for years 😅, so I decided to have a go at fixing it!

Is it too much of a hack to lookup the border size difference and reverse it? I tried the DWMWA_EXTENDED_FRAME_BOUNDS method and I experience what you say about the window shrinking every time it's moved. But we can find the offset by comparing the results of this with GetWindowRect (also shown here). Works a charm for me. Also I think this only applies to the Aero snap? So the existing GetWindowRect calls don't actually need to be replaced.

altdrag

EDIT: I haven't tried this on other DPI modes.

celynw avatar Mar 02 '19 19:03 celynw

@celynwalters Is there a binary with your fix somewhere? I would love to give it a spin.

wngrtn avatar Mar 05 '19 08:03 wngrtn

Try this! (I compiled using WSL but seems to be ok).

celynw avatar Mar 05 '19 20:03 celynw

Sweet. Works perfectly for me! Thank you!

wngrtn avatar Mar 05 '19 22:03 wngrtn

For anyone curious to see the changes (without a PR): https://github.com/stefansundin/altdrag/compare/master...celynwalters:win10fix

patricknelson avatar Mar 05 '19 23:03 patricknelson

For anyone curious to see the changes (without a PR): master...celynwalters:win10fix

Hey. @celynwalters. Thank you very much for your work on this issue. Do you think you would be able to clean up your commit and create a PR? There seems to be some editor-stuff autofix going on (I think it changed some line endings for many files and removed some trailing spaces, which poluted the changeset).

I would be willing to help on creating a PR for this, but I don't have any C experience to try out new builds and make sure everything works. I'm sure this fix would help the usage A LOT for many people and it might be worth some minutes to create a formal PR and have it merged. Thanks again.

dnunes avatar Mar 22 '19 07:03 dnunes

There seems to be some editor-stuff autofix going on

The reason I had these in here is because it wouldn't even compile for me unless the encoding was UTF-8 rather than UTF-8 with BOM. The encoding was inconsistent over the localization files. But yeah, I guess that should be a separate commit.

I am pretty new to contributing to repositories which aren't exclusively mine. I've made a pull request with the parts which only apply to this issue. Unfortunately it's also very likely I won't have time to spend on this - If I get a chance I can build this tonight just to make sure it still works correctly.

celynw avatar Mar 31 '19 17:03 celynw

@celynwalters Which binary should we use in your releases? image

loligans avatar Apr 01 '19 17:04 loligans

Ah, good point. AltDrag-1.1.exe was the installer, AltDrag.exe was the binary. You could tell from the icons in Windows explorer. I've updated their names now.

celynw avatar Apr 01 '19 20:04 celynw

I just tried your branch and it does not appear to be fixed for me. I uninstalled my existing AltDrag instance and ran your AltDrag-1.1-installer.exe. What could I be missing or doing wrong?

loligans avatar Apr 01 '19 21:04 loligans

Hmm, not sure. As I've mentioned, I haven't tried this using a non-standard DPI scaling. I have just used this installer to uninstall my current version, then reinstalled and it works fine for me. Maybe try doing that? (It wasn't a totally clean install, at least the registry tweak remained, maybe also the saved settings) Otherwise, it's possible the fix isn't so simple after all.

celynw avatar Apr 01 '19 22:04 celynw

Microsoft is working on extending the Windows 10 shell with an application called, Power Toys. I recommend everyone to upvote this issue so Microsoft prioritizes Alt-Drag and Alt Resizing. https://github.com/microsoft/PowerToys/issues/269

loligans avatar Sep 09 '19 17:09 loligans

For everybody who was irritated as I was, this issue here is not solved on this repository here.

Therefore the issue here (for the repo of @stefansundin) shouldn't be closed because actually it is not (for the repo of @stefansundin again).

The binary with this fix argued here is found on https://github.com/celynwalters/altdrag/releases.

Avispa avatar Nov 22 '20 17:11 Avispa

This fix from @celynwalters is good but not complete, it does not take in account for all kinds of snapping, I made a fork that uses this DwmGetWindowAttribute function and applies it whenever applicable. @Avispa My build fixes all invisible borders bugs under windows 10 as far as I can tell, give it a try if you still use AltDrag.

https://github.com/RamonUnch/AltDrag/releases/

RamonUnch avatar Dec 03 '20 14:12 RamonUnch