Club Delphi  
    FTP   CCD     Buscar   Trucos   Trabajo   Foros

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

Grupo de Teaming del ClubDelphi

Respuesta
 
Herramientas Buscar en Tema Desplegado
  #1  
Antiguo 29-08-2005
Avatar de marceloalegre
[marceloalegre] marceloalegre is offline
Miembro Premium
 
Registrado: abr 2005
Ubicación: Mar del Plata - Argentina
Posts: 448
Poder: 20
marceloalegre Va por buen camino
Question Mensajes WM anda entre sesiones?¿?

Buenas tardes:
Una pregunta muy rara la mia.. pero bueno siempre tengo q lidiar con cosas raras... en este caso necesito comunicar una aplicacion con otra que esta en la misma pc ejecutada en otra sesion, no quiere compartir datos en un .ini ni nada de eso... quiero manejarme directamente con mensajes de windows del tipo wm.
Alguien sabe si puedo comunicarme mandando mensajes entre las 2 aplicaciones que estan en sesiones distintas?

espero se entienda... saludos
Responder Con Cita
  #2  
Antiguo 29-08-2005
Avatar de roman
roman roman is offline
Moderador
 
Registrado: may 2003
Ubicación: Ciudad de México
Posts: 20.269
Poder: 10
roman Es un diamante en brutoroman Es un diamante en brutoroman Es un diamante en bruto
Busca en la ayuda del SDK de Windows (incluida con Delphi) acerca de RegisterWindowMessage. Esta función te sirve para estableder mensajes aptos para comunicación entre aplicaciones.

// Saludos
Responder Con Cita
  #3  
Antiguo 29-08-2005
Avatar de delphi.com.ar
delphi.com.ar delphi.com.ar is offline
Federico Firenze
 
Registrado: may 2003
Ubicación: Buenos Aires, Argentina *
Posts: 5.932
Poder: 27
delphi.com.ar Va por buen camino
Hablo suponiendo, pues no tengo como probarlo aquí, pero creo que cada sesión se debe ejecutar en un nuevo Window Station, por consiguiente en un nuevo Desktop. No vas a obtener el handle de la ventana de otro desktop, a no ser que busques al WindowStation (EnumWindowStations), busques el Desktop (EnumDesktops) y busques la ventana (EnumDesktopWindows). Para cada una de estas búsquedas podrás encontrar mas de un resultado. Supongo que una vez encontrada, no habrá problema para comunicarse por "Window Messages"...

Saludos!
__________________
delphi.com.ar

Dedique el tiempo suficiente para formular su pregunta si pretende que alguien dedique su tiempo en contestarla.
Responder Con Cita
  #4  
Antiguo 29-08-2005
Avatar de roman
roman roman is offline
Moderador
 
Registrado: may 2003
Ubicación: Ciudad de México
Posts: 20.269
Poder: 10
roman Es un diamante en brutoroman Es un diamante en brutoroman Es un diamante en bruto
Ah, se me había pasado el "detallito" de las sesiones

Pero ahora me queda la duda:

Cita:
Empezado por delphi.com.ar
Supongo que una vez encontrada, no habrá problema para comunicarse por "Window Messages"
pues no me queda claro si SendMessage o PostMessage puedan mandar mesajes entre escritorios.

// Saludos
Responder Con Cita
  #5  
Antiguo 29-08-2005
Avatar de roman
roman roman is offline
Moderador
 
Registrado: may 2003
Ubicación: Ciudad de México
Posts: 20.269
Poder: 10
roman Es un diamante en brutoroman Es un diamante en brutoroman Es un diamante en bruto
Pues va a ser que no. El SDK de Windows explícitamente dice:

Cita:
Empezado por SDK de Windows
Messages can be sent only between processes that are on the same desktop. In addition, the hook procedure of a process running on a particular desktop can only receive messages intended for windows created in the same desktop.
// Saludos
Responder Con Cita
  #6  
Antiguo 29-08-2005
Avatar de delphi.com.ar
delphi.com.ar delphi.com.ar is offline
Federico Firenze
 
Registrado: may 2003
Ubicación: Buenos Aires, Argentina *
Posts: 5.932
Poder: 27
delphi.com.ar Va por buen camino
Estaba haciendo esta prueba, pero me tengo que ir... si alguien quiere continuarla...
Código Delphi [-]
program AppConsole;

{$APPTYPE CONSOLE}

uses
  SysUtils,
  Windows,
  Messages;

var
  Dummy: string;
begin
  SendMessage(StrToIntDef(ParamStr(1), 0), WM_SETTEXT, 0, Integer(PChar(ParamStr(2))));
  WriteLn(ParamStr(2));
  ReadLn(Dummy);
end.

