频道直达 - 专题 - 新闻 - 技巧 - 组网 - 开发 - 安全 - web编程 - 图像 - 操作系统 - 数据库 - 教育 - 旅游 - 健康 - 时尚 - 驱动 - 软件 - 游戏 - 多媒体 - ERP - 讨论组

TZoCInetChecker:检测网络连接的类

来源: 作者: 出处:巧巧读书 2006-11-26 进入讨论组

    下面就是那时写的一个类TZoCInetChecker,提供了一个Method,几个Properties,还有几个Events,用起来和上面那个阻塞调用的函数一样方便,当然,它也包含了阻塞方式的检测:

方法

    Execute:      调用我就好了,其它的交给我去办

属性
    Busy:         我正忙着呢,还没检测完,一会儿再来
    AccessType:   你希望我怎么连接网络,直接连还是用代理?
    AsynRequest:  同步检测的话我们要有一会儿看不到对方了,呜呜
    UserAgent:    想告诉Web服务器是阿猫还是阿狗在连接?在这里设置就好了
    Proxy:        让我用代理连网络,用哪个代理啊?
    Url:          原来是要检测这个地址能不能访问,保证办到

事件
    OnStart:      开始检测之前我会在这里通知你一声
    OnStatusChange:检测过程中发生什么事我会在这里及时通知你的
    OnComplete:    检测完成了,成功不成功我都会告诉你

{**********************************************************}
{                                                          }
{  TZoCInetChecker Component Version 1.00                  }
{                                                          }
{  Function: Asynchronously Check if a given web page      }
{            can be successfully retreived and feed back   }
{            the user with callback status infomation      }
{                                                          }
{                                                          }
{  This is a freeware. If you made cool changes on it,     }
{  please send them to me.                                 }
{                                                          }
{  Email: eagleboost@msn.com                               }
{  URL: http://www.ZoCsoft.com                             }
{                                                          }
{  History: + New Feature, - Removed, * Modified           }
{                                                          }
{           version 1.00 2005-06-03                        }
{             The first version                            }
{                                                          }
{**********************************************************}


unit ZoCInetChecker;


interface


uses
  Windows, Messages, SysUtils, Classes, WinInet;


const
  INTERNET_STATUS_DETECTING_PROXY       = 80;
{$EXTERNALSYM INTERNET_STATUS_DETECTING_PROXY}
  WM_STATUSCHANGE                       = WM_USER + 200;
  WM_CHECKCOMPLETE                      = WM_USER + 201;


type
  LPINTERNET_ASYNC_RESULT = ^INTERNET_ASYNC_RESULT;
  INTERNET_ASYNC_RESULT = record
    dwResult: DWORD;
    dwError: DWORD;
  end;


  pREQUEST_CONTEXT = ^REQUEST_CONTEXT;
  REQUEST_CONTEXT = record
    hWindow: HWND;                      
    hOpen: HINTERNET;                   //HINTERNET handle created by InternetOpen
  end;


  TOnStatusChangeEvent = procedure(Sender: TObject; StatusCode: Cardinal) of object;
  TOnCompleteEvent = procedure(Sender: TObject; Connected: Boolean) of object;
  TAccessType = (atDirectConnect, atPreConfig, atPreConfigWithNoProxy, atProxy);


  TZoCInetChecker = class(TComponent)
  private
    { Private declarations }
    FUrl: string;
    FAccessType: TAccessType;
    FProxy: string;
    FOnStart: TNotifyEvent;
    FOnStatusChange: TOnStatusChangeEvent;
    FOnComplete: TOnCompleteEvent;
    FBusy: Boolean;
    hOpenUrl, hOpen: HINTERNET;
    FUserAgent: string;
    FWindowHandle: HWnd;
    iscCallback: INTERNET_STATUS_CALLBACK;
    RC: REQUEST_CONTEXT;
    FAsynRequest: Boolean;
    procedure WndProc(var Msg: TMessage);
  protected
    { Protected declarations }
    procedure DoOnStatusChange(StatusCode: Cardinal); dynamic;
  public
    { Public declarations }
    property Busy: Boolean read FBusy write FBusy;
    function Execute: Boolean;
    constructor Create(AOwner: TComponent); override;
    destructor Destroy; override;
  published
    { Published declarations }
    property AccessType: TAccessType read FAccessType write FAccessType
      default atDirectConnect;
    property AsynRequest: Boolean read FAsynRequest write FAsynRequest
      default True;
    property UserAgent: string read FUserAgent write FUserAgent;
    property Proxy: string read FProxy write FProxy;
    property Url: string read FUrl write FUrl;
    property OnStart: TNotifyEvent read FOnStart write FOnStart;
    property OnStatusChange: TOnStatusChangeEvent read FOnStatusChange write
      FOnStatusChange;
    property OnComplete: TOnCompleteEvent read FOnComplete write FOnComplete;
  end;


procedure Register;
function StatusCode2StatusText(StatusCode: Cardinal): string;


implementation


procedure Register;
begin
  RegisterComponents('ZoC', [TZoCInetChecker]);
end;

静态页面:http://www.qqread.com/vbdotnet/g282664.html 更多文章 更多内容请看网络管理实用手册网络故障手册网络组网专题专题,或进入讨论组讨论。
收藏此文】【 】【打印】【关闭
相关图文阅读
频道图文推荐
健 康 咨 询
时 尚 咨 询
巧巧读书宗旨
相关专题
最新论坛文章
站内各频道最新更新文档
站内最新制作专题
热门关键字导读
Photoshop教 程照片处理 照片制作 PS快捷键 抠图
计 算 机 故 障XP系统修复
艺 术 与 设 计设计 流媒体 设计欣赏 边框
计 算 机 安 全ARP
站内频道文章精选
巧巧电脑频道编辑信箱  告诉我们您想看的专题或文章