【问题标题】: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


    【解决方案1】:

    最简单的方法是enumerate系统中的所有窗口实例并调用正确的WinAPI函数,如here所述

    【讨论】:

      【解决方案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/

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2015-04-16
        • 2020-01-16
        • 2021-09-20
        • 2013-03-27
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多