Simple Window Switcher (sws) is an Alt-Tab replacement for Windows.

Overview

Simple Window Switcher

Simple Window Switcher (sws) is an Alt-Tab replacement for Windows.

Build status

Example usage

An application which implements this is ExplorerPatcher. This project can also be compiled as a library and used standalone in your current workflow.

Compiling

If you need more information, you can also consult the GitHub Actions automated build file here.

The following prerequisites are necessary in order to compile this project:

  • Microsoft C/C++ Optimizing Compiler - this can be obtained by installing either of these packages:

    • Visual Studio - this is a fully featured IDE; you'll need to check "C/C++ application development role" when installing. If you do not require the full suite, use the package bellow.
    • Build Tools for Visual Studio - this just installs the compiler, which you'll be able to use from the command line, or from other applications like CMake

    Download either of those here. The guide assumes you have installed either Visual Studio 2019, either Build Tools for Visual Studio 2019.

  • A recent version of the Windows SDK - for development, version 10.0.19041.0 was used, available here (this may also be offered as an option when installing Visual Studio)

  • Git - you can use Git for Windows, or git command via the Windows Subsystem for Linux.

Steps:

  1. Clone git repo

    git clone https://github.com/valinet/sws
    

    If "git" is not found as a command, type its full path, or have its folder added to PATH, or open Git command window in the respective folder if using Git for Windows.

  2. Compile sws

    • Double click the SimpleWindowSwitcher.sln file to open the solution in Visual Studio. Choose Release and your processor architecture in the toolbar. Press [Ctrl]+[Shift]+[B] or choose "Build" - "Build solution" to compile.

    • Open an "x86 Native Tools Command Prompt for VS 2019" (for x86), or "x64 Native Tools Command Prompt for VS 2019" (for x64) (search that in Start), go to folder containing solution file and type:

      • For x86:

        msbuild ExplorerPatcher.sln /property:Configuration=Release /property:Platform=x86
        
      • For x64:

        msbuild ExplorerPatcher.sln /property:Configuration=Release /property:Platform=x64
        

    The resulting libraries will be in the "Release" (for x86) or "x64\Release" (for x64) folder in the directory containing the solution file.

That's it.

Issues
  • Allow remapping

    Allow remapping

    Hello there!

    Thanks for your work on Simple Window Switcher. Coming from macOS, the cmd + \ shortcut was something much needed on Windows.

    I was wondering if you could consider allowing a setting to change the default modifier alt to ctrl so that people like me could have ctrl+ tab and ctrl + \ and feel at home even on Windows.

    opened by yaserahmady 6
  • Add border for not rounded corner

    Add border for not rounded corner

    Just a suggestion, to distingiush sws from the background content.

    --- a\SimpleWindowSwitcher\sws_WindowSwitcher.c	2022-01-05 15:22:02.000000000 +0800
    +++ b\SimpleWindowSwitcher\sws_WindowSwitcher.c	2022-01-05 15:22:51.000000000 +0800
    @@ -661,12 +661,17 @@
                 bi.bmiHeader.biPlanes = 1;
                 bi.bmiHeader.biBitCount = 32;
                 bi.bmiHeader.biCompression = BI_RGB;
                 StretchDIBits(hdcPaint, 0, 0, siz.cx, siz.cy, 0, 0, 1, 1, &bkcol, &bi, DIB_RGB_COLORS, SRCCOPY);
             }
     
    +        if (_this->dwCornerPreference == 1)
    +        {
    +			_sws_WindowSwitcher_DrawContour(_this, hdcPaint, rc, SWS_CONTOUR_INNER, 1, bkcol);
    +        }
    +
             // Draw highlight rectangle
             if (pWindowList)
             {
                 _sws_WindowSwitcher_DrawContour(_this, hdcPaint, pWindowList[_this->layout.iIndex].rcWindow, SWS_CONTOUR_INNER, SWS_WINDOWSWITCHER_CONTOUR_SIZE, bkcol);
             }
    
    opened by jdp1024 0
  • Whatever for does, it returns 1

    Whatever for does, it returns 1

    https://github.com/valinet/sws/blob/2f67abc2315d3cc15911294e45765fa23f2f56f3/SimpleWindowSwitcher/sws_WindowHelpers.c#L433

    source code

    Finally, 1 will be returned

    for (i = v5; ; i = v16)
    {
      v15 = GetWindow(i, 4u);
      v16 = v15;
      if (!v15)
    	  break;
      
      v14 = GetWindowLongPtrW(v15, -20);
      if ((v14 & 0x40000i64) == 0 && ((v14 & 0x80u) != 0 || (v14 & 0x8000000) != 0))
    	  break;
      
      if (!IsWindowVisible(v16) || _sws_GhostWindowFromHungWindow(v16))
    	  break;
      
      v5 = v16;
    }
    
    return 1; // is BUG?
    
    opened by aeagean 2
