Foros Club Delphi

Foros Club Delphi (https://www.clubdelphi.com/foros/index.php)
-   Internet (https://www.clubdelphi.com/foros/forumdisplay.php?f=3)
-   -   Existe conexión a Internet? (https://www.clubdelphi.com/foros/showthread.php?t=6423)

sitrico 07-01-2004 17:43:19

Existe conexión a Internet?
 
Tengo una rutina de autoregistro para mis aplicaciones que consiste en un formularo que me envía los datos del Usuario de mis aplicaciones, para ello uso los componentes Indy TIdSMTP y tIdMessage dento del siguiente código:

Código:

if InetIsOffline(0) then
  Begin
  Application.MessageBox('Debe conectarse a internet antes de enviar el Registro en Línea','Atención',MB_Ok);
  Exit;
  End;
Screen.Cursor := crHourGlass;
SMTP.Host := MiHost;
SMTP.Port := 25;
SMTP.Username := MiUserName;
Try
  If not(SMTP.Connected) then
      SMTP.Connect;
  Mensage.Body.Add('Envío de autoregistro de datos del Sistema');
  Mensage.Body.Add('');
  Mensage.Body.Add('Empresa : '+empre.text);
  Mensage.Body.Add('Contacto : '+Contac.text);
  Mensage.Body.Add('Serial : '+Serial.text);
  Mensage.Body.Add('Verificación : '+Verif.text);
  Mensage.Body.Add('País : '+Pais.text);
  Mensage.Body.Add('Ciudad : '+ciudad.text);
  Mensage.Body.Add('Dirección : '+Dir.text);
  Mensage.Body.Add('Teléfonos : '+Telf.text);
  Mensage.Body.Add('e-Mail : '+email.text);
  Mensage.Body.Add('Fecha y hora : '+DateTimeToStr(now));
  Mensage.Body.Add('Versión del SisArm : '+LaVersion);
  Mensage.From.Address := email.Text;
  Mensage.From.Name := 'Sistema';
  Mensage.Subject := 'Registro en Linea: '+empre.Text;
  Mensage.ContentType := 'text/plain';
  Mensage.Recipients.EMailAddresses := miEmail;
  SMTP.Send(Mensage);
  SMTP.Disconnect;
  Application.MessageBox('El Registro se Completo con exito','Atención',MB_Ok);
  ModalResult := mrOk;
Except
  Application.MessageBox('El Registro no pudo ser completado, es posible que no este conectado a Internet','Atención',MB_Ok);
  End;

En algunas ocasiones falla el InetIsOnLine (tomado de los trucos de internet del foro) y en otras sin razón aparente se genera el mensaje de error por excepción pero llega el mail. Creo que tiene que ver con la validez del EMail del Usuario

Código:

  Mensage.From.Address := email.Text;
Alguien sabe si la función:

Código:

function InetIsOffline(Flag: Integer): Boolean; stdcall; external 'URL.DLL';
Trabaja en todos los casos (Modem-LAN)

y como puedo valizar el email del usuario.

Gracias

jorch_yr 08-01-2004 04:06:47

En la ayuda de M$ pone que la funcion se encuentra en SHELL32.DLL,
pero en mi Windowz98 no esta en esa DLL pero si en URL.DLL.
Desconozco como ira en otros sistemas Windows.

----------------------------------------------------------------------------------

procedure TForm1.Button1Click(Sender: TObject);

function FuncAvail(_dllname, _funcname: string; var _p: pointer): boolean;
{
Devuelve true si la funcion _funcname esta disponible en la DLL _dllname.
Si es asi, almacena en _p la direccion de la función.
}
var _lib: tHandle;
begin
Result := false;
if LoadLibrary(PChar(_dllname)) = 0 then exit;
_lib := GetModuleHandle(PChar(_dllname));
if _lib <> 0 then
begin
_p := GetProcAddress(_lib, PChar(_funcname));
if _p <> nil then Result := true;
end;
end;


var
InetIsOffline : function(dwFlags: DWORD): BOOL; stdcall;

begin
{ Ojo: 'InetIsOffline' debe de estar escrito con estas mayusculas y
minusculas.}
if FuncAvail('URL.DLL', 'InetIsOffline', @InetIsOffline) = true then
if InetIsOffLine(0) = true
then ShowMessage('No estas conectado')
else ShowMessage('Estas conectado!');
end;


(Texto estraido de Tmania Explorer Truco Numero 448 Saver si estamos conectado a internet)

jorch_yr 08-01-2004 04:09:28

si trabaja en modem y lan
pero lo del e-mail ni idea

y no se si trabaj en todos los win

Lepe 12-01-2004 07:14:32

Esto me funciona con mi supermodem 56k en windows 98 y XP
Ojalá te pueda servir de algo.

Código:

uses wininet;

procedure TForm1.Button1Click(Sender: TObject);
var conectado:boolean;
begin
conectado:= internetgetconnectedstate(0,0);
label1.Visible:=true;

if conectado then
begin
  label1.Caption:='SI';
end
else
begin
  label1.Caption:='NO';
end;

end; // button1click


procedure TForm1.Button2Click(Sender: TObject);
begin
InternetAutodialHangup(INTERNET_STATE_DISCONNECTED_BY_USER);
//  internethangup(0,0);
end;

procedure TForm1.Button3Click(Sender: TObject);
var c:boolean;
begin
c:=internetgetconnectedstate(lpdword(INTERNET_CONNECTION_MODEM),0);
label2.Visible:=true;

if c then
begin
  label2.Caption:='SI';
end
else
begin
  label2.Caption:='NO';
end;


end;

procedure TForm1.Button4Click(Sender: TObject);
var c:boolean;
begin
c:=internetgetconnectedstate(lpdword(INTERNET_CONNECTION_MODEM_BUSY),0);
label3.Visible:=true;

if c then
  label3.Caption:='SI'
else
  label3.Caption:='NO';
end;


Delphius 11-08-2005 08:22:52

una aclaración
 
Para que funcione correctamente lo de lepe debes incluir en uses la unidad WinInet.


InternetGetConnectedState(@Estado, 0) // Estado: Cardinal
Esta función puede dar False, o True

Pero si se realiza la operación: Trunc(Log2(Estado)) se puede saber el estado:
// para que funcione Log2 hay que agregar en uses "Math".

-- 0 -- INTERNET_CONNECTION_MODEM => Hay conexión mediante módem
-- 1 -- INTERNET_CONNECTION_LAN => Hay una conexión mediante red local
-- 2 -- INTERNET_CONNECTION_PROXY => Hay una conexión a través de proxy
-- 3 -- INTERNET_CONNECTION_MODEM_BUSY => El módem está ocupado
-- 4 -- INTERNET_CONNECTION_OFFLINE => No hay conexión activa


La franja horaria es GMT +2. Ahora son las 07:34:05.

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