如何使用SPI_SETWORKAREA标志调整桌面工作区的大小?

我一直在尝试调整桌面工作区域(窗口最大化的区域)。 我find了所需的API,但似乎无法调整工作区域的大小。 它什么也没有做。

我使用Windows 7旗舰版64位,所以我也尝试编译它在x64'模式',仍然没有运气。 有人能给我一个正确的方向?

这是我到目前为止:

[DllImport("user32.dll",EntryPoint = "SystemParametersInfoA")] private static extern Int32 SystemParametersInfo(Int32 uAction,Int32 uParam,IntPtr lpvParam,Int32 fuWinIni); 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; public struct RECT { public Int32 Left; public Int32 Right; public Int32 Top; public Int32 Bottom; } private static int SetWorkspace(RECT oRECT) { IntPtr ptr = IntPtr.Zero; ptr = Marshal.AllocHGlobal(Marshal.SizeOf(oRECT)); Marshal.StructuretoPtr(oRECT,ptr,true); return SystemParametersInfo(SPI_SETWORKAREA,Marshal.SizeOf(oRECT),SPIF_change); }

如何从驱动器的全名获取驱动器号

是否有可能获得当前活动应用程序的名称

在ListView列中添加图像

如何将“user.config文件从源PC移动到目标PC保存其设置?

是否有一个标准的DateTimestring表示forms作为Windows文件名有效,并且可以使用DateTime.Parse进行分析?

是什么让我的计时器跑不准?

如何创build设置应用程序

如何通过索引访问数据中继器的项目而不是显式名称

在Windows 8中,屏幕保护程序如何继续绘制桌面?

当我从.NET产生一个新的线程时究竟发生了什么?

下面的代码应该工作得很好:

// 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文档说,它被限制为设置包含指定矩形的监视器的工作区域:

在具有多个显示监视器的系统中,该功能设置包含指定矩形的监视器的工作区域。

相关文章

### 创建一个gRPC服务项目(grpc服务端)和一个 webapi项目(...
一、SiganlR 使用的协议类型 1.websocket即时通讯协议 2.Ser...
.Net 6 WebApi 项目 在Linux系统上 打包成Docker镜像,发布为...
一、 PD简介PowerDesigner 是一个集所有现代建模技术于一身的...
一、存储过程 存储过程就像数据库中运行的方法(函数) 优点:...
一、Ueditor的下载 1、百度编辑器下载地址:http://ueditor....