2012-11-11 2 views
0

Я использую Remote Desktop для подключения с ноутбука с Windows XP Professional SP3 и одного экрана на удаленный компьютер под управлением Windows 7 Professional с двумя мониторами.Размер окна/позиция изменен после сеанса удаленного рабочего стола

Разрешение ноутбука составляет около 1024x768, а каждый монитор на удаленном ПК составляет около 1600x900.

Перед тем как начать сеанс удаленного рабочего стола, я перемещаю все окна на втором мониторе ПК с Windows 7 на первый монитор. (Оба ноутбука и ПК находятся в одной и той же офисной зоне.)

Сеанс удаленного рабочего стола работает, но после закрытия сеанса на ноутбуке и возврата к работе на удаленном ПК с Windows 7 мне обычно приходится перемещать и изменять размер многих из окон, чтобы вернуться к первоначальной договоренности.

С моей текущей конфигурацией, как я могу избежать «переместить и изменить размер» выше?

Если на ноутбуке была Windows 7 Professional, это поможет решить эту проблему?

ответ

0

Возможно, вы должны перенести это на суперпользователь, но поскольку вы спросили о StackOverflow, вы можете реализовать программу, которая выполняет то, что вы описываете.

В псевдокоде:

class WindowPosition { 
    IntPtr hWnd; 
    RECT Location; 
} 

List<WindowPosition> positions = null; 

void OnCaptureWindowPositionHotkey() { 
    positions = new List<WindowPosition>(); 
    EnumWindows(enumStoreWindows, null); 
} 

void OnResetWindowPositionHotkey() { 
    EnumWindows(enumStoreWindows, null); 
} 

void enumSetWindows(IntPtr hwnd, IntPtr obj) { 
    positions.Add(new WindowPosition() { 
     hWnd = hwnd, 
     Location = GetWndLocation(hwnd) 
    }; 
} 

RECT GetWndLocation(IntPtr hwnd) { 
    RECT outrect = null; 
    GetWindowRect(hwnd, out outrect); 
    return outrect; 
} 

void enumSetWindows(IntPtr hwnd, IntPtr obj) { 
    var loc = (from wl in positions 
       where wl.hWnd == hwnd 
       select wl).FirstOrDefault(); 
    if (loc == null) return; 
    SetWindowPos(hwnd, null, 
     loc.Location.X, 
     loc.Location.Y, 
     loc.Location.Width, 
     loc.Location.Height, 
     0); 
} 

где EnumWindows, SetWindowPos и GetWindowRect все функции Win32. См .: http://msdn.microsoft.com/en-us/library/windows/desktop/ms633497(v=vs.85).aspx, http://msdn.microsoft.com/en-us/library/windows/desktop/ms633545(v=vs.85).aspx и http://msdn.microsoft.com/en-us/library/windows/desktop/ms633519(v=vs.85).aspx.

Смежные вопросы