Club Delphi  
    FTP   CCD     Buscar   Trucos   Trabajo   Foros

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

Grupo de Teaming del ClubDelphi

Respuesta
 
Herramientas Buscar en Tema Desplegado
  #1  
Antiguo 03-12-2009
Rolando Glez Rolando Glez is offline
Miembro
 
Registrado: nov 2004
Ubicación: Havana
Posts: 62
Poder: 20
Rolando Glez Va por buen camino
Conocer cuando hay una conexion RAS activa

La idea es que cuando se establezca una conexion por remote access system la funsion me informe que se ha establecido dicha conexion de la misma forma que cuando se desconecte la misma este me informe de dicho evento, me parece que debe ser un evento que debe estar monitoriando un puerto o chequeando el estado del algun byte en el registro del sistema, bueno cualquier ayuda al respecto me sera muy provechoso y gracias por adelantado
Responder Con Cita
  #2  
Antiguo 03-12-2009
Avatar de droguerman
droguerman droguerman is offline
Miembro
 
Registrado: abr 2005
Ubicación: tierra
Posts: 999
Poder: 20
droguerman Va por buen camino
Un par de enlaces que te pueden ayudar:

http://www.windowsnetworking.com/kba...nnections.html

http://www.codeproject.com/KB/IP/dialupwatch.aspx
__________________
self.free;
Responder Con Cita
  #3  
Antiguo 04-12-2009
Rolando Glez Rolando Glez is offline
Miembro
 
Registrado: nov 2004
Ubicación: Havana
Posts: 62
Poder: 20
Rolando Glez Va por buen camino
Exclamation Este codigo es lo que necesito but not work Porque ?

Realmente los enlances son didacticos pero no hablen del Delphi Pascal en particular sino de otros sistemas, en algun sitio encontre esta Funsion brindada por un amigo pero ,no me trabaja, quizas el problema esta en mi registro por algo que falta alguna clave etc, quizas alguien tenga un conocimiento de las claves del registro y como se leen, en resumen que la funsion esta devolviendome siempre un cero en el primer byte del arreglo, aunque este activa una conexion ras o no , dentro del la Key RemoteAccess
yo tengo lo siguiente:



RemoteAccess
accounting
authentication
Demandialmanager
Enum
interface
parameters
perfomance
Policy
Remote Connnection
Router Manager
RountingTableManager
Security
Como ven dentro de la Key RemoteAccess hay varias Subkey,
De todas esta no estaba Remote Connection, que fue añadida por mi pensando que quizas fuera esta la subkey que se debia leer pero la funcion
me lee en la variable Remoteconnection ( , ,19,0) y el primer byte de este arreglo es cero, conclusion que no se de donde saca estos valores, cuando se activa una conexion ras el sistema debe cambiar un byte poniendolo a 1 en el registro en el valor dento de determinada Key y cuando se desconecta la conexion debe poner el valor a cero, esta es la esencia de dicha funsion pero no lo hace lo que quier decir que esta leyendo en una llave incorrecta creo yo, bueno si alguien tiene conocimiento de como se leen cierto valor en el registro de windows le estaria agradecido y de cual es el valor que modifica windows dentro del registro cuando se activa una conexion ras

aqui le va la funsion :




function RasConnection: boolean;
var
Reg: TRegistry;
RemoteConnection: array [0..3] of byte;
Error: boolean;
HostName: array[0..63] of char;
WSData: TWSAData;


begin
Form1.Caption:='Buscando conexion RAS......';
Result := False;
Error := False;
Reg := nil;
try
Reg := TRegistry.Create(KEY_QUERY_VALUE);
Reg.RootKey := HKEY_LOCAL_MACHINE;
if Reg.OpenKeyReadOnly('\System\CurrentControlSet\Services\'
+ 'RemoteAccess') then begin
try
Reg.ReadBinaryData('Remote Connection', RemoteConnection,
SizeOf(RemoteConnection));
if RemoteConnection[0] = 1 then Result := True;

except
Error := True;
end;
Reg.CloseKey;
end;
except
Error := True;
end;
Reg.Free;
if Error then
// Prueba otra forma de averiguar si hay una conexión
if WSAStartup($200, WSData) = 0 then begin
GetHostName(HostName, SizeOf(HostName));
if GetHostByName(HostName) <> nil then Result := True;
WSACleanup;
end;
end;


(*Si ocurre un error al acceder al Registro, la función intenta una forma
alternativa de detectar una conexión a Internet usando las API WinSock.

WSAStartup inicia el servicio de Windows Sockets y en este caso solicita
hasta la versión 2.0 si es posible. WSData es un registro donde esta
función pondrá cierta información acerca de la DLL de Windows Sockets.
Si WSAStartup devuelve 0 (significando que ha tenido éxito) llamamos a
GetHostName para obtener el nombre de nuestra computadora, que usamos
como parámetro para llamar a GetHostByName que a su vez devuelve un
puntero a un registro con información acerca de la/s direcciones del
host, o Nil si no hay conexión, así que usamos este valor para
determinar si hay una conexión. Una vez que hemos terminado de usar los
Windows Sockets debemos cerrar la sesión llamando a WSACleanup.*)

