Can't see PuTTY window on Windows Vista any longer

Right click putty.exe and on the compatibility tab check "Disable desktop composition." This worked for me. It disables Windows Aero theme while putty is running. It's annoying but works.


The only true fix for this is to update to the latest version of PuTTY (>=0.65) from the main PuTTY website.

NOTE: 0.64 (current "stable" as of 2015-06-25) may not work, you need >=0.65. Check the prerelease or development builds.

The reason for this problem is in how PuTTY was incorrectly setting up and showing it's window, it worked more by accident than design and the "bug" that made it actually show up at all was fixed by a recent Windows Update. This meant the bug no longer worked and the PuTTy window no longer showed up properly.

From this PuTTY commit log

... a recent Vista update (all reports implicate KB3057839) has caused that not to work any more: on an updated Vista machine, in some desktop configurations, it seems that any attempt to fiddle with WM_SETREDRAW during dialog setup can leave the dialog box in a really unhelpful invisible state - the window is physically there (you can see its taskbar entry, and the mouse pointer changes as you move over where its edit boxes are), but 100% transparent.

So now we're doing something a bit more sensible. <snip> at the end of setup, we show the window in the sensible way, by a docs-approved call to ShowWindow().

This appears (on the one machine I've so far tested it on) to fix the Vista invisible-window issue, and also it should be more API-compliant and hence safer in future.


PuTTY window is there, although it gets the "transparent" property for some bogus reason. A lighter workaround than the ones I've seen so far is to set visibility back.

The following methods work on 32 bit Vista Home Premium, SP2. YMMV.

Method 1, a short AutoHotkey script:

; show_PuTTY.ahk
; Must be launched when putty.exe is already running

#NoEnv  ; Recommended for performance and compatibility with future AutoHotkey releases.
SendMode Input  ; Recommended for new scripts due to its superior speed and reliability.
SetWorkingDir %A_ScriptDir%  ; Ensures a consistent starting directory.

WinWait, PuTTY Configuration
WinSet, Transparent, 255

Method 2, Powershell script called from batch file (it doesn't need any additional programs):

# unhide.ps1

$definition = @"    
      [DllImport("user32.dll")]
      static extern IntPtr FindWindow(string lpClassName, string lpWindowName);

      [DllImport("user32.dll")]
      static extern int SetWindowLong(IntPtr hWnd, int nIndex, int dwNewLong);

      public static void ShowWin()
      {
         IntPtr hwnd = FindWindow("PuTTYConfigBox", "PuTTY Configuration");
         SetWindowLong(hwnd, -20, 524288);
      }
"@

add-type -MemberDefinition $definition -Namespace my -Name WinApi

do {}
until(Get-Process putty -ErrorAction SilentlyContinue | Select -p Responding)

[my.WinApi]::ShowWin()

Then you may call it from a batch file (eg. PuTTY.bat), placed in the same position where unhide.ps1 lies:

@echo off

rem PuTTY.bat

start "" "%ProgramFiles%\PuTTY\putty.exe"
rem Use %ProgramFiles(x86)% for 32 bit PuTTY on 64 bit Vista

powershell.exe -ex remotesigned -f unhide.ps1

Please see credits on comment below.