Tengo una aplicacion que me genera crash, paso a paso vi que el error estaba en
HWND hWnd = FindWindow(NULL,"Calculadora");
Solo eso me hace crashear en Windows 7, menos en el Home, el programa lo compile en Windows XP, 2003 y hasta mismo Seven y siegue haciendo lo mismo, me qde sin ideas...
A alguien le paso algo parecido?
¿Estas seguro de que se produce la excepcion al llamar a FindWindow?
Fijate si esto te funciona:
#include <windows.h>
int CALLBACK WinMain(
__in HINSTANCE hInstance,
__in HINSTANCE hPrevInstance,
__in LPSTR lpCmdLine,
__in int nCmdShow
)
{
HWND hWnd = FindWindow(NULL,"Calculadora");
MessageBox(0, "SI", "SI", 0);
}
No me funciona, no se si lo hice bien, pero te pego mi script, solo fuerza el listado de ventanas, esten ocultas o no, en XP funciona 10 pts, pero en seven en algunas pcs crashea o solo dice que "no se pudo iniciar la aplicacion la configuracion en paralelo no es correcta..... "
Googlee ese error por supuesto, me pide que baje los Redistributable package, lo probamos instalando 2005 - 2008, los service packs, etc etc, sigue el mismo error..
y me di cuenta que era el FindWindow cuando solo hice
HWND hWnd = FindWindow(NULL,"Calculadora");
if(hWnd )
{
printf("Calculadora detectada");
}
#include <windows.h>
#include <conio.h>
#include <stdio.h>
void EnableDebugPriv()
{
HANDLE hToken;
LUID sedebugnameValue;
TOKEN_PRIVILEGES tkp;
if (!OpenProcessToken( GetCurrentProcess(),
TOKEN_ADJUST_PRIVILEGES | TOKEN_QUERY, &hToken ) )
return;
if ( ! LookupPrivilegeValue( NULL, SE_DEBUG_NAME, &sedebugnameValue ) ){
CloseHandle( hToken );
return;
}
tkp.PrivilegeCount = 1;
tkp.Privileges[0].Luid = sedebugnameValue;
tkp.Privileges[0].Attributes = SE_PRIVILEGE_ENABLED;
if (!AdjustTokenPrivileges( hToken, FALSE, &tkp, sizeof tkp, NULL, NULL ) )
CloseHandle( hToken );
}
struct ProcInfo {
HWND hWnd;
CHAR szTitle[255];
CHAR szClass[255];
};
void ForzarListado()
{
HWND hWnd;
ProcInfo mProc[1024];
int nCount = 0;
int nPID = 0;
int i = 0;
hWnd = FindWindow(NULL,NULL);
MessageBox(0,hWnd,"Holas",0);
while(hWnd>0)
{
if(!GetParent(hWnd))
{
mProc[nCount].hWnd = hWnd;
GetWindowTextA(hWnd, mProc[nCount].szTitle, 255);
GetClassNameA(hWnd, mProc[nCount].szClass, 255);
if(_strnicmp(mProc[nCount].szTitle,"Calculadora",sizeof("Calculadora"))==0)
{
printf("Calculadora encontrada \n");
break;
}
nCount++;
}
hWnd = GetWindow(hWnd, GW_HWNDNEXT);
}
printf("\n");
}
void main()
{
EnableDebugPriv();
Sleep(100);
ForzarListado();
system("pause");
}
Me parece que un problema no tiene nada que ver con el otro, fijate si podes depurar FindWindow para ver donde falla exactamente ... te recomiendo usar el WinDbg (http://www.microsoft.com/whdc/devtools/debugging/default.mspx).
PD. Esta linea asi esta mal:
MessageBox(0,hWnd,"Holas",0);
yo en windows 7 y con c #, encontraba la informacion que necesitas con una tool de vs llamada spy++ , que tiene un herramienta llamada Windows Search , que te da la informacion necesaria para ser un usar la funcion FindWindows().
espero haberte ayudado
aca de dejo un ejemplo ,aunque justo ahora estoy en xp:
(http://img185.imageshack.us/img185/3029/89839464.jpg)
pd:no es la FindWindows para la calculadora en xp que en 7
Cita de: Eternal Idol en 27 Octubre 2010, 23:40 PM
Me parece que un problema no tiene nada que ver con el otro, fijate si podes depurar FindWindow para ver donde falla exactamente ... te recomiendo usar el WinDbg (http://www.microsoft.com/whdc/devtools/debugging/default.mspx).
PD. Esta linea asi esta mal:
MessageBox(0,hWnd,"Holas",0);
Si si ese messagebox lo taba probando, pero no funciona de todos modos, voy a probar cn el dbg
Cita de: SmogMX en 27 Octubre 2010, 23:52 PM
yo en windows 7 y con c #, encontraba la informacion que necesitas con una tool de vs llamada spy++ , que tiene un herramienta llamada Windows Search , que te da la informacion necesaria para ser un usar la funcion FindWindows().
espero haberte ayudado
aca de dejo un ejemplo ,aunque justo ahora estoy en xp:
(http://img185.imageshack.us/img185/3029/89839464.jpg)
Si si, es un test, en Windows Seven es Calculadora lo saque cn winspy.. el tema es que no funciona el findwindow, no quer no lo encuentra
en ninguna ventana te funciona o solo en la de la calculadora ?
y pregunta boluda, aunque no menos importate, la calculadora esta abierta ? xD