.NET應用程序可能抓住當前打開的所有窗口句柄,並移動/調整這些窗口的大小?從.NET應用程序中抓取並移動應用程序窗口?
我很確定它可能使用P/Invoke,但我想知道是否有一些託管代碼包裝這個功能。
.NET應用程序可能抓住當前打開的所有窗口句柄,並移動/調整這些窗口的大小?從.NET應用程序中抓取並移動應用程序窗口?
我很確定它可能使用P/Invoke,但我想知道是否有一些託管代碼包裝這個功能。
是的,它可以使用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消息,允許 重新繪製客戶區。作爲一個 一邊,可以使用帶rcDesktop是類型RECT的 可變,通過 引用傳遞類似於 GetClientRect(GetDesktopWindow(), & rcDesktop)的呼叫中獲得的屏幕座標 。
(http://windows-programming.suite101.com/article.cfm/client_area_size_with_movewindow)
+1不錯的答案。 – 2011-04-03 03:48:05
使用的Mechanical Turk - 只是彈出一個消息框,要求用戶爲你做。一定要提供詳細的說明。 :P對不起,只是在這裏逗我自己... – 2008-09-26 18:10:57