Foro de elhacker.net

Programación => Programación C/C++ => Mensaje iniciado por: roilivethelife en 20 Agosto 2012, 13:17 pm



Título: Funciones callback?
Publicado por: roilivethelife en 20 Agosto 2012, 13:17 pm
Hola!
Estoy adentrandome poco a poco en la winAPI, y quiero utilizar una funcion para listar las ventanas abiertas.

La funcion es esta:
Código:
BOOL WINAPI EnumWindows(
  _In_  WNDENUMPROC lpEnumFunc,
  _In_  LPARAM lParam
);
http://msdn.microsoft.com/en-us/library/windows/desktop/ms633497%28v=vs.85%29.aspx (http://msdn.microsoft.com/en-us/library/windows/desktop/ms633497%28v=vs.85%29.aspx)

El tema que no se que es una funcion callback, ni como se usa.
Tampoco he encontrado informacion suficiente para utilizarla yo mismo.

Lo que necesito es comparar el nombre de todas las ventanas con un texto, si existe que devuelva TRUE, y si no FALSE; aunque con que consiga usar la funcion ya me arreglo.

Salu2 y gracias!


Título: Re: Funciones callback?
Publicado por: rir3760 en 20 Agosto 2012, 17:41 pm
Una función "callback" es una que no llamas directamente, en su lugar alguien mas (en tu caso el SO) se encarga de hacerlo. Solo tienes que definir una función en la forma indicada, su tipo se indica en esa misma pagina.

Un ejemplo sencillo (solo lista las ventanas):
Código
  1. #include <stdio.h>
  2. #include <stdlib.h>
  3. #include <string.h>
  4.  
  5. #include <windows.h>
  6.  
  7. #define NUM_CHARS 256
  8.  
  9. BOOL CALLBACK fn(HWND hwnd, LPARAM lParam);
  10.  
  11. int main(void)
  12. {
  13.   puts("Antes de la llamada a EnumWindows\n");
  14.   if (!EnumWindows(fn, 0))
  15.      return EXIT_FAILURE;
  16.   puts("\nDespues de la llamada a EnumWindows");
  17.  
  18.   return EXIT_SUCCESS;
  19. }
  20.  
  21. BOOL CALLBACK fn(HWND hwnd, LPARAM lParam)
  22. {
  23.   char nombre[NUM_CHARS + 1];
  24.   static int i = 0;
  25.  
  26.   if (GetWindowText(hwnd, nombre, NUM_CHARS) > 0)
  27.      printf("%02d -- %s\n", ++i, nombre);
  28.  
  29.   return TRUE;
  30. }

Un saludo