You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何使用C#移动多个应用窗口且保证窗口之间不相互重叠

问题根因

  • 你使用的rnd.Next(0, 1)语法逻辑错误:C#中Random.Next(min, max)的返回值范围为[min, max),即包含最小值、不包含最大值,所以该调用永远返回0,窗口不会产生有效位移,始终保持初始打开的重叠状态。
  • 原有逻辑未给不同记事本窗口分配独立的排列坐标,没有错开位置的规则,自然无法实现平铺不重叠的效果。
  • 原有代码未显式声明Random类实例,运行时会抛出未定义变量的报错。

修复方案

你可以先收集所有运行中的记事本进程,再给每个进程按遍历顺序分配固定的位置偏移,就能实现错开平铺的效果,还可以叠加小范围随机值实现轻微位移效果,参考实现代码如下:

using System;
using System.Diagnostics;
using System.Windows.Forms;

using WindowScrape.Types;

namespace test
{
    public partial class Form1 : Form
    {
        [System.Runtime.InteropServices.DllImport("user32.dll")]
        private static extern bool SetWindowPos(IntPtr hWnd, int hWndInsertAfter, int X, int Y, int cx, int cy, uint uFlags);
        
        // 全局声明Random实例,避免重复创建生成重复随机值
        private Random rnd = new Random();
        // 定义每个窗口的固定偏移量,可根据需求调整数值
        private const int OffsetStep = 30;

        private void Form1_Load(object sender, EventArgs e)
        {
            timer1.Start();
        }

        private void timer1_Tick(object sender, EventArgs e)
        {
            uint SWP_NOSIZE = 0x0001;
            // 先收集所有记事本进程
            var notepadProcesses = Process.GetProcessesByName("notepad");
            
            for (int i = 0; i < notepadProcesses.Length; i++)
            {
                var process = notepadProcesses[i];
                var lol = HwndObject.GetWindowByTitle(process.MainWindowTitle);
                // 按索引计算基础偏移位置,确保每个窗口错开
                int baseX = i * OffsetStep;
                int baseY = i * OffsetStep;
                // 叠加小范围随机值实现轻微抖动效果,不需要可以直接删除
                int finalX = baseX + rnd.Next(0, 5);
                int finalY = baseY + rnd.Next(0, 5);
                
                SetWindowPos(process.MainWindowHandle, 0, finalX, finalY, 0, 0, SWP_NOSIZE);
            }
        }
    }
}

内容的提问来源于stack exchange,提问作者rainbowisrainbow

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.04 02:45:01