Releases(TEST1)
Owner
Valentin-Gabriel Radu
Valentin-Gabriel Radu
The Hoard Memory Allocator: A Fast, Scalable, and Memory-efficient Malloc for Linux, Windows, and Mac.

The Hoard Memory Allocator Copyright (C) 1998-2020 by Emery Berger The Hoard memory allocator is a fast, scalable, and memory-efficient memory allocat

Emery Berger 882 May 13, 2022
A single file drop-in memory leak tracking solution for C++ on Windows

MemLeakTracker A single file drop-in memory leak tracking solution for C++ on Windows This small piece of code allows for global memory leak tracking

null 22 Apr 23, 2022
PoC for CVE-2021-32537: an out-of-bounds memory access that leads to pool corruption in the Windows kernel.

CVE-2021-32537: Out-of-bounds access in RTKVHD64 leading to pool corruption. This is a bug that I reported to Realtek beginning of April 2021. The aff

Axel Souchet 55 Feb 14, 2022
Modern C++ 32bit Windows Process Memory Library.

basil Simple 32-bit Windows Process Memory Library. Written in Modern C++. JavaScript bindings basil (wilL) be available as bindings for JavaScript. C

cristei 3 Sep 23, 2021
A memory allocation program, it is used for doing an experiment to find out the detail of Microsoft Windows taskmgr performance information

memory-allocation-test A memory allocation program, it is used for doing an experiment to find out the detail of Microsoft Windows taskmgr performance

Chang Wei 3 Nov 17, 2021
Using shared memory to communicate between two executables or processes, for Windows, Linux and MacOS (posix). Can also be useful for remote visualization/debugging.

shared-memory-example Using shared memory to communicate between two executables or processes, for Windows, Linux and MacOS (posix). Can also be usefu

null 8 Mar 18, 2022
Known ring3 memory protections that can be handled at a simple level.

EasySafe Known ring3 memory protections that can be handled at a simple level. Example usage Check Example.cpp Syscall hooking Add a syscall hook Spec

illegal-instruction 46 May 11, 2022
Malloc Lab: simple memory allocator using sorted segregated free list

LAB 6: Malloc Lab Main Files mm.{c,h} - Your solution malloc package. mdriver.c - The malloc driver that tests your mm.c file short{1,2}-bal.rep - T

null 1 Feb 28, 2022
A simple C++ library for creating and managing bitstreams in memory.

ezbitstream (v0.001) A simple C++ library for creating and managing bitstreams in memory. API & Implementation ezbitstream implements bitstreams with

Unsal Ozturk 2 Feb 4, 2022
Yori is a CMD replacement shell that supports backquotes, job control, and improves tab completion, file matching, aliases, command history, and more.

Yori is a CMD replacement shell that supports backquotes, job control, and improves tab completion, file matching, aliases, command history, and more.

Malcolm Smith 1k May 8, 2022
Microcontroller based switchless ROM switcher for the Commodore 1541-II disk drive

Retroninja 1541-II Switchless Multi-ROM A microcontroller based switchless ROM switcher for the Commodore 1541-II disk drive. Switch between stock CBM

retroninja 4 Feb 28, 2022
A cross-platform OpenXR capabilities explorer and runtime switcher with a CLI and GUI.

OpenXR Explorer OpenXR Explorer is a handy debug tool for OpenXR developers. It allows for easy switching between OpenXR runtimes, shows lists of the

