Club Delphi  
    Paypal   FTP   CCD     Buscar   Trucos   Trabajo   Foros

Retroceder   Foros Club Delphi > Principal > Varios
Registrarse FAQ Miembros Calendario Guía de estilo Buscar Temas de Hoy Marcar Foros Como Leídos

Coloboración Paypal con ClubDelphi

 
 
Herramientas Buscar en Tema Desplegado
  #3  
Antiguo 21-01-2009
Avatar de The_Duke
The_Duke The_Duke is offline
Miembro
 
Registrado: abr 2006
Ubicación: Republica Dominicana
Posts: 48
Poder: 0
The_Duke Va por buen camino
Gracias por la ayuda Dec, e modificado el codigo para lo que necesito.
y aqui lo dejo para os que os puedan necesitar, y si hacen alguna mejora, ya que encuentro que es ago ento no mucho pero se nota.

Código Delphi [-]
unit UIApp;

interface

implementation

uses
  Windows, SysUtils, Forms, Dialogs, Messages, Unit1;

const
  { Cadenas para registrar el mutex y el mensaje }
  sMutex   = '10D73234-C9F7-4C2D-BC7E-39B5820AF456';
  sActivar = '3F154732-CCDE-4BC7-9439-AFCD3BCFA84D';

var
  mActivar    : Cardinal; { Mensaje para activar la instancia anterior }
  Mutex       : Cardinal; { Mutex                                      }
  PrevWndProc : TFarProc; { Procedimiento de ventana original          }


function AppWndProc(Handle: HWND; Msg: UINT; wParam: WPARAM; lParam: LPARAM): LongInt; stdcall;
var
  FgThreadId  : DWORD; { Hilo de la app. que tenga el foco }
  AppThreadId : DWORD; { Hilo de nuestra aplicación        }

begin

  if Msg = mActivar then
  begin

    Form1.close;

  end
  else
    { Dejar que el procedimiento original se encargue de los otros mensajes }
    Result := CallWindowProc(PrevWndProc, Handle, Msg, wParam, lParam);


end;

procedure Activar;
begin
  { Mandamos el mensaje a todas las ventanas }

   SendMessage(HWND_BROADCAST, mActivar, 0, 0);
  end;

procedure Registrar;
begin
  mActivar := RegisterWindowMessage(sActivar);
  Mutex    := CreateMutex(nil, true, sMutex);

  { Si ya existe el mutex lanzamos una excepción silenciosa }
  if GetLastError = ERROR_ALREADY_EXISTS then
  begin
        Activar;
        PrevWndProc := TFarProc(GetWindowLong(Application.Handle, GWL_WNDPROC));
  SetWindowLong(Application.Handle, GWL_WNDPROC, LongWord(@AppWndProc));
  end
  else
  begin
    { Sustituimos el procedimiento de ventana }
    PrevWndProc := TFarProc(GetWindowLong(Application.Handle, GWL_WNDPROC));
    SetWindowLong(Application.Handle, GWL_WNDPROC, LongWord(@AppWndProc));
  end;
end;

initialization
  try
    Registrar;
  except
    Halt;
  end;

finalization
  if Mutex <> 0 then ReleaseMutex(Mutex);
end.

Última edición por The_Duke fecha: 22-01-2009 a las 00:23:28.
Responder Con Cita
 


Herramientas Buscar en Tema
Buscar en Tema:

Búsqueda Avanzada
Desplegado

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
Como obtener el registro anterior al ultimo MRang14 SQL 11 07-05-2008 23:48:33
instancia de sql 2000 richy08 MySQL 4 17-12-2007 23:04:46
Saltar al control anterior, shift+tab. ¿COMO? seldonito Varios 3 09-02-2006 01:54:46
Cómo detectar una instancia de una aplicación Ana Tudela API de Windows 1 30-06-2005 12:20:13
Como puedo saber si un una variable instancia se le a realiso un create orfeo OOP 1 05-05-2003 08:42:38


La franja horaria es GMT +2. Ahora son las 06:50:07.


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