国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 學院 > 開發設計 > 正文

如何在啟動機器時自動運行adsl撥號(2)

2019-11-18 18:37:43
字體:
來源:轉載
供稿:網友
 

自動撥號的程序做完了,接下來的任務就是如何建一個服務在開機時運行,并定時檢測網絡
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)

發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
學習交流
熱門圖片

新聞熱點

疑難解答

圖片精選

網友關注

主站蜘蛛池模板: 英超| 江安县| 大冶市| 东莞市| 宁夏| 南昌市| 巍山| 富锦市| 田阳县| 吴堡县| 山西省| 韶关市| 龙州县| 河源市| 恩施市| 永嘉县| 万荣县| 韩城市| 郓城县| 侯马市| 正阳县| 海丰县| 宣汉县| 双流县| 连山| 桐庐县| 罗田县| 玉屏| 通化县| 招远市| 林周县| 庆城县| 青川县| 兴文县| 二连浩特市| 碌曲县| 伽师县| 邢台县| 宜兴市| 郯城县| 阿坝县|