// ウィンドウを列挙するためのコールバックメソッド 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); }