网络编程 | 站长之家 | 网页制作 | 图形图象 | 操作系统 | 冲浪宝典 | 软件教学 | 网络办公 | 邮件系统 | 网络安全 | 认证考试 | 系统进程
Firefox | IE | Maxthon | 迅雷 | 电驴 | BitComet | FlashGet | QQ | QQ空间 | Vista | 输入法 | Ghost | Word | Excel | wps | Powerpoint
asp | .net | php | jsp | Sql | c# | Ajax | xml | Dreamweaver | FrontPages | Javascript | css | photoshop | fireworks | Flash | Cad | Discuz!
当前位置 > 网站建设学院 > 网络编程 > Delphi
Tag:注入,存储过程,分页,安全,优化,xmlhttp,fso,jmail,application,session,防盗链,stream,无组件,组件,md5,乱码,缓存,加密,验证码,算法,cookies,ubb,正则表达式,水印,索引,日志,压缩,base64,url重写,上传,控件,Web.config,JDBC,函数,内存,PDF,迁移,结构,破解,编译,配置,进程,分词,IIS,Apache,Tomcat,phpmyadmin,Gzip,触发器,socket
网络编程:ASP教程,ASP.NET教程,PHP教程,JSP教程,C#教程,数据库,XML教程,Ajax,Java,Perl,Shell,VB教程,Delphi,C/C++教程,软件工程,J2EE/J2ME,移动开发
本月文章推荐
.在Delphi中控制扫描仪.
.再谈多态――向上映射及VMT/DMT.
.Fastreport3.14的中文PDF输出.
.理解类引用这种类型.
.在Delphi中实现任意形状的窗体.
.Delphi使用技巧四则.
.校验码辅导讲座.
.菜鸟入门之浅谈函数重载和多态的.
.代码优化分析一例.
.QQ窗体自动隐藏效果探究.
.讲述如何开发一个控件,很有价值(.
.FAQ:如何访问WebBrowser的滚动条.
.关于Delphi中预编译指令的使用方.
.使DBGrid的列自动调整到何时大小.
.并发.
.用Delphi自制英语复读机.
.扫雷外挂的设计与实现(三).
.在delphi中建立程序的快捷方式--.
.Delphi与DirectShow&DSP.
.用Delphi产生一个最小的可执行程.

如何在启动机器时自动运行adsl拨号(2)

发表日期:2006-2-4


 

自动拨号的程序做完了,接下来的任务就是如何建一个服务在开机时运行,并定时检测网络
unit Unit1;

interface

uses
  Windows, Messages, SysUtils, Classes, Graphics, Controls, SvcMgr, Dialogs,ras,IniFiles;

type
  TAutoDialService = class(TService)
    procedure ServicePause(Sender: TService; var Paused: Boolean);
    procedure ServiceContinue(Sender: TService; var Continued: Boolean);
    procedure ServiceStart(Sender: TService; var Started: Boolean);
  private
    { Private declarations }
  public
    function GetServiceController: TServiceController; override;
    { Public declarations }
  end;
type
  TChildParam=record
    TrdId:integer;
  end;
var
  AutoDialService: TAutoDialService;
  Run:boolean;
  DirPath,EntryName:string;
  aRasConn:array [0..10] of TRASCONN;
  nRasConnCount: DWORD;
  hRasConn:THRASCONN;
  RetryInterval:integer;
 
implementation

{$R *.DFM}

procedure ServiceController(CtrlCode: DWord); stdcall;
begin
  AutoDialService.Controller(CtrlCode);
end;

function TAutoDialService.GetServiceController: TServiceController;
begin
  Result := ServiceController;
end;

procedure LogMessage(Msg:string);
var
  LogFile:TextFile;
begin
  AssignFile(LogFile,DirPath+'Log.txt');
  Append(LogFile);
  WriteLn(LogFile,DateTimeToStr(Now)+','+Msg);
  CloseFile(LogFile);
end;

procedure GetActiveConn;
var
    dwRet    : DWORD;
    nCB      : DWORD;
    Buf      : array [0..255] of Char;
begin
    aRasConn[0].dwSize := SizeOf(aRasConn[0]);
    nCB   := SizeOf(aRasConn);
    dwRet := RasEnumConnectionsA(@aRasConn, @nCB, @nRasConnCount);
    if dwRet <> 0 then begin
        RasGetErrorStringA(dwRet, @Buf[0], SizeOf(Buf));
        LogMessage(Buf);
    end;
end;

function GetActiveConnHandle(szName : String) : THRASCONN;
var
    I : Integer;
begin
    GetActiveConn;
    if nRasConnCount > 0 then begin
        for I := 0 to nRasConnCount - 1 do begin
            if StrIComp(PChar(szName), aRasConn[I].szEntryName) = 0 then begin
                Result := aRasConn[I].hRasConn;
                Exit;
            end;
        end;
    end;
    Result := 0;
end;

function CheckConn(FEntryName:string):boolean;
begin
    hRasConn := GetActiveConnHandle(FEntryName);
    if hRasConn <> 0 then
      result:=True
    else
      Result:=False;
end;

function ChildThrd(p:Pointer):LongInt;stdcall;//定时检测网络连接是否正常
var
  ThreadId:integer;
begin
  Result:=0;
  ThreadId:=TChildParam(p^).TrdId;
  while True do
  begin
    if Run then
    begin
      if not CheckConn(EntryName) then
      begin
        WinExec(PChar(DirPath+'AutoDial.exe'),SW_SHOW);//运行前面制作的的拨号程序
      end;
      sleep(RetryInterval);
    end;
  end;
  Dispose(p);
end;

procedure TAutoDialService.ServicePause(Sender: TService; var Paused: Boolean);
begin
  Run:=False;
  Paused:=True;
end;

procedure TAutoDialService.ServiceContinue(Sender: TService;
  var Continued: Boolean);
begin
  Run:=True;
  Continued:=True;
end;

procedure TAutoDialService.ServiceStart(Sender: TService;
  var Started: Boolean);
var
  hChildThread:Thandle;
  ChildThreadId:DWord;
  ChildParam:^TChildParam;
  f:TIniFile;
begin
  DirPath:=ExtractFilePath(ParamStr(0));
  f:=TiniFile.Create(DirPath+'conf.ini');
  EntryName:=f.ReadString('RasDial','EntryName','');
  RetryInterval:=f.ReadInteger('RasDial','Interval',0)*1000;
  f.Free;

  Run:=True;

  new(ChildParam);
  ChildParam^.TrdId:=2;
  hChildThread:=CreateThread(nil,0,@ChildThrd,ChildParam,0,ChildThreadID);
end;

end.

好了,现在只要重起一下机器后,就能自动拨号了

源码下载

http://ono.3322.org

上一篇:如何在启动机器时自动运行adsl拨号(1) 人气:4585
下一篇:也来谈谈数据库中的图象存取 人气:3964
浏览全部Delphi的内容 Dreamweaver插件下载 网页广告代码 祝你圣诞节快乐 2009年新年快乐