Club Delphi  
    Paypal   FTP   CCD     Buscar   Trucos   Trabajo   Foros

Retroceder   Foros Club Delphi > Principal > Varios
Registrarse FAQ Miembros Calendario Guía de estilo Temas de Hoy

Coloboración Paypal con ClubDelphi

 
 
Herramientas Buscar en Tema Desplegado
  #5  
Antiguo 22-09-2017
Avatar de Neftali [Germán.Estévez]
Neftali [Germán.Estévez] Neftali [Germán.Estévez] is online now
[becario]
 
Registrado: jul 2004
Ubicación: Barcelona - España
Posts: 19.439
Poder: 10
Neftali [Germán.Estévez] Es un diamante en brutoNeftali [Germán.Estévez] Es un diamante en brutoNeftali [Germán.Estévez] Es un diamante en bruto
Una alternativa, si no quieres modificar TODOS los formularios de la aplicación para añadirles código, como ha indicado [ecfisa], por ejemplo porque tu aplicación tiene 200 formularios, es realizar un hook sobre el mensaje de creación de ventanas.

En este código de Rodrigo, por ejemplo, se instala el gancho utilizando WH_CBT.

Siguiendo esa misma idea, puedes colocar en el formulario principal el siguiente código:

Código Delphi [-]
// Obtener el nombre de la clase
function GetWindowClassName(Handle: THandle): String;
var
  Buffer: array[0..MAX_PATH] of WideChar;
begin
  GetClassName(Handle, @Buffer, MAX_PATH);
  Result := String(Buffer);
end;

// Función à la que nos devolverá el hook
function CBT_FUNC(nCode: Integer; wParam: WPARAM; lParam: LPARAM): LRESULT; stdcall;
const
  ClassNameBufferSize = 1024;
var
 LHWND : HWND;
 classname:string;
begin
   Result := CallNextHookEx(hhk, nCode, wParam, lParam);
   if nCode<0 then exit;
   if nCode = HCBT_CREATEWND then begin
     LHWND := HWND(wParam);
     if (LHWND>0) then begin
        classname := GetWindowClassName(wParam);
        // Mensaje, Guardarlo en una lista, Base de Datos,...
        OutputDebugString(PChar(FormatDateTime('hh:mm:ss', now) + ' - ' + ClassName));
     end;
   end;
end;

// Inicializar el hook
Procedure InitHook();
begin
  hhk := SetWindowsHookEx(WH_CBT, @CBT_FUNC, hInstance, GetCurrentThreadId);
  if hhk=0 then RaiseLastOSError;
end;

// Finilizar el hook
Procedure FinHook();
begin
  if (hhk <> 0) then
    UnhookWindowsHookEx(hhk);
end;


initialization
  InitHook();
finalization
  FinHook();

Cuando se creea el fomrulario principal se crea el hook. Y cada vez que se crea un formulario se llamará a la función CBT_FUNC.
Ahi se hacen unas comprobaciones y se accede a la clase del formulario.

El resultado en este ejemplo se visualiza en los eventos utilizando OutputDebugString. Para visualizarlos puedes usar la ventana "Event Log" desde el IDE o alguna herramienta tipo DebugView, si ejecutas desde fuera.

Si desde tu aplicación abres estos formularios:


Deberías ver un Log como este:

__________________
Germán Estévez => Web/Blog
Guía de estilo, Guía alternativa
Utiliza TAG's en tus mensajes.
Contactar con el Clubdelphi

P.D: Más tiempo dedicado a la pregunta=Mejores respuestas.
Responder Con Cita
 



Normas de Publicación
no Puedes crear nuevos temas
no Puedes responder a temas
no Puedes adjuntar archivos
no Puedes editar tus mensajes

El código vB está habilitado
Las caritas están habilitado
Código [IMG] está habilitado
Código HTML está deshabilitado
Saltar a Foro

Temas Similares
Tema Autor Foro Respuestas Último mensaje
¿ Cómo saber si un popup está abierto ? LDD Varios 1 17-04-2016 19:08:26
ClientdataSet como saber si esta abierto? Coco_jac Varios 4 13-04-2012 19:36:43
Como saber si un fichero está abierto RaulChemical API de Windows 13 30-12-2008 17:31:42
Saber si un puerto esta abierto Besto Varios 12 10-10-2007 16:30:00
Saber si esta abierto un documento Word Investment Servers 2 13-05-2004 12:02:26


La franja horaria es GMT +2. Ahora son las 09:42:46.


Powered by vBulletin® Version 3.6.8
Copyright ©2000 - 2026, Jelsoft Enterprises Ltd.
Traducción al castellano por el equipo de moderadores del Club Delphi
Copyright 1996-2007 Club Delphi