Código Delphi [-]
procedure TForm1.Button1Click(Sender: TObject);
var
  MyDesk: HDESK;
  ProcessInfo: TProcessInformation;
  StartupInfo: TStartupInfo;
begin
  MyDesk := CreateDesktop('Delphi.com.ar', nil, nil, DF_ALLOWOTHERACCOUNTHOOK,
                          DESKTOP_CREATEWINDOW or DESKTOP_SWITCHDESKTOP,
                           nil);
  if MyDesk <> 0 then
    try
      SwitchDesktop(MyDesk);

      ZeroMemory(@StartupInfo, SizeOf(TStartupInfo));
      StartupInfo.cb := SizeOf(TStartupInfo);
      StartupInfo.lpDesktop := PChar('Delphi.com.ar');


      CreateProcess(nil, PChar('AppConsole.exe' + IntToStr(Handle) + ' ' + Edit1.Text), 
                          nil, nil, True, CREATE_DEFAULT_ERROR_MODE or CREATE_SEPARATE_WOW_VDM, 
                          nil, nil, StartupInfo, ProcessInfo);
      try
        Sleep(5000);
      finally
        CloseHandle(ProcessInfo.hProcess);
      end;
    finally
      CloseDesktop(MyDesk);
    end;
end;

end.

Saludos!
__________________
delphi.com.ar

Dedique el tiempo suficiente para formular su pregunta si pretende que alguien dedique su tiempo en contestarla.

Última edición por delphi.com.ar fecha: 30-08-2005 a las 20:47:40.
Responder Con Cita
  #7  
Antiguo 30-08-2005
Avatar de delphi.com.ar
delphi.com.ar delphi.com.ar is offline
Federico Firenze
 
Registrado: may 2003
Ubicación: Buenos Aires, Argentina *
Posts: 5.932
Poder: 27
delphi.com.ar Va por buen camino
Cita:
Empezado por roman
Pues va a ser que no. El SDK de Windows explícitamente dice...
Antes de escribir el primer post, estuve buscando eso, porque creía haberlo leído anteriormente, pero no lo encontré

Saludos!
__________________
delphi.com.ar

Dedique el tiempo suficiente para formular su pregunta si pretende que alguien dedique su tiempo en contestarla.
Responder Con Cita
  #8  
Antiguo 30-08-2005
Avatar de roman
roman roman is offline
Moderador
 
Registrado: may 2003
Ubicación: Ciudad de México
Posts: 20.269
Poder: 10
roman Es un diamante en brutoroman Es un diamante en brutoroman Es un diamante en bruto
Cita:
Empezado por delphi.com.ar
Antes de escribir el primer post, estuve buscando eso,
porque creía haberlo leído anteriormente, pero no lo encontré
Igual me pasó a mi. Busqué primero en la ayuda del SDK de Windows que
viene con Delphi y no lo menciona pero en el msdn sí lo dice.

Ya después buscando en los grupos de noticias de Borland vi varias entradas
de Peter Below donde enfáticamente afirma lo mismo y menciona que para
ese tipo de comunicación mejor usar en todo caso tcp/ip.

// Saludos
Responder Con Cita
  #9  
Antiguo 30-08-2005
Avatar de delphi.com.ar
delphi.com.ar delphi.com.ar is offline
Federico Firenze
 
Registrado: may 2003
Ubicación: Buenos Aires, Argentina *
Posts: 5.932
Poder: 27
delphi.com.ar Va por buen camino
Cita:
Empezado por roman
Igual me pasó a mi. Busqué primero en la ayuda del SDK de Windows que
viene con Delphi y no lo menciona pero en el msdn sí lo dice.
¿Adivina en cual busque yo?

Cita:
Empezado por roman
Ya después buscando en los grupos de noticias de Borland vi varias entradas de Peter Below donde enfáticamente afirma lo mismo y menciona que para ese tipo de comunicación mejor usar en todo caso tcp/ip.
Sinceramente no me gusta mucho la idea, simplemente recuerdo que en los windows viejos (no se si aun sigue siendo así) para poder utilizar los Sockets teníamos que tener algún dispositivo de red instalado, ya sea físico o virtual. Se que puede no ser el caso, y puede parecer algo arcaico mi pensamiento, pero siempre cuando diseño algo, intento que sea lo mas compatible posible. Por otro lado, se me había ocurrido que la comunicación podría realizarse mediante un System Service, me parece que algo dice la SDK al respecto.

Saludos!
__________________
delphi.com.ar

Dedique el tiempo suficiente para formular su pregunta si pretende que alguien dedique su tiempo en contestarla.
Responder Con Cita
  #10  
Antiguo 30-08-2005
Avatar de roman
roman roman is offline
Moderador
 
