Ver Mensaje Individual
  #3  
Antiguo 04-12-2009
Rolando Glez Rolando Glez is offline
Miembro
 
Registrado: nov 2004
Ubicación: Havana
Posts: 62
Reputación: 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