2016-08-06 5 views
-2

C#で外部ウィンドウ(Firefoxやエクスプローラなど)の内部サイズと位置を取得したいと考えています。私はしようとしたが、私は最初に何もできません(ウィンドウ全体または自分のフォームサイズのみ)。C#で外部ウィンドウの内部サイズと位置を取得する

+0

目的は何ですか?なぜC#?私はあなたがクライアント側の計算について話していると思います..詳細情報を提供します。 –

+0

すべてのコントロールには、Top、Left、Width、およびHeightプロパティがあります。最初にコントロールのハンドルを取得する必要があります。ハンドルにはウィンドウがあり、ウィンドウはコントロールです。 – jdweng

答えて

1

このようなことを任意のウィンドウで行うには、Win32 APIにアクセスする必要があります。

位置については、ウィンドウの長方形が必要です。これを行うには、ウィンドウハンドル(HWND)が必要です。 Here's an answer describing how to do that.ここではその答えからコードです:彼は、前面のウィンドウでそれをやっている

[DllImport("user32.dll")] 
    [return: MarshalAs(UnmanagedType.Bool)] 
    static extern bool GetWindowRect(HandleRef hWnd, out RECT lpRect); 

    [StructLayout(LayoutKind.Sequential)] 
    public struct RECT 
    { 
     public int Left;  // x position of upper-left corner 
     public int Top;   // y position of upper-left corner 
     public int Right;  // x position of lower-right corner 
     public int Bottom;  // y position of lower-right corner 
    } 

    Rectangle myRect = new Rectangle(); 

    private void button1_Click(object sender, System.EventArgs e) 
    { 
     RECT rct; 

     if(!GetWindowRect(new HandleRef(this, this.Handle), out rct)) 
     { 
      MessageBox.Show("ERROR"); 
      return; 
     } 
     MessageBox.Show(rct.ToString()); 

     myRect.X = rct.Left; 
     myRect.Y = rct.Top; 
     myRect.Width = rct.Right - rct.Left + 1; 
     myRect.Height = rct.Bottom - rct.Top + 1; 
    } 

は、(上記のリンクでそのStackOverflowのページの上部にある質問を参照)。私はあなたが何を望んでいるのか、それをどうやって入手しようとしているのか分かりません。あなたはそれについて何の情報も提供していませんでした。

ウィンドウハンドルを取得したら、GetClientRect() Win32関数を呼び出して、ウィンドウの内部 "クライアント領域"のサイズを取得できます。つまり、タイトルバーと枠線以外のすべてを意味します。 GetWindowRect()がC#で動作していれば、そのためのPInvoke宣言は推測するのが簡単ですが、here it is anywayです。

関連する問題