Размер / положение окна изменились после сеанса удаленного рабочего стола

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

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

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

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

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

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


person Mr. Wonderful    schedule 11.11.2012    source источник


Ответы (1)


Вероятно, вам следует передать это суперпользователю, но, поскольку вы спросили о 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.

person Mitch    schedule 11.11.2012