Index: traywnd.cpp =================================================================== --- traywnd.cpp (revision 73921) +++ traywnd.cpp (working copy) @@ -53,6 +53,11 @@ #define IDHK_DESKTOP 0x1fe #define IDHK_PAGER 0x1ff +#define IDHK_PLACE_LEFT 0x200 +#define IDHK_PLACE_RIGHT 0x201 +#define IDHK_MAXIMIZE 0x202 +#define IDHK_MINIMIZE 0x203 + static LONG TrayWndCount = 0; static const WCHAR szTrayWndClass[] = L"Shell_TrayWnd"; @@ -597,6 +602,72 @@ CloseHandle(CreateThread(NULL, 0, s_RunFileDlgThread, this, 0, NULL)); } + void PlaceToLeft(void) + { + HWND hWnd = ::GetForegroundWindow(); + if (!hWnd) + return; + + RECT area; + if (::SystemParametersInfo(SPI_GETWORKAREA, 0, &area, 0)) + { + if (::IsZoomed(hWnd)) + { + ::ShowWindow(hWnd, SW_RESTORE); + } + ::SetWindowPos(hWnd, NULL, 0, 0, area.right/2, area.bottom, 0); + } + } + + void PlaceToRight(void) + { + HWND hWnd = ::GetForegroundWindow(); + if (!hWnd) + return; + + RECT area; + if (::SystemParametersInfo(SPI_GETWORKAREA, 0, &area, 0)) + { + if (::IsZoomed(hWnd)) + { + ::ShowWindow(hWnd, SW_RESTORE); + } + ::SetWindowPos(hWnd, NULL, area.right/2, 0, area.right/2, area.bottom, 0); + } + } + + void Maximize(void) + { + HWND hWnd = ::GetForegroundWindow(); + if (!hWnd) + return; + + if (::IsIconic(hWnd)) + { + ::ShowWindow(hWnd, SW_RESTORE); + } + else + { + ::ShowWindow(hWnd, SW_MAXIMIZE); + } + } + + void Minimize(void) + { + HWND hWnd = ::GetForegroundWindow(); + if (!hWnd) + return; + + if (::IsZoomed(hWnd)) + { + ::ShowWindow(hWnd, SW_RESTORE); + } + else + { + ::ShowWindow(hWnd, SW_MINIMIZE); + } + } + DWORD WINAPI TrayPropertiesThread() { HWND hwnd; @@ -780,6 +851,18 @@ break; case IDHK_PAGER: break; + case IDHK_PLACE_LEFT: + PlaceToLeft(); + break; + case IDHK_PLACE_RIGHT: + PlaceToRight(); + break; + case IDHK_MAXIMIZE: + Maximize(); + break; + case IDHK_MINIMIZE: + Minimize(); + break; } return 0; @@ -2271,6 +2354,10 @@ RegisterHotKey(m_hWnd, IDHK_SYS_PROPERTIES, MOD_WIN, VK_PAUSE); RegisterHotKey(m_hWnd, IDHK_DESKTOP, MOD_WIN, 'D'); RegisterHotKey(m_hWnd, IDHK_PAGER, MOD_WIN, 'B'); + RegisterHotKey(m_hWnd, IDHK_PLACE_LEFT, MOD_WIN, VK_LEFT); + RegisterHotKey(m_hWnd, IDHK_PLACE_RIGHT, MOD_WIN, VK_RIGHT); + RegisterHotKey(m_hWnd, IDHK_MAXIMIZE, MOD_WIN, VK_UP); + RegisterHotKey(m_hWnd, IDHK_MINIMIZE, MOD_WIN, VK_DOWN); return TRUE; }