Home

Awesome

AltTabber

AltTabber started back in the Windows 7 days out of frustration with managing a large number of windows. There were no good virtual desktop implementations, and the taskbar was getting ever more annoying compared to ancient versions of Windows. Additionally, I started having more and more monitors connected, and it was getting a bit out of hand to quickly identify "the Visual Studio that's on the 3rd monitor".

The goals of this project were to have a hotkey activation, similar to ALT + TAB or Gnome's ALT + F1 / super, which would lay out a grid of all windows present on each monitor in a multimonitor setup. The grid(s) may be filtered with a simple search string. You may activate windows primarily through keyboard use, but mouse is supported. It shall show DWM live thumbnails if Aero is running. It shall be lightweight.

This was successful, but Windows has made things less of a problem as we went from 7 through 8.1 to 11. But I still use it purely because of AltTabber's keyboard-first design, and especially because I can very quickly type n o t e p a d and list all 20 open notepad windows, and I can then figure out where I wanted to go.

This project lives at https://github.com/alzwded/AltTabber/ .

Key bindings and activation

(hotkey refers to the global hotkey associated with AltTabber. By default, it is ALT + key above tab)

actioninputscomments
open overlayhotkey or clicking the icon in the notification areathe main bread of the application
close overlayEscexits the overlay without switching to a new window and without exiting
exit the applicationAlt-F4duh
move to other windowsTab, Shift-Tab, arrow keys, mouse + click, mouse wheelthis doesn't actually switch the window, rather the selection for actually triggering the selection
switch windowEnter, double click, hotkeyswitches to the selected window (the one with a red background
help/aboutF1
start/stop loggingF2this is a debug log; it writes it somewhere in %TEMP% in a file with a name like alt????.tmp
search/filterany printable charactersstarts filtering the windows by name and/or image path in order to help find your window among a couple of dozen

Changing the hotkey

The hotkey can be changed from Alt-key above tab by going in the registry under HKEY_CURRENT_USER\Software\jakkal\AltTabber and modifying the modifiers and key values.

The modifiers value is a combination of the values described for fsModifiers here things.

The key value is one of these.

For example, you can set the modifiers value to 3 (Alt + Ctrl) and the key value to 33 (the 3 key). If you didn't catch on, the aforementioned values are numbers in hexadecimal.

If you mess something up, just delete the HKEY_CURRENT_USER\Software\jakka\AltTabber key and the app will make sure to recreate it again from defaults.

If you want to remove this app from your computer forever, remember to also delete that key. No uninstaller is currently provided, and it's unlikely that one will be provided anytime in the future.

That key also contains a flag, resetOnClose, which, if set to 0x00000000, will prevent the AltTabber interface from being reset when you close a window using the context menu. This leaves some dangling slots/thumbnails around, but the resets were getting annoying.

Accessibility

As of version 1.9, AltTabber implements UI Automation. The overview presents the thumbnails as button control types with the invoke pattern. The window title is read when one of these thumbnail buttons comes into view (same text that you see rendered on screen). It is recommended to use AltTabber's builtin keyboard navigation (i.e. TAB, SHIFT+TAB, ENTER and ESCAPE) since that is the code path that was most thoroughly tested in the past decade. Screen reader commands to the tune of "move to next control" and "activate/invoke" control seem to work, but I am not a proficient AT user, so it's hard to judge if I got the UIA provider implementation right.

Accessibility is not thoroughly tested. If you do test it, and it has problems, do let me know. Though I understand both JAWS and NVDA already have a fancy window list builtin, so I'd also like to know why you are here :-).

Getting AltTabber

You should fetch the .exe from Github Releases. You will need some sort of MSVCRT installed, but you must get that from Microsoft. Check the vcxproj's Release x64 configuration to see what toolset it was built with; you'll need the MSVCRT from that era. I have always been in a situation where these were installed already, so I never bothered to figure out exactly which one you need at any given moment in time.

You can build it from source with whatever the version du jour of Visual Studio Community is. If it complains about toolsets or SDKs, just pick whatever your installation came with, this project should have no special requirements w.r.t. the toolchain version. Prefer the Release x64 configuration. The 32 bit configuration has fundamental issues trying to fetch information for 64 bit running applications. Building from source will guarantee you have the appropriate MSVCRT installed as a by-product of setting up the toolchain.

Hacking

This project was a hackjob to begin with, but here is an outline:

A large amount of windows need to be filtered out. You'd be surprised how many eye candy rich apps have a ton of floating BS to make them look pretty. Windows 8 added cloaking to have an intended way to do this. Cloaked windows participate in DWM rendering, but they are meant to be ignored for all intents and purposes, i.e. all the BS that older applications used to do for eye candy effects.

Accessibility isn't terribly well tested, but screen readers can "see" it, and navigation works. If you add new "features", make sure they are accessible. Narrator is installed on all Windows machines, turn it on with WIN + CTRL + ENTER, you don't really need to do anything special to check it reads out everything that's going on.

Disclaimer

THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.