Club Delphi  
    FTP   CCD     Buscar   Trucos   Trabajo   Foros

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

Respuesta
 
Herramientas Buscar en Tema Desplegado
  #1  
Antiguo 23-05-2013
cmagno cmagno is offline
Miembro
 
Registrado: abr 2004
Posts: 16
Poder: 0
cmagno Va por buen camino
Exclamation Nombre de máquina o IP cliente en Terminal Server?

Hola a todos. Estuve buscando en el foro y vi varios hilos con título similar, pero en ninguno encontré una respuesta. Mi caso es el siguiente: tengo una aplicación hecha en Delphi7 + Oracle 10g. La aplicación corre en un servidor Terminal Server y es usada por aproximadamente 1000 usuarios en diversas ciudades. Por disposiciones legales, nos exigen generar un informe diario de ventas que debe incluir la máquina cliente desde la que se solicita el reporte y el servidor donde se procesa. El problema es que al estar sobre terminal server, para la aplicación el cliente y el servidor son el mismo. Cómo puedo hacer para que mi aplicación desde Terminal Server conozca el nombre de la máquina o la IP del equipo cliente que se conecta?.

Gracias de antemano por al colaboración.
Responder Con Cita
  #2  
Antiguo 23-05-2013
Avatar de newtron
[newtron] newtron is offline
Membrillo Premium
 
Registrado: abr 2007
Ubicación: Motril, Granada
Posts: 3.591
Poder: 21
newtron Va camino a la fama
Hola.

Si lo que quieres averiguar es el nombre del equipo echa un vistazo a esto

El tema de la ip es peliagudo porque la ip local se puede repetir en cientos de ordenadores y la ip de internet normalmente será dinámica así que de poco te servirá, de todas formas si te interesara puedes hacer una búsqueda en los foros y podrás averiguar cualquiera de las dos.

Saludos
__________________
Be water my friend.
Responder Con Cita
  #3  
Antiguo 23-05-2013
Avatar de juanelo
juanelo juanelo is offline
Miembro
 
Registrado: sep 2007
Posts: 1.085
Poder: 19
juanelo Va por buen camino
Te dejo el codigo en C++ como lo tengo implementado.

Código Delphi [-]
DWORD IDSes=0;
// Se debe de incluir Wtsapi32.h 
//Wtsapi32.dll

  LPTSTR pData = NULL;
  DWORD cbReturned = 0;
  char Cliente[150],IP[20];
  AnsiString Nombre=""; 
    ProcessIdToSessionId(GetCurrentProcessId(),&IDSes);
    if( WTSQuerySessionInformation(WTS_CURRENT_SERVER_HANDLE, IDSes, WTSClientName , &pData, &cbReturned) )//Obtenemos el nombre de pc
    {
      memset(Cliente,'\x0',150);
      strcpy(Cliente,pData);     
    }
   if(WTSQuerySessionInformation(WTS_CURRENT_SERVER_HANDLE, IDSes, WTSSessionAdressV4 , &pData, &cbReturned) )//Obtenemos la IP de la sesion
    {
      memset(IP,'\x0',20);
      strcpy(IP,pData);      
    }
    WTSFreeMemory(pData);

Te comento depenendiendo de la version de Wtsapi32.dll que tengas y de la version de compilador, las opciones de "llamado" a esta funcion puede variar.
Te dejo esta liga para que puedas checar toda la informacion. Espero te sirva.

NOTA IMPORTANTE: El valor de WTSSessionAdressV4 solo es soportado a partir de Win7 y de Win 2008 server R2
__________________
Ya tengo Firma!
Responder Con Cita
  #4  
Antiguo 23-05-2013
cmagno cmagno is offline
Miembro
 
Registrado: abr 2004
Posts: 16
Poder: 0
cmagno Va por buen camino
Hola, gracias por las respuestas.

Newtron... con GetComputerName obtengo el nombre de la máquina donde está alojada la aplicación, es decir el mismo servidor Terminal y lo que requiero es tanto el cliente (el que se conectar al Terminal) como el servidor Terminal.

