Следующий код должен работать просто отлично:
// 1. Change the function to call the Unicode variant, where applicable.
// 2. Ask the marshaller to alert you to any errors that occur.
// 3. Change the parameter types to make marshaling easier.
[DllImport("user32.dll", CharSet = CharSet.Auto, SetLastError = true)]
[return: MarshalAs(UnmanagedType.Bool)]
private static extern bool SystemParametersInfo(
int uiAction,
int uiParam,
ref RECT pvParam,
int fWinIni);
private const Int32 SPIF_SENDWININICHANGE = 2;
private const Int32 SPIF_UPDATEINIFILE = 1;
private const Int32 SPIF_change = SPIF_UPDATEINIFILE | SPIF_SENDWININICHANGE;
private const Int32 SPI_SETWORKAREA = 47;
private const Int32 SPI_GETWORKAREA = 48;
[StructLayout(LayoutKind.Sequential)]
public struct RECT
{
public Int32 Left;
public Int32 Top; // top is before right in the native struct
public Int32 Right;
public Int32 Bottom;
}
private static bool SetWorkspace(RECT rect)
{
// Since you've declared the P/Invoke function correctly, you don't need to
// do the marshaling yourself manually. The .NET FW will take care of it.
bool result = SystemParametersInfo(SPI_SETWORKAREA,
IntPtr.Zero,
ref RECT,
SPIF_change);
if (!result)
{
// Find out the error code
MessageBox.Show("The last error was: " +
Marshal.GetLastWin32Error().ToString());
}
return result;
}
Но я не совсем уверен, что ты пытаешься сделать. По умолчанию рабочая область - это часть экрана, которая не закрыта системной панелью задач или панелями инструментов рабочего стола приложения. Вы не сможете сделать его больше, чем область, которая доступна на вашем экране (хотя, если бы у вас получилось, неплохой трюк!). Ваши окна еще не заполняют весь экран, когда вы максимизируете их?
И даже на машинах с несколькими мониторами вы не можете настроить рабочую область на несколько мониторов. В документации MSDN сказано, что она ограничена настройкой рабочей области монитора, содержащей указанный прямоугольник:
В системе с несколькими мониторами дисплея функция устанавливает рабочую область монитора, которая содержит указанный прямоугольник.