Hacker News new | past | comments | ask | show | jobs | submit login
Windows 10 Virtual Desktop Enhancer (github.com)
135 points by edgartaor on Feb 20, 2017 | hide | past | favorite | 62 comments

I happen to have written the DLL this app uses, and boy collecting that information can be time consuming. It's mind-boggling how Microsoft still can't come up simple APIs for their new features.

Most annoying part for me with Windows 10's virtual desktops is simple thing: flashing task bar buttons appear on all desktops! It drove me nuts, every time I was focusing on some other desktop, some annoying program flashed it's button and it appeared on the desktop I was using.

I happen to have written a in-memory patch for explorer.exe to disable flashing task bar buttons all together. AHK script also: https://github.com/Ciantic/DisableFlashingTaskbarButtons

I'd take the obnoxious flashing over applications stealing focus.

If there was a single design change I'd make to Windows, it would be to make it impossible for one application to steal focus from another (without user intervention).

TweakUI used to do this via the "Prevent Applications from Stealing Focus" checkbox on the General -> Focus tab. But TweakUI ended with XP/2003 Server unfortunately.

To give an example, I was typing away in Word, really on a roll, and suddenly Apple's iTunes auto updater had focused ate an entire sentence and my concentration was destroyed. Thanks Windows.

This is the one "killer feature" that keeps me on a Mac.

Stealing focus is more than annoying -- it's dangerous. When a Windows dialog pops up with focus set to "OK", all it takes is a press of the space bar and poof! you've just "clicked" OK on God knows what. Even worse, now that it's dismissed, you can't go back and see what you just OKed.

The next 30 seconds are sure to be spent wondering "what's about to happen? Will the system reboot? Did I just install an upgrade? Or open the firewall? or ???"

Agreed, this is probably my #1 pet hate on any modern OS, along with the "web page loads a new element somewhere above the cursor just as I click, sending my click to a new and unwanted place."

I saw that happen consistently on a web page I forgot. It was a scheme! There was an event trigger on a text element and it popped open a div to scroll a picture right below your mouse cursor.

I've noticed that some programs are courteous enough to deactivate focus so that pressing space/enter doesn't do anything. Though I'm guessing they just forgot to set MessageBoxResult.

Jumping on the stealing focus train. Biggest issue I have with this is... when focus gets stolen to a dialog box... and the button to dismiss the dialog looks focused... but it's not. Thank you Windows UAC prompt.

On top of it, in cases where you would actually want focus stolen, or at least pushing a window to the front, is Outlook reminders. But no, in the case of a fricking reminder, Microsoft seems to have thought keeping that hidden was the best user experience.

