// ウィンドウを列挙するためのコールバックメソッド
            public static int EnumerateWindows(IntPtr hWnd, int lParam)
            {
                const int     BUFFER_SIZE = 0x1000;
                StringBuilder sb          = new StringBuilder(BUFFER_SIZE);

                System.Threading.Thread.Sleep(1);

                // ウィンドウが可視の場合
                if (IsWindowVisible(hWnd) != 0)
                {
                    // ウィンドウのキャプションを取得
                    if (GetWindowText(hWnd, sb, BUFFER_SIZE) != 0)
                    {
                        // トップレベルウィンドウか
                        if (GetWindow(hWnd, GW_OWNER) == IntPtr.Zero)
                        {
                            // シェルでないか
                            if (sb.ToString().Contains("Progman") == false && sb.ToString().Contains("Program Manager") == false)
                            {
                                WindowInfoStruct wInfo = new WindowInfoStruct();
                                wInfo.windowTitle = sb.ToString();
                                wInfo.wHnd        = hWnd;
                                windowList.Add(wInfo);
                            }
                        }
                    }
                }
                // 列挙を継続するには0以外を返す必要がある
                return(1);
            }
            // 最前面ウィンドウを取得するためのコールバックメソッド
            public static int EnumerateWindowsIsTop(IntPtr hWnd, int lParam)
            {
                const int     BUFFER_SIZE = 0x1000;
                StringBuilder sb          = new StringBuilder(BUFFER_SIZE);

                if (windowList.Count > 0)
                {
                    return(0);
                }

                System.Threading.Thread.Sleep(1);

                // ウィンドウが可視の場合
                if (IsWindowVisible(hWnd) != 0)
                {
                    // ウィンドウのキャプションを取得
                    if (GetWindowText(hWnd, sb, BUFFER_SIZE) != 0)
                    {
                        // トップレベルウィンドウか
                        if (GetWindow(hWnd, GW_OWNER) == IntPtr.Zero)
                        {
                            // シェルでないか
                            if (sb.ToString().Contains("Progman") == false && sb.ToString().Contains("Program Manager") == false)
                            {
                                WindowInfoStruct wInfo = new WindowInfoStruct();
                                wInfo.windowTitle = sb.ToString();
                                wInfo.wHnd        = hWnd;
                                // 前回と今回で変更されたかどうか
                                if (wInfo.windowTitle.Equals(wInfoBackup.windowTitle) == false)
                                {
                                    wInfo.isChanged         = true;
                                    wInfoBackup.windowTitle = wInfo.windowTitle;
                                }
                                else
                                {
                                    wInfo.isChanged = false;
                                }
                                windowList.Add(wInfo);
                            }
                        }
                    }
                }
                // 列挙を継続するには0以外を返す必要がある
                return(1);
            }
            public static int GetForgroundWindowInfo()
            {
                const int     BUFFER_SIZE = 0x1000;
                StringBuilder sb          = new StringBuilder(BUFFER_SIZE);

                IntPtr hWnd = GetForegroundWindow();      // 最前面ウィンドウの hwnd を取得

                // ウィンドウが可視の場合
                if (IsWindowVisible(hWnd) != 0)
                {
                    // ウィンドウのキャプションを取得
                    if (GetWindowText(hWnd, sb, BUFFER_SIZE) != 0)
                    {
                        // トップレベルウィンドウか
                        if (GetWindow(hWnd, GW_OWNER) == IntPtr.Zero)
                        {
                            // シェルでないか
                            if (sb.ToString().Contains("Progman") == false && sb.ToString().Contains("Program Manager") == false)
                            {
                                WindowInfoStruct wInfo = new WindowInfoStruct();
                                wInfo.windowTitle = sb.ToString();
                                wInfo.wHnd        = hWnd;
                                // 前回と今回で変更されたかどうか
                                if (wInfo.windowTitle.Equals(wInfoBackup.windowTitle) == false)
                                {
                                    wInfo.isChanged         = true;
                                    wInfoBackup.windowTitle = wInfo.windowTitle;
                                }
                                else
                                {
                                    wInfo.isChanged = false;
                                }
                                windowList.Add(wInfo);
                            }
                        }
                    }
                }
                return(1);
            }