2008-09-26 3 views
7

. NET 응용 프로그램이 현재 열려있는 모든 창 핸들을 잡고이 창을 이동/크기 조정할 수 있습니까?.NET 응용 프로그램에서 응용 프로그램 창을 잡고 이동 하시겠습니까?

필자는 P/Invoke를 사용하여 가능하다고 확신하지만,이 기능에 대한 관리되는 코드 래퍼가 있는지 궁금합니다.

+0

는 기계 터크를 사용 - 단지 메시지 박스가 팝업 당신을 위해 그것을 할 사용자를 부탁드립니다. 자세한 지침을 제공하십시오. : P 죄송합니다, 여기에 자신을 즐겁게 ... –

답변

14

예, 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); 
      } 
     }   
    } 
} 

을 그리고 당신은 윈도우 API를 사용하여 창을 이동할 수 있습니다 여기에

[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); 

http://www.devasp.net/net/articles/display/689.html

이됩니다 MoveWindow 함수의 매개 변수 :

윈도우, 우리는 위 코너 윈도우 핸들의 좌표 소요 MoveWindow 기능뿐만 아니라 화면 좌표에 기초 창 소정의 폭과 높이를 사용한다. MoveWindow 함수는 다음과 같이 정의된다

MoveWindow (HWND HWND, INT nX로, INT NY, INT nWidth, nHeight INT, BOOL bRepaint);

bRepaint 플래그 는 그려야하는 클라이언트 영역 있도록 클라이언트 영역 가 WM_PAINT 메시지가 전송되게 무효화해야하는지 여부를 판정한다. 여담 같이, 화면 좌표는 rcDesktop가 참조로 전달 형 RECT의 변수 인과 GetClientRect (GetDesktopWindow() & rcDesktop)과 같은 호출을 사용 를 얻을 수있다.

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

+0

+1 좋은 대답. –

관련 문제