In Outlook 2016, at least, the reminders window generally (I assume always but haven't paid close enough attention) appears atop everything else but unfocused (and with a highlighted taskbar entry). Once you focus it for the first time it turns into an ordinary window which can be put underneath as usual, but it's impossible to miss it since it sits in the middle of the monitor right over whatever else you were doing.

That certainly wasn't my experience with Outlook 2016.

I paid closer attention today, and found that it's not as simple as I thought. My current guess is that the notification appears on top if the user does not seem to be active, or the taskbar cannot be seen (for example due to fullscreen remote desktop), and pops-under with an orange taskbar icon if the user seems to be currently using the computer. Clearly the behavior is more complex than I originally assumed, and I can see why it would be confusing. (I have four different apps that have decided to notify me for a calendar appointment--Outlook 2016, Windows 10's Calendar app, Outlook for Android, and the Google Calendar app--so it's pretty much impossible for me to not notice the cacophony and I never paid close attention to how Outlook did it.)

Programmer needs to do additional work to steal focus in modern windows. http://stackoverflow.com/questions/32032548/steal-focus-as-s...

So, thank Apple, please.

It's still the default that any just opened app will steal focus.

This is a constant irritation for me on Linux too. My other pet peeve is the fact that you can have more than one caret, or a blinking caret visible in an unfocused window - causing you to type thinking that input will go to one location when it actually goes elsewhere.

The worst is when you are in the middle of an Excel formula or a line of code and windows covers your screen with a full screen banner. It's not UX wizardry, it's common sense...

>Download the VirtualDesktopAccessor.dll from directory x64\Release\VirtualDesktopAccessor.dll in the repository

You should use GitHub Releases instead, and keep the repository clean.

Where is this API even documented? The COM interface doesn't even yield any msdn hits. A lot of new APIs all seem hidden.

StarDock used to (?) write this kind of stuff, too - well done. I'm glad there's another component, perhaps I can write something in PowerShell rather than relying on AHK.

One of the interesting things that Apple seems to do in MacOS is to remember specific screens. Plugging into them recalls a previous display arrangement setup. I noticed this when I had two external screens at work, and one at home, and when I moved my Macbook between work and home the arrangement would stay correct, even though they were on either side at work and above at home.

Sadly this is something Windows 10 does not do well. When I plug my Surface Pro into an external monitor my app moves from the laptop screen to the external screen and stays 'full screen'.

Here is a simple example of what I would appreciate if it existed:

I am at work, I am connected to two large screens. I put Outlook on my right screen at about 1/4 the size of the screen. I disconnect, all my windows jump to the laptop screen (great) and I have outlook in full screen mode. Now I reconnect my dual monitors. I'd love Outlook to jump back to where it was, and the size it was, on that right screen when I unplugged. Now I get home and plug into a 2K screen (rather than the 4K screen at work) and I want Outlook to be a bit larger on that screen. When I unplug I want it back on my laptop full screen, when I plug in at work, back to the right monitor quarter size, when I get home back to the monitor about half size.

Remember which screens I plug into, remember what the app settings were when I last plugged into that screen. Restore them when I re-attach.

I think part of the challenge might be related to adapter use.

On my MBP, I connect either through HDMI or a displayport->VGA adapter. My MBP exhibits the behavior you mention if the displays are on difference adapters, but it doesn't recognize different displays plugged into the same port/adapter (e.g. all HDMI displays are the same to it, all VGA displays are the same to it).

My Surface only has a minidisplayport port, and I suspect the adapter I'm using isn't fancy enough to tell the Surface that the attached displays are in fact different.

Definitely a bummer though. and 4k support in general on Windows 10 (and macOS, but less so) is a little iffy. Issues really start to show when remoting into a session on a device hooked up to a 4k monitor.

The question is fingerprinting the monitor. In the HDMI world you can get the serial number from the EDID record usually. If you're in an adapter which is interposing as a 'virtual' monitor between you and the real monitor all bets are off. We had an old Matrox unit that would take 3 DVI monitors and make them appear as one monitor for example.

On the surface dock the dual monitors connect to the dock's DP connectors.

This functionality is really broken in OSX though. Forget plugging and unplugging them, even MacOS putting my displays to sleep causes it to move windows around randomly when it wakes back up. Particularly moving a bunch of them off the screens completely.

This works for me With Win 10. At work I use a docking station with 2 screens. At home I plug a MiniDP adapter with a single monitor. At work screens are side by side. At home laptop screen is below monitor. Whenever I plug in it knows what configuration to go to.

But does it remember app sizes and locations? It doesn't on mine.

I regularly notice that if I open in a file in Explorer that launches an app that's not opened, or launch a taskbar app, it will open on the opposite monitor.

It's baffling since I often physically move my main monitor, either bring it closer in front to sit back and play a game or rotate it to the side so I can watch videos from the nearby couch (with a trackball as controller).

I never determined that it was opening them in a remembered fashion, in fact I'm pretty sure that sometimes closing the window from my main and relaunching another file it will pop up on the other side again, so I made a habit of dragging files to prevent that.

The impression I got is that it is spreading to the less busy monitor as a "favor", but it's not consistent - can't reproduce right now. I really have no clue what the logic is, and whether it's the behavior of some apps I use or the OS, or something weird related to having 2 mouses plugged in.

Either way, it's very annoying.

This is interesting to me. As an avid user of multi-monitors (no such thing as too many screens!) only recently has OSX (er, MacOS) even been at par with Windows.

I also agree that these days MacOS does a better job at multi-monitor for laptops, but still is lacking in other areas of usability vs. W10 to me.

The one thing I really miss when switching to MacOS from using my windows workstation is the windows-arrow key shortcuts to quickly move windows between screens and snap them to half the screen size. I waste an amazing amount of screen real estate on my Mac simply because resizing windows and moving them around takes too much time and dexterity.

Both have horrible monitor re-connection bugs, you just have to spend time with them to see them. MacOS windows still constantly get moved to almost-off-screen where you can barely click and drag them to restore, Windows sometimes doesn't wake one out of 4 sleeping monitors, etc. It's certainly miles better than even 2 years ago, but annoying bugs abound. Especially if you plug in at home and at work to different monitor configurations.

In general multi-monitor support until very recently seemed like a half-baked solution on both platforms. I'm very happy with the progress on this front (after a decade of stagnation) in the last couple years. I am cautiously optimistic this development pace will continue and finally iron out all the annoying usability bugs we've been living with for 10+ years.

Magnet helps to move and resize windows. There are many similar apps. Magnet is simple and attractive with easy to use default shortcuts.

Either drag to a corner/edge or press `⌃⌥[LUNE←↓↑→]`. `⌃⌥⌘[←→]` for previous/next display. `⌃⌥` + `Enter` to maximize, `C` to center, and `Backspace` to restore. Can do thirds now as well.

I would still get excited to see a well-executed tiling WM in macOS.



> One of the interesting things that Apple seems to do in MacOS is to remember specific screens. Plugging into them recalls a previous display arrangement setup.

Linux does that as well: it remembers the identifying information of attached displays, and remembers the last configuration you used with that set of displays attached.

That simple heuristic works well for docking, TVs, projectors, and many other use cases.

I use Linux and I always have problems with this. Which stack (eg. distro, desktop environment) are you using?

I finally gave up and made shell scripts using ARandR and bound them as keyboard shortcuts.

MATE 1.16.1 on Mint 18.1 (and more than likely the many previous versions going back to the GNOME 2 days) remembers the resolution and positioning of any attached monitors. At home I use a Thinkpad and a 30" 2560x1600. At work the same Thinkpad and two 24" 1920x1200 screens. MATE recalls the various layouts without issue. If I have used a projector to present, it will retain that configuration for next time I use that projector as well.

Additionally, if I disconnect a monitor it will re-position any applications that were open on the disconnected monitor to the remaining one. If I reconnect that same monitor the applications from it will migrate back to it again. Very neat, just works, gets out of my way and I can get on with the task I am trying accomplish. This comes in handy when switching back and forth the input on the 30" screen to have it show the display output of my desktop PC switching the input has the effect of disconnecting the monitor as far as the laptop is concerned.

This seems like the sort of thing that would be specific to the window manager or desktop environment (not even X11), so indeed saying "Linux does this" is not especially helpful. Not OP, but I've observed this on KUbuntu, both 14.04 and 16.04; I assume that it's a generic KDE feature.

> I use Linux and I always have problems with this. Which stack (eg. distro, desktop environment) are you using?

GNOME 3 does this out of the box, in both Debian stable and latest Debian unstable.

This is by far my #1 usability complaint for Windows as well. It's especially painful if you're using unscaled 4k displays and like to have windows arranged in a 2x2 grid (using corner snapping).

On disconnecting any display, it completely forgets about where your windows were originally (even the ones on the display that is still connected), and rearranges them seemingly randomly in left-right splits on the remaining displays, and makes no effort to restore your configuration when you plug the display back in.

MacOS has handled this aspect a lot better, in my experience, although it has its own issues like not being able to snap arrange windows without 3rd party tools in the first place.

Has anyone tried the latest insider builds? Has the situation improved there?

Got excited for a minute when I saw "Virual Desktop" on Win10 and then saw it changes nothing about the desktops themselves.

Unless I'm totally missing something, is there a way to make Win10 believe the desktop size is larger than the video screen size? With or without device resolution indepdence, I don't care. Let it scroll or something.

It's just really sucky when I'm trying to debug an application that expects a large monitor (ala 1280x960 or something) and my laptop only has 1366x768. Qt literally says "screw it, I'm clipping your window" in these cases.

Depends on your video adaptor/card, but nvidia supports Dynamic Super Resolution (DSR), and AMD supports Virtual Super Resolution, both of which essentially allow you to bump your res beyond the max.

In the nvidia control panel, have a look in '3D settings' > 'Manage 3D settings' > 'DSR - Factors' and you can change the resolution multiplier. (Not sure why it's in 3D settings, as it applies to the desktop along with anything else).

It's a piece of crap Dell with an Intel video deck, so no good.

This may be what you're looking for, though I've not tried it myself:


No, this only works in the positive direction (making pixels bigger so vision-impaired people can read text, for example).

What I need is this setup, but be able to go lower than 100%. So if I chose 50% for example, my 1366x768 LCD actually looks like a 2732x1536 desktop to Windows.

Win10 won't go lower than 100%.

One thing Windows I'd really like is to make any full screen window into a "virtual desktop" so I can switch between full screen items using the Windows 10 shortcut keys (eg: win+ctrl+left/right).

Eg: * Multiple concurrent Remote Desktops running in full screen? Make them all separate virtual desktops so you can switch between and manage them like you can with virtual desktops.

These looks like some nice additions to the Windows 10 virtual desktop. I remember playing with Compiz (https://en.wikipedia.org/wiki/Compiz) on SUSE Linux back when Windows Vista was still in beta, and thinking how futuristic the multi-desktop functionality was.

Independent virtual desktops per monitor would be my most missing feature in Windows 10's implementation. Just something similar to the "Displays have separate Spaces" feature from macOS.

This was the #1 thing I was hoping this would provide when I clicked on the link. Basically stops me from even bothering to use virtual desktops on Windows, I got so used to having my laptop screen as a "persistent" desktop with stuff I always wanted to see on it.

Pinning stuff across all desktops is an OK solution for me. I just put Emacs up on my left monitor and it stays there.

Xmonad has a similar feature as well.

I've never grokked Virtual Desktops (I used to use DexPot years ago on XP). You anyway carry the list of windows open in your head in that horrible background energy-sucking way that multi-tasking does to you (not to mention the fancy wallpaper background that you set to remind yourself the purpose of each desktop, all multiplied by number of virtual desktops!). Instead, I write down all the TODOs that I need to attend to after the most important thing (or use JIRA), and just focus on that one thing. The number of windows open = what I need right now to get work done.

One thing at a time + work after good rest + be good at it + love what you do = productivity. It's a narrow path. Skip any of these and you're fooling yourself, IMHO.

In my case I keep using the same desktops for the same things. I keep the main browser instance on 1, my main work is on 3, music is on 9 and so on. With an indicator on my top bar that tells me which virtual desktop has windows open and some weeks of use, it became second nature and now cannot live without such a system without losing productivity big time. Anything else feels extremely inefficient!

Interesting, thanks! :-)

Looks like it could be useful.

For anyone who wants to play with Windows 10 virtual desktops, just FYI, can use the keyboard shortcut Win + Ctrl + Left Arrow/Right Arrow to move between virtual desktops (might have to create a second virtual desktop before this works, I can't remember).

And to quickly create a 2nd virtual desktop: Win+Tab and there's a "New Desktop" button in bottom right

Or ctrl+win+D

Does it also work if I have a Remote Desktop RDP session at full screen?

In my Mac configuration where I have several RDP sessions, I can switch from full screen RDP to full screen RDP with Ctrl+Alt+Left/Right, which is a joy (I have an IBM Model M without Win key).

I have not managed to do something similar with W10.

With this tool you can move a window to a different virtual desktop with a customizable shortcut.

Yes I can see that, I was just pointing out a standard Windows shortcut that was worth knowing (for those with an interest in using virtual desktops).

Coming from macOS my main issues with win10 virtual desktops were 1) the inability to save and persist my desktop configuration through reboots, 2) the inability to assign specific apps to always open on a particular desktop and 3) being able to define shortcuts, I use ctrl+1-5 on my Mac and it's become muscle memory to jump directly between desktops.

