#define MAX_WINDOWS 120
// Global variables
-HWND switchdialog;
+HWND switchdialog = NULL;
HFONT dialogFont;
int selectedWindow = 0;
BOOL isOpen = FALSE;
LRESULT WINAPI DoAppSwitch( WPARAM wParam, LPARAM lParam )
{
- HWND hwnd;
+ HWND hwnd, hwndActive;
MSG msg;
BOOL Esc = FALSE;
INT Count = 0;
WCHAR Text[1024];
- switchdialog = NULL;
+ // Already in the loop.
+ if (switchdialog) return 0;
+
+ hwndActive = GetActiveWindow();
+ // Nothing is active so exit.
+ if (!hwndActive) return 0;
+ // Capture current active window.
+ SetCapture( hwndActive );
switch (lParam)
{
case VK_TAB:
- if( !CreateSwitcherWindow(User32Instance) ) return 0;
- if( !GetDialogFont() ) return 0;
+ if( !CreateSwitcherWindow(User32Instance) ) goto Exit;
+ if( !GetDialogFont() ) goto Exit;
ProcessHotKey();
break;
windowCount = 0;
Count = 0;
EnumWindowsZOrder(EnumerateCallback, 0);
- if (windowCount < 2) return 0;
+ if (windowCount < 2) goto Exit;
if (wParam == SC_NEXTWINDOW)
Count = 1;
else
break;
default:
- return 0;
+ goto Exit;
}
// Main message loop:
while (1)
}
}
Exit:
+ ReleaseCapture();
if (switchdialog) DestroyWindow(switchdialog);
switchdialog = NULL;
selectedWindow = 0;