当前位置:  开发笔记 > 后端 > 正文

从.NET应用程序中抓取并移动应用程序窗口?

如何解决《从.NET应用程序中抓取并移动应用程序窗口?》经验,为你挑选了1个好方法。

.NET应用程序是否可以获取当前打开的所有窗口句柄,并移动/调整这些窗口的大小?

我很确定它可能使用P/Invoke,但我想知道是否有一些托管代码包装器用于此功能.



1> ine..:

是的,可以使用Windows API.

这篇文章提供了有关如何从活动进程获取所有窗口句柄的信息:http://www.c-sharpcorner.com/Forums/ShowMessages.aspx?ThreadID=35545

using System;
using System.Diagnostics;

class Program
{
    static void Main()
    {
       Process[] procs = Process.GetProcesses();
       IntPtr hWnd;
       foreach(Process proc in procs)
       {
          if ((hWnd = proc.MainWindowHandle) != IntPtr.Zero)
          {
             Console.WriteLine("{0} : {1}", proc.ProcessName, hWnd);
          }
       }         
    }
 }

然后,您可以使用Windows API移动窗口:http://www.devasp.net/net/articles/display/689.html

[DllImport("User32.dll", ExactSpelling = true, CharSet = System.Runtime.InteropServices.CharSet.Auto)]
        private static extern bool MoveWindow(IntPtr hWnd, int x, int y, int cx, int cy, bool repaint);

...

MoveWindow((IntPtr)handle, (trackBar1.Value*80), 20 , (trackBar1.Value*80)-800, 120, true);

以下是MoveWindow函数的参数:

为了移动窗口,我们使用MoveWindow函数,该函数根据屏幕坐标获取窗口句柄,顶角的坐标以及窗口的所需宽度和高度.MoveWindow函数定义为:

MoveWindow(HWND hWnd,int nX,int nY,int nWidth,int nHeight,BOOL bRepaint);

bRepaint标志确定客户端区域是否应该无效,从而导致发送WM_PAINT消息,从而允许重新绘制客户端区域.另外,可以使用类似于GetClientRect(GetDesktopWindow()和rcDesktop)的调用来获得屏幕坐标,其中rcDesktop是RECT类型的变量,通过引用传递.

(http://windows-programming.suite101.com/article.cfm/client_area_size_with_movewindow)

推荐阅读
贾志军
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有