-1

Windowsエクスプローラーウィンドウがフォアグラウンドにあるときにトリガーされるアプリケーションを開発しています。私のアプリケーションは、開いている Windows エクスプローラーの近くの画面に配置されるウィンドウ (フォーム) をトリガーします (検索オプションのすぐ下に保持する予定です)。

しかし、フォアグラウンドの「Windows Explorer」ウィンドウのウィンドウ位置を取得するために何も取得していません。

.net を使用して、現在の最前面の「Windows Explorer」ウィンドウの位置を読み取る方法はありますか?

4

1 に答える 1

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

プロパティ/ビルドで「安全でないコードを許可する」を設定します...

于 2016-08-16T20:26:16.403 に答える