Comment capturer un événement de fenêtre contextuelle Windows dans le gestionnaire de tâches ou par un autre moyen?

1

L'événement de boîte contextuelle est une notification d'erreur Windows avec une zone de clic 'OK'. Je veux auto-cliquer sur le bouton 'OK' ou supprimer l'apparence de la fenêtre contextuelle. Mais comment capturer cet événement? Je ne vois rien apparaître dans l'observateur d'événements et je ne peux pas suivre la source de l'erreur (sauf qu'elle provient de excel.exe, qui exécute un processus de longue durée, qui s'arrête parfois de manière inattendue lorsque la boîte contextuelle apparaît. ).

Les autres informations dans la boîte contextuelle incluent les éléments suivants: Erreur d'exécution Microsoft Visual C ++ (R6025). En cliquant sur 'OK', le processus se bloque, ce qui est correct, car à ce stade, je peux capturer l'événement du crash via l'afficheur d'événements Windows, puis exécuter une tâche planifiée à l'arrière de celui-ci (pour redémarrer).

La question suivante est liée mais différente en ce que je cherche simplement à capturer et à traiter cet événement, plutôt que de trouver et de réparer la cause. (lien ici).

FYI: fonctionnement de Windows Server 2012

Yugmorf
la source
Quel est le but de ceci? Vous écrivez une application? Si vous expliquez pourquoi cela peut nous aider à mieux comprendre la question :)
Dave
@ Dave. J'ai un processus long (essentiellement, calcule des données et écrit les résultats dans un fichier texte). La boîte contextuelle arrête le processus en cours et je dois me connecter manuellement pour le rectifier (appuyez sur "OK" dans la boîte contextuelle ou redémarrez l'application). Une solution viable me permettrait d’exécuter un script lorsque la boîte de dialogue contextuelle apparaît (c’est-à-dire, par exemple, le redémarrage automatique de l’application), au lieu de suspendre l’application jusqu’à ce que je intervienne manuellement.
Yugmorf
Dans quelle langue faites-vous cela?
Dave
Si possible, alors script .net ou vb. Est-ce que cela dépend de la langue?
Yugmorf

Réponses:

0

Je pense que vous devez utiliser AutoHotKey

Il a une minuterie, ce qui signifie que vous pouvez déclencher un événement toutes les N secondes pour le vérifier, ou le détecter de manière native (je pense)

#Persistent
SetTimer, MsgBoxCheck, 1000

MsgBoxCheck:
If WinExist("msgboxTitle", "msgboxTextString", "ahk_class #32770")
{
   WinClose
   ExitApp
}

OU

; "Waits until the specified window exists."
; secondsToWait can be omitted. (msgboxTitle/TextString are literal strings.)
WinWait, msgboxTitle ahk_class #32770, msgboxTextString, secondsToWait
if ! ErrorLevel ; didn't time out
    WinClose
ExitApp

Source pour les deux extraits de code

En outre, un post sur StackOverflow a une question similaire

Dave
la source
1
Je vais essayer ça. Je vous remercie. J'apprécie votre temps de réponse, mais malheureusement, il semble que je ne puisse pas voter plus fort, car ma réputation est encore trop basse. Merci tout de même.
Yugmorf