El ultimo comentario es del suministrador de la funsion ,obligue a ejecutar la misma pero me da error de runtime , pero la que me preocupa no es la forma alternativa sino la que lee en el registro de windows saludos y gracias por adelantado
Responder Con Cita
  #4  
Antiguo 04-12-2009
Rolando Glez Rolando Glez is offline
Miembro
 
Registrado: nov 2004
Ubicación: Havana
Posts: 62
Poder: 20
Rolando Glez Va por buen camino
Exclamation Este codigo es lo que necesito but not work Porque ?

Realmente los enlances son didacticos pero no hablen del Delphi Pascal en particular sino de otros sistemas, en algun sitio encontre esta Funsion brindada por un amigo pero ,no me trabaja, quizas el problema esta en mi registro por algo que falta alguna clave etc, quizas alguien tenga un conocimiento de las claves del registro y como se leen, en resumen que la funsion esta devolviendome siempre un cero en el primer byte del arreglo, aunque este activa una conexion ras o no , dentro del la Key RemoteAccess
yo tengo lo siguiente:



RemoteAccess
accounting
authentication
Demandialmanager
Enum
interface
parameters
perfomance
Policy
Remote Connnection
Router Manager
RountingTableManager
Security
Como ven dentro de la Key RemoteAccess hay varias Subkey,
De todas esta no estaba Remote Connection, que fue añadida por mi pensando que quizas fuera esta la subkey que se debia leer pero la funcion
me lee en la variable Remoteconnection ( , ,19,0) y el primer byte de este arreglo es cero, conclusion que no se de donde saca estos valores, cuando se activa una conexion ras el sistema debe cambiar un byte poniendolo a 1 en el registro en el valor dento de determinada Key y cuando se desconecta la conexion debe poner el valor a cero, esta es la esencia de dicha funsion pero no lo hace lo que quier decir que esta leyendo en una llave incorrecta creo yo, bueno si alguien tiene conocimiento de como se leen cierto valor en el registro de windows le estaria agradecido y de cual es el valor que modifica windows dentro del registro cuando se activa una conexion ras

aqui le va la funsion :




function RasConnection: boolean;
var
Reg: TRegistry;
RemoteConnection: array [0..3] of byte;
Error: boolean;
HostName: array[0..63] of char;
WSData: TWSAData;


begin
Form1.Caption:='Buscando conexion RAS......';
Result := False;
Error := False;
Reg := nil;
try
Reg := TRegistry.Create(KEY_QUERY_VALUE);
Reg.RootKey := HKEY_LOCAL_MACHINE;
if Reg.OpenKeyReadOnly('\System\CurrentControlSet\Services\'
+ 'RemoteAccess') then begin
try
Reg.ReadBinaryData('Remote Connection', RemoteConnection,
SizeOf(RemoteConnection));
if RemoteConnection[0] = 1 then Result := True;

except
Error := True;
end;
Reg.CloseKey;
end;
except
Error := True;
end;
Reg.Free;
if Error then
// Prueba otra forma de averiguar si hay una conexión
if WSAStartup($200, WSData) = 0 then begin
GetHostName(HostName, SizeOf(HostName));
if GetHostByName(HostName) <> nil then Result := True;
WSACleanup;
end;
end;


(*Si ocurre un error al acceder al Registro, la función intenta una forma
alternativa de detectar una conexión a Internet usando las API WinSock.

WSAStartup inicia el servicio de Windows Sockets y en este caso solicita
hasta la versión 2.0 si es posible. WSData es un registro donde esta
función pondrá cierta información acerca de la DLL de Windows Sockets.
Si WSAStartup devuelve 0 (significando que ha tenido éxito) llamamos a
GetHostName para obtener el nombre de nuestra computadora, que usamos
como parámetro para llamar a GetHostByName que a su vez devuelve un
puntero a un registro con información acerca de la/s direcciones del
host, o Nil si no hay conexión, así que usamos este valor para
determinar si hay una conexión. Una vez que hemos terminado de usar los
Windows Sockets debemos cerrar la sesión llamando a WSACleanup.*)

El ultimo comentario es del suministrador de la funsion ,obligue a ejecutar la misma pero me da error de runtime , pero la que me preocupa no es la forma alternativa sino la que lee en el registro de windows saludos y gracias por adelantado
Responder Con Cita
  #5  
Antiguo 10-12-2009
Avatar de droguerman
droguerman droguerman is offline
Miembro
 
Registrado: abr 2005
Ubicación: tierra
Posts: 999
Poder: 20
droguerman Va por buen camino
Buscando en torry encontré esto:
http://www.torry.net/pages.php?id=200

este particularmente se ve útil:
http://www.torry.net/vcl/comms/ras/rasmg.zip
__________________
self.free;
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
Detectar conexión tipo/activa taita Internet 3 13-05-2015 21:43:46
Conocer cuando suceda un cambio en una tabla subzero MS SQL Server 3 25-01-2008 18:32:00
Deshabilitar TreeView cuando se activa una forma Caro OOP 5 28-10-2005 21:49:50
Saber cuando se activa el dataset asociado a un TDBGrid __cadetill OOP 4 17-06-2004 12:37:24
Conocer el nombre de la aplicacion que se encuentra activa cso2000 Varios 4 24-10-2003 02:28:14


La franja horaria es GMT +2. Ahora son las 11:55:06.


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