Funciones callback?

Iniciado por roilivethelife, 20 Agosto 2012, 13:17 PM

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

roilivethelife

Hola!
Estoy adentrandome poco a poco en la winAPI, y quiero utilizar una funcion para listar las ventanas abiertas.

La funcion es esta:

BOOL WINAPI EnumWindows(
  _In_  WNDENUMPROC lpEnumFunc,
  _In_  LPARAM lParam
);

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!

rir3760

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):
#include <stdio.h>
#include <stdlib.h>
#include <string.h>

#include <windows.h>

#define NUM_CHARS 256

BOOL CALLBACK fn(HWND hwnd, LPARAM lParam);

int main(void)
{
   puts("Antes de la llamada a EnumWindows\n");
   if (!EnumWindows(fn, 0))
      return EXIT_FAILURE;
   puts("\nDespues de la llamada a EnumWindows");
   
   return EXIT_SUCCESS;
}

BOOL CALLBACK fn(HWND hwnd, LPARAM lParam)
{
   char nombre[NUM_CHARS + 1];
   static int i = 0;
   
   if (GetWindowText(hwnd, nombre, NUM_CHARS) > 0)
      printf("%02d -- %s\n", ++i, nombre);
   
   return TRUE;
}


Un saludo
C retains the basic philosophy that programmers know what they are doing; it only requires that they state their intentions explicitly.
--
Kernighan & Ritchie, The C programming language