Как определить, видно ли окно из другого приложения? - PullRequest
1 голос
/ 04 января 2011

Недавно я получил лицензию на WinX DVD Ripper Platinum, и меня раздражает тот факт, что когда он завершает копирование DVD, он не говорит мне об этом.Там нет всплывающих окон, нет системы "Beep" - ничего.Диалог прогресса просто закрывается.Главное окно даже не фокусируется ...

Чтобы ускорить процесс копирования DVD, я создаю простое консольное приложение (с использованием C # и VS2010), которое:

  1. Находит дескриптор процесса с именем «WinX_DVD_Ripper_Platinum» (имя процесса программного обеспечения WinX DVD Ripper Platinum)
  2. Находит дескриптор диалога прогресса этого процесса, используя метод GetChildWindows, определенный в этот пример на pinvoke.net
  3. Запускает экземпляр System.Timers.Timer, который проверяет (или должен проверять), закрывался ли диалог прогресса каждые 5 секунд (используя функцию GetWindowLong и
  4. Воспроизводит несколько звуковых сигналов с помощью метода System.Console.Beep, чтобы сообщить пользователю о завершении копирования. Таймер автоматически сбрасывается, выполняя проверку (или повторяя звуковой сигнал, если диалоговое окно закрыто) каждые 5 секунд, пока пользователь не нажмет клавишу в окне консоли.

Шаги 1, 2 и 4 работают нормально, но у меня возникают проблемы с шагом 3 - вот мой вопрос, которые о* константы стиля окна я должен использовать, чтобы проверить, видимо ли окно?(WS_VISIBLE НЕ работал ...)

Для более подробной информации, это функция, которую я использую для проверки видимости диалога:

private static bool IsWindowVisible(IntPtr hwnd)
{
    var style = GetWindowLong(hwnd, GWL.GWL_EXSTYLE);
    var visible = style & (WS flag goes here);
    return visible != 0;
}

1 Ответ

4 голосов
/ 04 января 2011

Вы пытались использовать IsWindowVisible () вместо?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...