Findwindow() en Windows Seven

Iniciado por Air_Dragon, 27 Octubre 2010, 09:16 AM

0 Miembros y 1 Visitante están viendo este tema.

Air_Dragon

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?

Eternal Idol

¿Estas seguro de que se produce la excepcion al llamar a FindWindow?

Fijate si esto te funciona:
Código (cpp) [Seleccionar]
#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);
}
La economía nunca ha sido libre: o la controla el Estado en beneficio del Pueblo o lo hacen los grandes consorcios en perjuicio de éste.
Juan Domingo Perón

Air_Dragon

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");
}

Eternal Idol

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.

PD. Esta linea asi esta mal:
MessageBox(0,hWnd,"Holas",0);
La economía nunca ha sido libre: o la controla el Estado en beneficio del Pueblo o lo hacen los grandes consorcios en perjuicio de éste.
Juan Domingo Perón

Lunfardo

#4
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:




pd:no es la FindWindows para la calculadora en xp que en 7

Air_Dragon

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.

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:


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

Lunfardo

 en ninguna ventana te funciona o solo en la de la calculadora ?


y pregunta boluda, aunque no menos importate, la calculadora esta abierta ? xD