Обнаружение, когда Процесс (GUI) "Готово", даже если он не Выход? - PullRequest
0 голосов
/ 29 октября 2011

Я пишу консольное приложение, которое обнаруживает USB-накопители, форматирует их, а затем запускает программу под названием UnetBootin для записи ISO-образа на накопители.Все работает нормально, но проблема в том, что UNetbootin не просто «выходит», поэтому .WaitForExit() не работает, если пользователь не нажимает кнопку «Выход».

Единственный способ решить эту проблему -либо проверяя, появляется ли эта кнопка, либо пытаясь угадать, если процесс как-то простаивает.В любом случае, я бы не знал, с чего начать.

enter image description here

1 Ответ

0 голосов
/ 29 октября 2011

Это будет некрасиво, независимо от того, как вы это нарежете. Я не знаю лучшего подхода, поэтому вот тот, который будет работать AFAIK:

  1. Получите PID вашего целевого процесса (у вас уже есть это, если вы можете позвонить WaitForExit)
  2. Получить дескрипторы для всех окон этого процесса
  3. Используйте GetWindowText - , чтобы получить текст каждого окна с шага 2
  4. Если в каком-либо окне есть текст, равный «Перезагрузить сейчас», вы знаете, что все готово

ПРЕДУПРЕЖДЕНИЕ: На данный момент я должен упомянуть, что GetWindowText следует считать чрезвычайно опасным, поскольку он может причинить вред вашей нити, в том числе повесить ее, не по своей вине. На практике этого не произойдет, но это то, что вы должны знать.

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