Nick Klingensmith 108 May 10, 2022
This repo is for the open source DSP filters made for alt:V.

voice-filters This repo is for the open source DSP filters made for alt:V. Editing & building Run generate.bat and find the Visual Studio project file

altMP team 4 Apr 19, 2022
Control-Alt-Delete - Help Tux Escape Beastie's Jail!

Control-Alt-Delete Help Tux escape Beastie's jail by completing the following challenges! Challenges Challenge 00: Drinks: Tux needs to drink less. Ch

NDLUG 8 Oct 31, 2021
imGuIZMO.quat is a ImGui widget: like a trackball it provides a way to rotate models, lights, or objects with mouse, and graphically visualize their position in space, also around any single axis (Shift/Ctrl/Alt/Super)

imGuIZMO.quat v3.0 imGuIZMO.quat is a ImGui widget: like a trackball it provides a way to rotate models, lights, or objects with mouse, and graphicall

Michele Morrone 251 May 8, 2022
Tab module for imgui. Should be relatively forwardly compatible.

Tab module for imgui. Should be relatively forwardly compatible.

Scott Mudge 117 Apr 18, 2022
NWM is a simple window manager for linux which uses Xlib for managing windows

NWM is a simple window manager for linux which uses Xlib for managing windows.

Kumar Gaurav Pandey 18 Apr 8, 2022
A simple utility that cold patches dwm (uDWM.dll) in order to disable window rounded corners in Windows 11

Win11DisableRoundedCorners A simple utility that cold patches the Desktop Window Manager (uDWM.dll) in order to disable window rounded corners in Wind

Valentin-Gabriel Radu 351 May 15, 2022
A readline and libedit replacement that supports UTF-8, syntax highlighting, hints and Windows and is BSD licensed.

Read Evaluate Print Loop ++ A small, portable GNU readline replacement for Linux, Windows and MacOS which is capable of handling UTF-8 characters. Unl

Marcin Konarski 570 May 7, 2022
An open-source replacement for Windows UAC

Custom UAC What is it It is an open source replacement of UAC. It was a successor of my previous project UAC Renderer. As the functionalities and usag

null 3 Mar 6, 2022
Ccd - Edge first cd replacement tool for Windows cmd shell.

Cursorial CD Cursorial CD, or ccd for short, is a cd replacement for Window's cmd shell. Unlike cd, it operates on an edge first search, so you can qu

Scott Seligman 5 Feb 2, 2022
A modern and functional replacement for the About Windows dialog

Modern Winver A modern and more functional replacement for the About Windows screen powered by UWP and RegistryRT, providing details on Windows and yo

Torch 105 May 14, 2022
tabbed window manager that can tile windows inside floating containers

tabbed window manager that can tile windows inside floating containers

Seninha 85 May 6, 2022
tabbed window manager that can tile windows inside floating containers

shod ┌───────────────────────┐ │ │ ┌─────┼────

Seninha 85 May 6, 2022
A simple "no frills" drop-in replacement PCB for the KBDfans 67mkII / 67lite

67mk_E A simple "no frills" drop-in replacement PCB for the KBDfans 67mkII / 67lite KiCAD PCB files Gerbers for PCB production JLCPCB BOM JLCPCB CPL V

null 21 Mar 16, 2022
Tinygettext - A simple gettext replacement that works directly on .po files

tinygettext tinygettext is a minimal replacement for gettext written in C++. It can read .po files directly and doesn't need .mo files generated from

null 55 Feb 28, 2022
WMBar is a window manager agnostic status bar that aims to be lightweight, simple, extensible/modular and fast.

WMBar is a window manager agnostic status bar that aims to be lightweight, simple, extensible/modular and fast.

WMBar 1 Nov 27, 2021
A simple X11 window manager

Devoid WM A simple x11 tiling window manager Devoid tries to abide by the principle - "Do one thing, do it well". All it is is a window manager which

Murtaza Udaipurwala 26 Mar 9, 2022
miniz: Single C source file zlib-replacement library, originally from code.google.com/p/miniz

Miniz Miniz is a lossless, high performance data compression library in a single source file that implements the zlib (RFC 1950) and Deflate (RFC 1951

Rich Geldreich 1.4k May 11, 2022