2010-11-29 66 views
0

J'ai un programme qui, en cas d'erreur, arrêtera de fonctionner. Quand il s'arrête, le bouton "start" est activé et le bouton "stop" est désactivé. Pendant que le programme est en cours d'exécution (après avoir cliqué sur "Démarrer"), le bouton "Démarrer" est désactivé.Programme Windows Forms C#: Comment vérifier l'état du bouton (activé/désactivé ou visible/caché)?

Mon but est d'écrire un programme qui, sur intervalle (2 minutes), vérifie l'état du bouton "start" et envoie un email SMTP lorsque le bouton "start" est activé. Me faisant savoir quand le programme a cessé de fonctionner.

J'ai été capable d'utiliser FindWindow pour trouver le programme, mais je n'ai pas réussi à localiser le bouton, et encore moins que mon programme différencie activé et désactivé.

En utilisant Spy ++, la poignée du bouton est 000A0B0A. Le style du bouton lorsqu'il est activé est 54000000; désactivé, il est 5C000000. Le programme, ou formulaire/fenêtre, Handle est 00050B2C.

Ma question est: Quelle commande, le cas échéant, puis-je utiliser pour vérifier le style de ce bouton particulier (Poignée 00A0B0A)?

+0

Le code du programme où ces boutons sont présents est-il sous votre contrôle? –

+0

Si vous avez la possibilité de modifier le programme, écoutez les conseils de SpeksETC. – VVS

+0

Non, le programme n'est pas le mien et l'auteur ne veut pas le modifier. En outre, la possibilité d'envoyer un email n'est pas là. – SeaSharp

Répondre

4

Il semble que ce dont vous avez généralement besoin est d'ajouter de l'observabilité à votre programme afin que vous puissiez surveiller son état (en cours d'exécution, arrêté, erreur, etc.).

Je suggérerais une approche différente (et peut-être plus simple) qui ne repose pas sur l'interface utilisateur qui pourrait changer dans le futur et qui pourrait être plus extensible dans le cas où vous voudriez observer différentes informations sur votre application dans l'avenir. Pourquoi ne déclenchez-vous pas à la place des événements d'état de votre programme en cas d'erreur? Il y a plusieurs façons de faire cela à partir du produit (wcf, remoting, écriture dans l'observateur d'événements, etc.) et demandez à votre application externe de s'enregistrer pour ces événements et d'agir en conséquence (par exemple envoyer un email)? Cela peut être un peu plus de travail au début (même si je ne suis pas sûr car vous avez déjà des problèmes avec votre approche, et écrire un simple service wcf qui déclenche des événements ne prend pas beaucoup de temps), mais Je pense que ça en vaut la peine dans le futur.

+0

Je suis entièrement d'accord avec votre réponse. Cependant, ce n'est pas mon programme. L'auteur du programme ne veut pas le modifier, d'où la route que j'ai commencé. – SeaSharp