![]() |
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
|
Un par de enlaces que te pueden ayudar:
http://www.windowsnetworking.com/kba...nnections.html http://www.codeproject.com/KB/IP/dialupwatch.aspx |
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:rolleyes: |
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:rolleyes: |
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 |
La franja horaria es GMT +2. Ahora son las 00:35:46. |
Powered by vBulletin® Version 3.6.8
Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
Traducción al castellano por el equipo de moderadores del Club Delphi