Juanelo, voy a darle un vistazo al código para ver si puede serme útil.

Si es posible hacerlo directamente con Delphi sería genial. Gracias.
Responder Con Cita
  #5  
Antiguo 24-05-2013
Avatar de juanelo
juanelo juanelo is offline
Miembro
 
Registrado: sep 2007
Posts: 1.085
Poder: 19
juanelo Va por buen camino
Cita:
Empezado por cmagno Ver Mensaje
Si es posible hacerlo directamente con Delphi sería genial. Gracias.
Claro que es posible hacerlo en Delphi, son simples llamadas al API de windows.
Te puedo garantizar que al menos en C++ funciona perfecto.
Saludos
__________________
Ya tengo Firma!
Responder Con Cita
  #6  
Antiguo 24-05-2013
Avatar de olbeup
olbeup olbeup is offline
Miembro
 
Registrado: jul 2005
Ubicación: Santiago de la Ribera (España)
Posts: 685
Poder: 20
olbeup Va camino a la fama
Cita:
Empezado por cmagno Ver Mensaje
Hola a todos. Estuve buscando en el foro y vi varios hilos con título similar, pero en ninguno encontré una respuesta. Mi caso es el siguiente: tengo una aplicación hecha en Delphi7 + Oracle 10g. La aplicación corre en un servidor Terminal Server y es usada por aproximadamente 1000 usuarios en diversas ciudades. Por disposiciones legales, nos exigen generar un informe diario de ventas que debe incluir la máquina cliente desde la que se solicita el reporte y el servidor donde se procesa. El problema es que al estar sobre terminal server, para la aplicación el cliente y el servidor son el mismo. Cómo puedo hacer para que mi aplicación desde Terminal Server conozca el nombre de la máquina o la IP del equipo cliente que se conecta?.

Gracias de antemano por al colaboración.
Hola cmagno,

Mira haber esta:

Código Delphi [-]
function GetIDComputerName: String;

  function GetEnvVarValue(const VarName: String): String;
  var
    BufSize: Integer;
  begin
    BufSize := GetEnvironmentVariable(PChar(VarName), nil, 0);
    if (BufSize > 0) then
    begin
      SetLength(Result, BufSize -1);
      GetEnvironmentVariable(PChar(VarName), PChar(Result), BufSize);
    end
    else
      Result := '';
  end;

begin
  // Esto es para Terminal Server
    //   Primero recoger en LOCAL (CLIENTNAME) si devuelve '' nada esto significa que el
    // CLIENTNAME no existe en TERMINAL SERVER eso quiere decir que estamos en
    // LOCAL y la variable suya es COMPUTERNAME
  Result := GetEnvVarValue('CLIENTNAME');
  if (Length(Result) = 0) then
    Result := GetEnvVarValue('COMPUTERNAME');
end;

Un saludo
__________________
Al hacer una consulta SQL, haz que los demás te entiendan y disfruten de ella, será tú reflejo de tú saber.
Responder Con Cita
  #7  
Antiguo 28-05-2013
cmagno cmagno is offline
Miembro
 
Registrado: abr 2004
Posts: 16
Poder: 0
cmagno Va por buen camino
Talking

Perfecto!. Muchas gracias!
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

Temas Similares
Tema Autor Foro Respuestas Último mensaje
Problema con pieles en maquina cliente danielmj Varios 6 14-10-2011 22:20:22
Ip del equipo Cliente vs terminal server Luis Alfredo R. Varios 4 22-02-2011 20:05:34
Acceso a máquina local desde terminal Server jafl1965 Varios 0 18-03-2005 16:53:13
Problemas con Terminal Server Win 2003 Server El_Perrito Windows 0 16-10-2004 20:53:45
Ip Cliente Terminal Server Ester Varios 0 03-03-2004 13:32:42


La franja horaria es GMT +2. Ahora son las 01:24:56.


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