recientemente tuve que solucionar algunos código antiguo que se basó en un archivo DLL que a veces apareció un mensaje afirmativo. Intenté todas las sugerencias anteriores, y la única que obtuve fue hacer clic en el botón Ignorar. he sugerido ejecutar EnumWindows en un hilo separado; utilicé FindWindow en su lugar.
Esta es la función que encuentra el mensaje emergente Assert, encuentra el botón Ignorar allí y luego hace clic en él. Se va en un bucle que comprueba una variable global cada vez (fea pero rápido):
void CloseAssertBox (void *param) {
HWND window, button;
Sleep (200); //wait 200 milliseconds
while (!finishThread) { //see if we can stop checking
if ((window = FindWindow (NULL, L"Microsoft Visual C++ Runtime Library"))
&& (button = FindWindowEx (window, NULL, L"Button", L"&Ignore")))
SendMessage (button, BM_CLICK, 0, 0); //click the button
Sleep (50); //then check every 50 milliseconds
}
}
El título del cuadro de Assert podría ser diferente. Si se hace referencia a su botón Ignorar de manera diferente, puede usar EnumChildWindows para obtener el nombre de cada control secundario, incluidos los botones.
Antes del bit de código que aparece la afirmación, inicio un nuevo hilo que llama a la función anterior.
finishThread = 0; //this is set to 1 when the thread should finish
_beginthread (CloseAssertBox, 0, NULL); //begin the thread
Después de lo que es a través del código aserción propensas peligroso, puse:
finishThread = 1; //done threaded stuff
De esta manera el hilo se cerrará la próxima vez alrededor de su bucle. Probablemente haya mejores formas de hacerlo.
he tenido que incluir estas bibliotecas para hacer que funcione:
#include <process.h> //for multithreading
#include <WinBase.h> //for Sleep function
int finishThread; //to tell the thread when encoding has finished
Todo esto fue hecho en Visual Studio 2010 utilizando una biblioteca de 2006.
¿Está provocando una afirmación o lanzar una excepción? – Ferruccio
es una afirmación. La excepción no es un problema –