【问题标题】:Programmatically Maximize Window On Half Of Screen以编程方式最大化一半屏幕上的窗口
【发布时间】:2013-08-19 12:20:03
【问题描述】:

我想最大化屏幕左侧的随机窗口。我可以从我的代码中使用 Windows Aero 功能吗?这个窗口可以像用鼠标一样最大化。我只想以编程方式进行。

我用C#,可以得到窗口的IntPtr

如果可能,不要伪造鼠标或键盘输入。

【问题讨论】:

  • 很遗憾,微软没有为航空快照功能提供任何公共 API。
  • 这可以在没有 p/invoke 的情况下完成,只是不容易,
  • 你不能通过根据桌面大小设置窗口位置和大小来模仿这种行为吗?应该很容易,只是不是很“干净”
  • 只需调用 MoveWindow()。
  • @HansPassant 是否已经将它与 Nicolas 的答案相结合。但我仍然对使用 Aero 有点兴趣。

标签: c# windows winapi aero


【解决方案1】:

这可以在没有 p/invoke 的情况下完成。

试试这个:

Rectangle rect = Screen.PrimaryScreen.WorkingArea;
rect.Width = rect.Width / 2;
Bounds = rect;

这会将当前窗口放在主屏幕的左侧。

然后只需添加它以将其放在屏幕右侧。

Location = new Point(rect.Width, 0);

【讨论】:

  • 我没有接受,因为窗口状态没有最大化。我在没有 WinApi 的情况下尝试过(设置 FormWindowState 等),但由于某种原因它没有成功。
【解决方案2】:

不完全一样,但伪装得很好:

ShowWindow(handle, SW_MAXIMIZE);
// for a split second you might see a maximized window here
MoveWindow(handle, 0, 0, Screen.PrimaryScreen.WorkingArea.Width / 2, Screen.PrimaryScreen.WorkingArea.Height, true);

【讨论】:

    【解决方案3】:

    实时放置需要繁重的工作,尤其是对于非子进程。示例 - www.ishadow.com/vdm。对于在 ShowWindow(hWnd, SW_MAXIMIZE) 之后手动“修复”最大化窗口位置 MoveWindow(hWnd, startPos, 0, winWidth, winHeight, true) 通常(在 Windows 10 上尝试任务管理器),如上所述。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2021-10-07
      • 1970-01-01
      • 2010-12-24
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-08-12
      相关资源
      最近更新 更多