2016-08-16 4 views
-1

私は、フォアグラウンドにウィンドウエクスプローラウィンドウがあるときに起動するアプリケーションを開発しています。私のアプリケーションは、開いたウィンドウエクスプローラの近くの画面に配置されるウィンドウ(フォーム)を起動します(検索オプションのすぐ下に配置するように計画しています)。.netを使用してWindowsエクスプローラの位置を取得するには?

しかし、私は前景 "ウィンドウエクスプローラ"ウィンドウのウィンドウ位置を取得するために何も得ていません。

現在のフォアグラウンド「Windowsエクスプローラ」ウィンドウの位置を.netで読み取る方法はありますか?

+0

は、あなたが、その後のPInvokeを同様の記事を検索し、必要がありますので、あなたが実行中のプロセスとそのウィンドウを照会するためのネイティブのWin32 APIにあります。 –

+0

@LexLi私は検索しましたが、Windowsエクスプローラのウィンドウ位置を取得する方法がありませんでした。 –

答えて

2

アンマネージコードを使用してこれを行うことができます。あなたのハンドルをピックアップしてエクスプローラのプロセスを識別し、その後

class RectMethods 
    { 
     // http://msdn.microsoft.com/en-us/library/ms633519(VS.85).aspx 
     [DllImport("user32.dll", SetLastError = true)] 
     [return: MarshalAs(UnmanagedType.Bool)] 
     public static extern bool GetWindowRect(IntPtr hWnd, ref RECT lpRect); 

     // http://msdn.microsoft.com/en-us/library/a5ch4fda(VS.80).aspx 
     [StructLayout(LayoutKind.Sequential)] 
     public struct RECT 
     { 
      public int Left; 
      public int Top; 
      public int Right; 
      public int Bottom; 
     } 
    } 

、および座標と、ウィンドウのサイズを取り、そこから、あなたがやりたいことができます:

クラスを作成します

  var processes = System.Diagnostics.Process.GetProcesses(); 
      foreach (var process in processes) 
      { 
       if (process.ProcessName == "explorer") 
       { 
        var hWnd = process.Handle; 
        RectMethods.RECT rect = new RectMethods.RECT(); 
        if (RectMethods.GetWindowRect(hWnd, ref rect)) 
        { 
         Size size = new Size(rect.Right - rect.Left, 
           rect.Bottom - rect.Top); 
        } 
       } 
      } 

プロパティの設定/ビルドの「危険なコードを許可する」...

関連する問題