Программа Windows Forms C #: Как проверить статус кнопки (включена / отключена или видима / скрыта)? - PullRequest
0 голосов
/ 29 ноября 2010

У меня есть программа, которая при ошибке прекратит работу. Когда он останавливается, кнопка «Пуск» активируется, а кнопка «Стоп» отключается. Во время работы программы (после нажатия кнопки «Пуск») кнопка «Пуск» отключается.

Моя цель - написать программу, которая с интервалом (2 минуты) проверяет состояние кнопки «Пуск» и отправляет SMTP-сообщение по электронной почте, когда кнопка «Пуск» становится активной. Таким образом, дайте мне знать, когда программа перестала работать.

Мне удалось использовать FindWindow, чтобы найти программу, но я не смог найти кнопку, не говоря уже о том, чтобы дифференцировать мою программу было включено или отключено.

Используя Spy ++, дескриптор кнопки - 000A0B0A. Стиль кнопки, когда она включена, составляет 54000000; отключено это 5C000000. Программа, или форма / окно, дескриптор 00050B2C.

У меня вопрос: какую команду, если она есть, можно использовать для проверки стиля этой конкретной кнопки (дескриптор 00A0B0A)?

1 Ответ

4 голосов
/ 30 ноября 2010

Похоже, что вам, как правило, нужно добавить наблюдаемость в вашу программу, чтобы вы могли отслеживать ее состояние (работает, остановлен, ошибка и т. Д.).

Я бы предложил другое (и, возможно, более простое)подход), который не зависит от пользовательского интерфейса, который может измениться в будущем и который может быть более расширяемым в случае, если вы хотели бы наблюдать другую информацию о вашем приложении в будущем.

Почему бы и нетвы вместо этого запускаете события состояния из вашей программы по ошибке?Есть несколько различных способов сделать это с помощью продукта (wcf, удаленное взаимодействие, запись в программу просмотра событий и т. Д.), И ваше внешнее приложение регистрируется на эти события и действует соответствующим образом (например, отправляет электронное письмо)?

Вначале это может быть немного дополнительной работой (хотя я не уверен, так как вы уже столкнулись с проблемами с вашим подходом, и написание простого wcf-сервиса, который запускает события, не занимает так много времени), но я думаю, что стоитэто в будущем.

...