Найти внешнее окно Заголовок

Я получил этот код:

using System.Runtime.InteropServices;

[DllImportAttribute("User32.dll")]
private static extern int FindWindow(String ClassName, String WindowName);
[DllImport("User32")]
private static extern int ShowWindow(int hWnd, int nCmdShow);
private const int SW_HIDE = 0;


int hWnd = FindWindow(null, Microsoft Excel - Book1);
if (hWnd > 0)
{
    ShowWindow(hWnd, SW_HIDE);
}

Но иногда я открываю Book1 с OpenOffice.org... и у меня возникает вопрос, как я могу использовать SW_HIDE для разных заголовков окон?

Если Microsoft Excel — название книги 1 существует

Если книга Book1 - OpenOffice.org Calc существует

Возможно, можно найти часть заголовка Windows "Book1"

Большое спасибо!


person b00sted 'snail'    schedule 05.06.2014    source источник
comment
Вам нужно перечислить все окна и проверить их заголовки (для начала см. здесь). Чего именно вы пытаетесь достичь, скрывая окна? Может быть, есть лучший подход вообще.   -  person Christian.K    schedule 05.06.2014
comment
FindWindow() довольно грубая, в данном случае совершенно бесполезная. Вы были бы впереди с Process.MainWindowHandle. Какое окно вы фактически собираетесь скрыть, по-прежнему является в значительной степени случайным случаем, когда вы делаете это с приложением, которое может создавать много окон, ни одно из которых не является главным окном. Не делай этого.   -  person Hans Passant    schedule 05.06.2014


Ответы (1)


Используйте приведенный ниже код, чтобы получить список всех открытых окон.

[DllImport("user32.dll")]
        static extern bool EnumWindows(EnumDelegate lpfn, IntPtr lParam);

затем напишите функцию делегата, как показано ниже:

public string[] win_List = new string[50];
int i = 0;
public bool lpfn(IntPtr hWnd, int lParam)
{
    StringBuilder stbrTitle = new StringBuilder(255);
    int titleLength = GetWindowText(hWnd, stbrTitle, stbrTitle.Capacity + 1);
    string strTitle = stbrTitle.ToString();
    if (IsWindowVisible(hWnd) && string.IsNullOrEmpty(strTitle) == false)
    {
        win_List[i++] = strTitle;                      
    }
    return true;
}


public string[] GetWinList()
{
    EnumDelegate del_fun = new EnumDelegate(lpfn);
    EnumWindows(del_fun, IntPtr.Zero);
    return win_List;
}
person Ricky    schedule 05.06.2014