CascadeWindows 但调用者除外 window
CascadeWindows but except for the caller window
我可以用这个方法级联所有windows吗
[DllImport("user32.dll")]
public static extern ushort CascadeWindows(
HWND hwndParent,
uint wHow,
ref RECT lpRect,
uint cKids,
ref HWND lpKids
);
但除了调用该方法的当前 window(或我有 HWND 的 Window)?
CascadeWindows(NULL, MDITILE_ZORDER, NULL, 0, NULL); // "Cascade windows"
编辑:
我试过了,但它只移动了主要的 window 而不是所有其他的:
Rectangle rect = new Rectangle(0, 0, 1740, 1010);
var arrayRange = Process.GetProcesses()
.Where(x =>
!string.IsNullOrEmpty(x.MainWindowTitle) &&
!x.MainWindowTitle.Contains("Main Window")
)
.Select(x => x.Handle).ToArray();
user32.CascadeWindows(nullptr, 0, ref rect, 0, ref arrayRange); // "Cascade windows"
并且还更正了函数声明
[DllImport("user32.dll")] public static extern ushort CascadeWindows( IntPtr hwndParent, uint wHow, ref Rectangle lpRect, uint cKids, IntPtr[] lpKids);
使用 C# 可以这样完成:
var arrayRange = Process.GetProcesses()
.Where(x =>
!string.IsNullOrEmpty(x.MainWindowTitle) &&
!x.MainWindowTitle.Contains("MainWindow")
);
//.Select(x => x.Handle).ToArray();
int X = 25; int Y = 25;
foreach (var proc in arrayRange)
{
//DLL Import user32.dll
user32.MoveWindow(proc.MainWindowHandle, X, Y, 335, 335, 1);
X += 18; Y += 18;
}
我相信 C/C++ 中有一个选项可以对 user32.DLL 中的进程句柄和 MoveWindow 执行相同的操作。
我可以用这个方法级联所有windows吗
[DllImport("user32.dll")]
public static extern ushort CascadeWindows(
HWND hwndParent,
uint wHow,
ref RECT lpRect,
uint cKids,
ref HWND lpKids
);
但除了调用该方法的当前 window(或我有 HWND 的 Window)?
CascadeWindows(NULL, MDITILE_ZORDER, NULL, 0, NULL); // "Cascade windows"
编辑: 我试过了,但它只移动了主要的 window 而不是所有其他的:
Rectangle rect = new Rectangle(0, 0, 1740, 1010);
var arrayRange = Process.GetProcesses()
.Where(x =>
!string.IsNullOrEmpty(x.MainWindowTitle) &&
!x.MainWindowTitle.Contains("Main Window")
)
.Select(x => x.Handle).ToArray();
user32.CascadeWindows(nullptr, 0, ref rect, 0, ref arrayRange); // "Cascade windows"
并且还更正了函数声明
[DllImport("user32.dll")] public static extern ushort CascadeWindows( IntPtr hwndParent, uint wHow, ref Rectangle lpRect, uint cKids, IntPtr[] lpKids);
使用 C# 可以这样完成:
var arrayRange = Process.GetProcesses()
.Where(x =>
!string.IsNullOrEmpty(x.MainWindowTitle) &&
!x.MainWindowTitle.Contains("MainWindow")
);
//.Select(x => x.Handle).ToArray();
int X = 25; int Y = 25;
foreach (var proc in arrayRange)
{
//DLL Import user32.dll
user32.MoveWindow(proc.MainWindowHandle, X, Y, 335, 335, 1);
X += 18; Y += 18;
}
我相信 C/C++ 中有一个选项可以对 user32.DLL 中的进程句柄和 MoveWindow 执行相同的操作。