Registrado: may 2003
Ubicación: Ciudad de México
Posts: 20.269
Poder: 10
roman Es un diamante en brutoroman Es un diamante en brutoroman Es un diamante en bruto
Cita:
Empezado por delphi.com.ar
se me había ocurrido que la comunicación podría realizarse mediante un System Service
¿Y cómo se comunicaría el servicio con la aplicación?

// Saludos

pd: ¿Podrías entrar al mensaje #6 de tu autoría y cortar las líneas largas?
Responder Con Cita
  #11  
Antiguo 30-08-2005
Avatar de delphi.com.ar
delphi.com.ar delphi.com.ar is offline
Federico Firenze
 
Registrado: may 2003
Ubicación: Buenos Aires, Argentina *
Posts: 5.932
Poder: 27
delphi.com.ar Va por buen camino
Cita:
Empezado por roman
¿Y cómo se comunicaría el servicio con la aplicación?
También es un delirio, crear un servicio para comunicar dos proceso.... Brrr... Me pareció leer algo por la SDK, pero hablaba de servicios que interactúan con el escritorio.

¿Que tal comunicar los procesos por los medios tradicionales a traves del kernler?... (CreateFile, CreateFileMapping, CreateSemaphore, CreateMutex)

Ahora armo un ejemplito con FileMapping y lo subo para que lo prueben!... yo no puedo

Saludos!
__________________
delphi.com.ar

Dedique el tiempo suficiente para formular su pregunta si pretende que alguien dedique su tiempo en contestarla.
Responder Con Cita
  #12  
Antiguo 30-08-2005
Avatar de roman
roman roman is offline
Moderador
 
Registrado: may 2003
Ubicación: Ciudad de México
Posts: 20.269
Poder: 10
roman Es un diamante en brutoroman Es un diamante en brutoroman Es un diamante en bruto
Cita:
Empezado por delphi.com.ar
Me pareció leer algo por la SDK, pero hablaba de servicios que interactúan con el escritorio.
Así es; para que sirva de comunicación requerirías poder mandar mensajes al servicio y para ello es necesario que interactúe con el escritorio... Pero como son distintos escritorios...


Cita:
Empezado por delphi.com.ar
Ahora armo un ejemplito con FileMapping y lo subo para que lo prueben!... yo no puedo

Sí, pensé en los memory mapped files pero ya me dio pereza hacer un ejemplo

// Saludos
Responder Con Cita
  #13  
Antiguo 30-08-2005
Avatar de delphi.com.ar
delphi.com.ar delphi.com.ar is offline
Federico Firenze
 
Registrado: may 2003
Ubicación: Buenos Aires, Argentina *
Posts: 5.932
Poder: 27
delphi.com.ar Va por buen camino
Cita:
Empezado por roman
Así es; para que sirva de comunicación requerirías poder mandar mensajes al servicio y para ello es necesario que interactúe con el escritorio... Pero como son distintos escritorios...
Pero si buscas el Desktop, se lo asignas al current thread, te peleas con la seguridad..... ¡Es súper engorroso!

Cita:
Empezado por roman
Sí, pensé en los memory mapped files pero ya me dio pereza hacer un ejemplo
Aquí esta mi ejemplo para que lo prueben!

Saludos!
__________________
delphi.com.ar

Dedique el tiempo suficiente para formular su pregunta si pretende que alguien dedique su tiempo en contestarla.
Responder Con Cita
  #14  
Antiguo 18-10-2005
Avatar de roman
roman roman is offline
Moderador
 
Registrado: may 2003
Ubicación: Ciudad de México
Posts: 20.269
Poder: 10
roman Es un diamante en brutoroman Es un diamante en brutoroman Es un diamante en bruto
Cita:
Empezado por delphi.com.ar
Aquí esta mi ejemplo para que lo prueben!
Hola Federico. Un poco tarde, se me había pasado esto pero ayer finalmente lo probé. La aplicación logra mandar mensajes entre distintos escritorios mas no entre distintas sesiones.

Cita:
Empezado por delphi.com.ar
Ahora armo un ejemplito con FileMapping y lo subo para que lo prueben!... yo no puedo
¿Esto quiere decir que sin tener Delphi a la mano, programaste todo un ejemplo que compiló sin un sólo problema. Me sorprendes amigo mío. De grande (en mi otra vida) quiero ser como tú.

// Saludos
Responder Con Cita
  #15  
Antiguo 18-10-2005
Avatar de delphi.com.ar
delphi.com.ar delphi.com.ar is offline
Federico Firenze
 
Registrado: may 2003
Ubicación: Buenos Aires, Argentina *
Posts: 5.932
Poder: 27
delphi.com.ar Va por buen camino
Cita:
Empezado por roman
¿Esto quiere decir que sin tener Delphi a la mano, programaste todo un ejemplo que compiló sin un sólo problema. Me sorprendes amigo mío. De grande (en mi otra vida) quiero ser como tú.
Nooo.. no tenía un WinXP o un Termial Server para probarlo en forma fácil...
__________________
delphi.com.ar

