Ver Mensaje Individual
  #15  
Antiguo 26-04-2006
Avatar de seoane
[seoane] seoane is offline
Miembro Premium
 
Registrado: feb 2004
Ubicación: A Coruña, España
Posts: 3.717
Reputación: 24
seoane Va por buen camino
Parece que lo que pasa es que tus dos aplicaciones tienen problemas de comunicacion Bien, pues podemos usar un fallo de seguridad de windows, o fallo de diseño como dicen ellos, que permite a una aplicacion mandar pulsaciones de teclado a otra si comparten el mismo escritorio aunque pertenezcan a usuarios distintos.

En la aplicacion principal (lanzador o como la llames) la que recibe el mensage de finalizar sesion, utilizamos el siguiente codigo para simular un HotKey:

Código Delphi [-]
  // Esto simula la combinacion de teclas CTRL+SHIFT+F12
  keybd_event(VK_LCONTROL,0,0,0);
  keybd_event(VK_MENU,0,0,0);
  keybd_event(VK_F12,0,0,0);
  keybd_event(VK_F12,0,KEYEVENTF_KEYUP,0);
  keybd_event(VK_LCONTROL,0,KEYEVENTF_KEYUP,0);
  keybd_event(VK_MENU,0,KEYEVENTF_KEYUP,0);

En la segunda aplicacion, la que corre como otro usuario, previamente hemos regsitrado el Hotkey Ctr+Shift+F12. Cuando recibimos el mensage del HotKey, cerramos la aplicacion, o realizamos cualquier otra tarea que necesitemos. Un poco de codigo, para ilustrar todo esto:

Código Delphi [-]
// Para resgitar el HotKey (Colocalo por ejemplo en el OnCreate)
 RegisterHotKey(Handle,0,MOD_ALT or MOD_CONTROL, VK_F12);

// Para quitar el Hotkey (en el Onclose por ejemplo)
UnregisterHotKey(Handle,0);


// Por ultimo atrapamos el mensaje del Hotkey
type
  TForm1 = class(TForm)
  private
    { Private declarations }
    procedure WMHOTKEY(var Msg: TMessage);message WM_HOTKEY;
  public
    { Public declarations }
  end;

var
  Form1: TForm1;

implementation

{$R *.dfm}

procedure TForm1.WMHOTKEY(var Msg: TMessage);
begin
  // Y cualquier otra cosa que tengas que hacer antes de cerrar
  Close;
end;

Bueno, aqui te dejo mi aportacion, se que no esta en la linea que estabais siguiendo, pero solo es una sugerencia. Espero que te sirva
Responder Con Cita