Having quickly scanned the link it looks like it may provide the key shortcuts so that's one step forward. The other two issues are probably closely related so I'm hopeful these will be possible in one form or another eventually.

Try a "real" virtual desktop app, not the Windows 10 toy. http://virtuawin.sourceforge.net/

Why is it suddenly acceptable to post(run?) random binaries from a random anon dude? No, thanks fsb.

I'm a heavy user of virtual desktops in win 10, I see how this makes my life a little better.

A feature that Win 10 has and I was missing in mac (maybe they have it by now) was that desktops doesn't share taskbar and open windows states. So if you Alt+Tab you see only windows in current desktop. Same as using taskbar.

A feature I'm still missing is to save the state of all opened windows, and to have different icons on taskbar and desktop per virtual desktop (like separate computers).

Also there's a bug where chrome windows from all desktops just to the first desktop after waking from sleep.

Plugging a Frida hook I developed to let you seamlessly CTRL-ALT-LEFT/RIGHT to have rdp-sessions-as-virtual-desktops and be able to switch back and forth.

Niche but changed the way I use VMs forever.


I wrote something similar a while back: https://github.com/m0ngr31/VirtualDesktopManager

I switched to Linux soon after though, so I'm sure this project is much better now.

Have you looked into using DexPot for Windows? It's the best virtual desktop tool I've used on any platform.


Guidelines | FAQ | Support | API | Security | Lists | Bookmarklet | Legal | Apply to YC | Contact