Dedique el tiempo suficiente para formular su pregunta si pretende que alguien dedique su tiempo en contestarla.
Responder Con Cita
  #16  
Antiguo 18-10-2005
Avatar de marceloalegre
[marceloalegre] marceloalegre is offline
Miembro Premium
 
Registrado: abr 2005
Ubicación: Mar del Plata - Argentina
Posts: 448
Poder: 20
marceloalegre Va por buen camino
:)

jajaja!!!0 es cierto cuando sea grande yo tambien quiero ser como el... a mi me lleva un ratillo tener las cosas compiladas y funcionando correctamente...

haaa para este tema, por si a alguien le interesa, los mensajes entre sesiones se manejan sin problemas usando socket local... no se si sera una buena solución pero fue algo que implemente rapido, y me saco del apuro...!

Saludos!!
Responder Con Cita
  #17  
Antiguo 18-10-2005
Avatar de delphi.com.ar
delphi.com.ar delphi.com.ar is offline
Federico Firenze
 
Registrado: may 2003
Ubicación: Buenos Aires, Argentina *
Posts: 5.932
Poder: 27
delphi.com.ar Va por buen camino
Cita:
Empezado por roman
La aplicación logra mandar mensajes entre distintos escritorios mas no entre distintas sesiones.
Mmmm.. posiblemente haya que jugar con los SECURITY_ATTRIBUTES en el momento de creación del archivo.
__________________
delphi.com.ar

Dedique el tiempo suficiente para formular su pregunta si pretende que alguien dedique su tiempo en contestarla.
Responder Con Cita
  #18  
Antiguo 18-10-2005
Avatar de delphi.com.ar
delphi.com.ar delphi.com.ar is offline
Federico Firenze
 
Registrado: may 2003
Ubicación: Buenos Aires, Argentina *
Posts: 5.932
Poder: 27
delphi.com.ar Va por buen camino
Cita:
Empezado por kanvictor
haaa para este tema, por si a alguien le interesa, los mensajes entre sesiones se manejan sin problemas usando socket local... no se si sera una buena solución pero fue algo que implemente rapido, y me saco del apuro...!
Algo habíamos comentado al respecto:


Cita:
Empezado por roman
Ya después buscando en los grupos de noticias de Borland vi varias entradas de Peter Below donde enfáticamente afirma lo mismo y menciona que para ese tipo de comunicación mejor usar en todo caso tcp/ip.
Cita:
Empezado por delphi.com.ar
Sinceramente no me gusta mucho la idea, simplemente recuerdo que en los windows viejos (no se si aun sigue siendo así) para poder utilizar los Sockets teníamos que tener algún dispositivo de red instalado, ya sea físico o virtual. Se que puede no ser el caso, y puede parecer algo arcaico mi pensamiento, pero siempre cuando diseño algo, intento que sea lo mas compatible posible.
__________________
delphi.com.ar

Dedique el tiempo suficiente para formular su pregunta si pretende que alguien dedique su tiempo en contestarla.
Responder Con Cita
  #19  
Antiguo 18-10-2005
Avatar de marceloalegre
[marceloalegre] marceloalegre is offline
Miembro Premium
 
Registrado: abr 2005
Ubicación: Mar del Plata - Argentina
Posts: 448
Poder: 20
marceloalegre Va por buen camino
Post

Muy cierto tu comentario Federico, me quede mal en su momento, pensando que si no tenian dispositivo de red no funcionaba... igual eso es culpa del maldito windows, porque linux no tiene ese inconveniente... Pero honestamente en la empresa que trabajo lamentablemente las cosas tienen que salir muy rapido y crei que esa era la mejor jugada que pude hacer en ese momento...
Igualmente el programa ya de por si manejaba sockets, asi que no podia tener problemas porque como requisito fundamental para usar la aplicacion habia que tener una placa de red... mas alla de eso hoy por hoy el hardware standard del mercado de pc incluye una placa de red...

Pero... muy Muy de acuerdo hay que hacer las cosas lo mas compatible e independiente (soft/hard) posible...

Pd: igual por ahora creo que el socket es lo unico que anda entre sesiones no? ...

Haaa en cuanto al tema del servicio para comunicar los procesos que lei por ahi abajo yo tambien "delire" cuando estaba haciendo las pruebas, pero el servicio de por sí (por defecto) se carga con el usuario SYSTEM asi que seguia dando vueltas sobre lo mismo jaaa,,, no queria saber mas nada de sesiones!,,, y no me parecio util....
Responder Con Cita
Respuesta



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


La franja horaria es GMT +2. Ahora son las 08:50:29.


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