【问题标题】:Resize windows using Java or C#使用 Java 或 C# 调整窗口大小
【发布时间】:2014-01-07 10:57:11
【问题描述】:
我想创建一个可以调整 Windows 窗体大小的应用程序。
我可以遍历窗口并获得某些属性,例如:
How to iterate through window elements using JNA?
我找到了类似的,但我可以调整这些窗口的大小和位置,而不仅仅是获取它们的属性,如标题和矩形?我想将所有可见窗口排序为一个图块,但我不知道如何操纵它们的位置。
例如,我想抓取 Total Commander 和 Notepadd++(两个可见窗口)并调整其大小,使其位于屏幕的左右半边。
有可能吗?如果有人能告诉我一个sn-p,我将不胜感激。
【问题讨论】:
标签:
c#
java
windows
forms
resize
【解决方案2】:
C#:你可以获得所有可以使用这段代码的窗口:
internal static class WindowsEnumeratorNativeMethods {
[return: MarshalAs(UnmanagedType.Bool)]
internal delegate Boolean EnumerationCallback(IntPtr handle, IntPtr parameter);
[DllImport("User32.dll",
CallingConvention = CallingConvention.Winapi,
ExactSpelling = true,
EntryPoint = "EnumWindows",
CharSet = CharSet.Unicode,
SetLastError = true)]
[return: MarshalAs(UnmanagedType.Bool)]
internal static extern Boolean EnumWindows(EnumerationCallback lpEnumFunc,
IntPtr lParam);
}
...
List<IntPtr> handles = new List<IntPtr>();
WindowsEnumeratorNativeMethods.EnumWindows(
(h, p) => {
handles.Add(h);
return true;},
IntPtr.Zero);
接下来您应该找出所需的窗口(Notepad++ 等)。你能行的
通过查找窗口的标题(参见 GetWindowText API 函数);移动/调整大小
窗口使用SetWindowPos API 函数。
在实现 API 包装器时,您可能会发现这很有用:
http://www.pinvoke.net/