Foro de elhacker.net

Programación => Programación C/C++ => Mensaje iniciado por: Air_Dragon en 27 Octubre 2010, 09:16 am



Título: Findwindow() en Windows Seven
Publicado por: Air_Dragon en 27 Octubre 2010, 09:16 am
Tengo una aplicacion que me genera crash, paso a paso vi que el error estaba en

Código:
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?


Título: Re: Findwindow() en Windows Seven
Publicado por: Eternal Idol en 27 Octubre 2010, 10:31 am
¿Estas seguro de que se produce la excepcion al llamar a FindWindow?

Fijate si esto te funciona:
Código
  1. #include <windows.h>
  2.  
  3. int CALLBACK WinMain(
  4.  __in  HINSTANCE hInstance,
  5.  __in  HINSTANCE hPrevInstance,
  6.  __in  LPSTR lpCmdLine,
  7.  __in  int nCmdShow
  8. )
  9. {
  10.  HWND hWnd = FindWindow(NULL,"Calculadora");
  11.  MessageBox(0, "SI", "SI", 0);
  12. }


Título: Re: Findwindow() en Windows Seven
Publicado por: Air_Dragon en 27 Octubre 2010, 22:46 pm
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

Código:
HWND hWnd = FindWindow(NULL,"Calculadora");
if(hWnd )
{
 printf("Calculadora detectada");
}

Código:
#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");
}


Título: Re: Findwindow() en Windows Seven
Publicado por: 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);


Título: Re: Findwindow() en Windows Seven
Publicado por: Lunfardo 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)



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


Título: Re: Findwindow() en Windows Seven
Publicado por: Air_Dragon en 28 Octubre 2010, 01:20 am
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

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


Título: Re: Findwindow() en Windows Seven
Publicado por: Lunfardo en 28 Octubre 2010, 04:07 am
 en ninguna ventana te funciona o solo en la de la calculadora ?


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