cycleWindow.ahk

Allows user to tab through a narrowed subset of windows, as one would alt-tab through the set of all visible windows, or open a new window by launching a path, all in a single hotkey.

Requires maul.esel’s library “Thumbnail Lib.ahk” (http://www.autohotkey.net/~maul.esel/ThumbnailLib/Thumbnail%20Lib.ahk).

Info

cycleWindow Version: 1.22

Forum Link: http://www.autohotkey.com/forum/viewtopic.php?t=71596

Author: Jon Smithers

AutoHotkey Version: 1.0.48.05

Platform: Windows Vista, Windows 7

Summary
cycleWindow.ahkAllows user to tab through a narrowed subset of windows, as one would alt-tab through the set of all visible windows, or open a new window by launching a path, all in a single hotkey.
Functions
cycleWindowCycles through a subset of windows or launches a path.
cycleCurrentWindowCycles through windows of the same class as the currently active window.
Examples
Changes

Functions

cycleWindow

cycleWindow(title = "",
regExp = "([^-]*).*",
pathToRun = "")

Cycles through a subset of windows or launches a path.

Parameters

titleDetermines which windows will be included in the subset.  This can be a title, like “Notepad”, or something like “ahk_class CabinetWClass”.  Windows without a title are automatically removed.  If this parameter is blank, the subset will include all windows, except those with blank titles, the Start Button window, as well as the bottom window, which is always “Program Manager”.  You can also employ a much more complicated and flexible method of determining the subset by putting “|” as the first character.  See the “Inclusion/Exclusion” section below.
regExpA regular expression that describes how to trim the title of each window in the subset for display in the ListView.  The listview will display only the first group in the regular expression.  By default, regExp is “([^-]*).*”.  Simply putting “” will yield the same result.  Specify the regular expression “(.*)” to not trim anything from the title.  Specify “0” to not display the ListView at all.  This parameter is useful because you may not want to see (for example) the “ - Google Chrome” at the end of every Chrome window title.  Specifying “(.*) - Google Chrome” here will trim that out.  For more info on regular expressions, see http://www.autohotkey.com/docs/misc/RegEx-QuickRef.htm.
pathToRunThe path used to open a new window in the case that no existing windows currently match the criteria to be in the subset, or in the case that you are holding the “cycleWindow_NewWindowKey” (which is initially set to “LWin”) when the hotkey is pressed.

Inclusion/Exclusion

This is a mode where cycleWindow uses a much more flexible and complex method of determing the subset.  To use inclusions/exclusions, the first character of the title parameter must be “|”.

Format”| includeCriteria_1, includeCriteria_2, ..., includeCriteria_X | excludeCriteria_1, excludeCriteria_2, ..., excludeCriteria_Y “

The comma-separated list after the first “|” comprises the Inclusions.  The comma-separated list after the second “|” comprises the Exclusions.  Each criteria can be a window title, or a window class if it is preceded with “ahk_class” (only titles and classes are supported).

Commas should only be placed BETWEEN criteria of a comma-separated list (never at the end).

It is also possible to specify 0 inclusions or 0 exclusions.  Specifying 0 inclusions will include ALL windows except those that match the specified exclusions.  Specifying 0 exclusions will simply not exclude any of the windows that match the specified inclusions.

SETTINGS

A few easily-changeable tweaks that affect how the function acts.

These can be found in the beginning lines of the function in cycleWindow.ahk.  If you want these settings to differ between various calls of cycleWindow, you can add them as optional parameters to cycleWindow.

cycleWindow_UseThumbnailsIf you have Windows Vista or later, you can use window thumbnails.  This is a nice way to show a window without having to actually activate it.  This is the preferred way, but requires maul.esel’s library from http://www.autohotkey.com/forum/viewtopic.php?t=70839.
cycleWindow_thumbnailColorThumbnails are displayed on a GUI.  This GUI, which is underneath the thumbnails, can be transparent or opaque.  If you are using Aero (so the borders of your windows are transparent), having a colored GUI behind the thumbnails creates a nice highlighting effect.  Specify the color of the highlight in this setting.  To disable highlight, set it to “0” (this might be desirable if you don’t use aero transparency).
cycleWindow_thumbnailBorderThumbnails are displayed on a GUI.  This determines how many pixels the GUI should extend out from behind the thumbnail, creating a border.  If you are using Aero, the highlighting effect should be enough, so set this to 0.
cycleWindow_disableThumbFadeDisables the highlight-fading that occurs when your release your finger from the holdkey (e.g.  CapsLock).  This feature uses the only global variable in cycleWindow.
cycleWindow_ListViewGUIThe GUI number (1-99) that will be used to create the ListView which shows the window titles.
cycleWindow_ThumbnailGUIThe GUI number (1-99) that will be used to create the windows’ thumbnails (if cycleWindow_UseThumbnails is set to true).
cycleWindow_matchModeTitleMatchMode.  Used with AHK’s SetTitleMatchMode (http://www.autohotkey.com/docs/commands/SetTitleMatchMode.htm) to set how windows are to be searched with the title parameter.  It has been set to 2, meaning that if a window contains title’s text anywhere in its title, it is considered a match.
cycleWindow_ListViewWidthThe width (in pixels) of the ListView.  Increasing the width will cause the ListView to extend farther into the center of the screen.  This is set initially to 200.
cycleWindow_NewWindowKeyIf this key is held down when you press the cycle key, the function launches a new window by running the path of the parameter pathToRun.  It is set initially to “LWin”.
cycleWindow_reverseKeyIf this key is held down when you press the cycle key, the function cycles backwards instead of fowards (like shift in Alt-Tab).

cycleCurrentWindow

cycleCurrentWindow(regExp = "([^-]*).*")

Cycles through windows of the same class as the currently active window.  This function simply gets the class of the active window, and passes it as a parameter to cycleWindow.

Examples

CapsLock & e::cycleWindow("ahk_class CabinetWClass", "", "C:\Users\Jon\School\Fall11") ;Windows Explorer

CapsLock & p::cycleWindow("ahk_class MSPaintApp", "(.*) - Paint", "mspaint")

CapsLock & v::cycleWindow("VLC ahk_class QWidget", "(.*) - VLC media player", "C:\Program Files (x86)\VideoLAN\VLC\vlc.exe")

CapsLock & i::cycleWindow("- Google Chrome", "(.*) - Google Chrome", "C:\Users\Jon\AppData\Local\Google\Chrome\Application\chrome.exe")

CapsLock & n::cycleWindow("ahk_class Notepad2U", "(.*) - Notepad2", "C:\Program Files (x86)\Notepad2\Notepad2.exe")

CapsLock & c::cycleCurrentWindow("([^\-]+).*")

Changes

5/10/2011-5/11/2011

  • fixed thumbnail-sizing bug occuring when corresponding window was about full height of the screen (‘twas a silly mistake)
  • removed obsolete cycleWindow_shrinkThumb setting
  • removed Critical command from top of function, fixing some really weird issues resembling buffered hotkey threads (even though “#MaxThreadsBuffer” was off)
  • fixed the highlight-fading’s “cutting-out” issue, which was mostly accomplished through the change immediately above
  • added ability to change ListView width

The above changes constituted the 1.1 update

5/13/2011

  • user can now cycle backwards on the first iteration (in the case that a window in the subset is already active), whereas before user could only cycle backwards on the second iteration and after.
  • all parameters for cycleWindow are optional now
  • the function always removes windows with blank titles from the list
  • when all parameters are omitted, the function will also remove “progman” and “start”.  It also automatically uses the regex “([^\-]+).*” to display the title.
  • the default regex for cycleCurrentWindow is “([^\-]+).*” as well, instead of “(.*)”

5/20/2011-6/1/2011

  • Inclusion/Exclusion - much more flexible and complex way to narrow subset
  • function only removes blank titles when the title parameter is blank (or excluded) or there are no inclusions specified within the title parameter (in the inclusion/exclusion mode)
  • Added code that removes the specific “Start, ahk_class Button” window from the list rather than simply excluding all windows with “Start” in their title.  This code is run whenever the removeBlankTitles code is run.
  • modified default regexes
  • ListView width is now set initially to 200

The above changes constituted the 1.2 update

6/2/2011

  • Removed accidental “.” from the end of the line LV_Modify(i, “+Select”), which may have prevented use with AHK_L.  (update 1.21)
  • Tidied up code for removing extraneous windows.  The code for removeBlankTitles will ALWAYS get run (as before).  However, other extraneous windows, like “Start” and “Progman”, get removed when the title parameter is blank, or there are 0 inclusions.
  • Fixed bug in removeStart code for “Start, ahk_class Button” where the last window in the list would be excluded.  (update 1.22)
cycleWindow(title = "",
regExp = "([^-]*).*",
pathToRun = "")
Cycles through a subset of windows or launches a path.
cycleCurrentWindow(regExp = "([^-]*).*")
Cycles through windows of the same class as the currently active window.
Close