找回密码
 加入
搜索
查看: 3120|回复: 8

请教如何判断网络是否断线?

  [复制链接]
发表于 2009-6-1 09:32:04 | 显示全部楼层 |阅读模式
因为我所用的网络是一个公司的内部网,需要认证才可以上互联网,但是这个认证有时不是很稳定,时不时掉线,我想请教一下如何在AUTOIT里判断网络是否断线? 谢谢!
发表于 2009-6-1 11:17:56 | 显示全部楼层
给个思路,可以放到一个循环定时检测
#include <inet.au3>
dim $var
        $var = Ping ("www.baidu.com",250)
        If $var Then
                        TrayTip('',"联网",5,1)
                        Sleep(5000)

        Else
                TrayTip('',"断网",5,1)
                Sleep(5000)
        
        EndIf
 楼主| 发表于 2009-6-1 11:33:01 | 显示全部楼层
在网上找到一个VB写的程序,不过小弟对VB一窍不通,不知道有没有哪位高手可以改用AUTOIT重写一下,,谢谢!

拨号、断网、枚举连接名称,
判断是否在线、连接方式。   
  http://blog.csdn.net/Modest/archive/2006/10/20/1342633.aspx   
   
  Option   Explicit   
  '拨号/断网   
  Private   Declare   Function   InternetDial   Lib   "wininet.dll"   (ByVal   hwndParent   As   Long,   ByVal   lpszConnectoid   As   String,   ByVal   dwFlags   As   Long,   lpdwConnection   As   Long,   ByVal   dwReserved   As   Long)   As   Long   
  Private   Declare   Function   InternetHangUp   Lib   "wininet.dll"   (ByVal   dwConnection   As   Long,   ByVal   dwReserved   As   Long)   As   Long   
  Private   Declare   Function   InternetAutodial   Lib   "wininet.dll"   (ByVal   dwFlags   As   Long,   ByVal   dwReserved   As   Long)   As   Long   
  Private   Declare   Function   InternetAutodialHangup   Lib   "wininet.dll"   (ByVal   dwReserved   As   Long)   As   Long   
  Private   Const   INTERNET_DIALSTATE_DISCONNECTED   =   1   
  Private   Const   INTERNET_AUTODIAL_FORCE_ONLINE   =   1   
  Private   Const   INTERNET_AUTODIAL_FORCE_UNATTENDED   =   2   
  Private   Const   INTERNET_DIAL_UNATTENDED   =   &H8000   
  Private   Handle   As   Long   
   
  '网络状态   
  Private   Declare   Function   InternetGetConnectedStateEx   Lib   "wininet.dll"   Alias   "InternetGetConnectedStateExA"   (ByRef   lpdwFlags   As   Long,   ByVal   lpszConnectionName   As   String,   ByVal   dwNameLen   As   Long,   ByVal   dwReserved   As   Long)   As   Long   
  Private   Declare   Function   InternetGetConnectedState   Lib   "wininet.dll"   (ByRef   dwFlags   As   Long,   ByVal   dwReserved   As   Long)   As   Long   
  Private   Const   INTERNET_CONNECTION_MODEM   As   Long   =   &H1             '本系统使用调制解调器与因特网相连   
  Private   Const   INTERNET_CONNECTION_LAN   As   Long   =   &H2                 '本系统通过LAN与因特网相连   
  Private   Const   INTERNET_CONNECTION_PROXY   As   Long   =   &H4             '本系统使用proxy代理服务器与因特网相连   
  Private   Const   INTERNET_CONNECTION_MODEM_BUSY   As   Long   =   &H8   '未使用   
  Private   Const   INTERNET_RAS_INSTALLED   As   Long   =   &H10   
  Private   Const   INTERNET_CONNECTION_OFFLINE   As   Long   =   &H20   
  Private   Const   INTERNET_CONNECTION_CONFIGURED   As   Long   =   &H40   
   
  '枚举网络连接   
  Private   Const   RAS_MaxDeviceType   =   16   
  Private   Const   RAS95_MaxDeviceName   =   128   
  Private   Const   RAS95_MaxEntryName   =   256   
  Private   Type   RASCONN95   
          dwSize   As   Long   
          hRasConn   As   Long   
          szEntryName(RAS95_MaxEntryName)   As   Byte   
          szDeviceType(RAS_MaxDeviceType)   As   Byte   
          szDeviceName(RAS95_MaxDeviceName)   As   Byte   
  End   Type   
  Private   Type   RASENTRYNAME95   
          dwSize   As   Long   
          szEntryName(RAS95_MaxEntryName)   As   Byte   
  End   Type   
  Private   Declare   Function   RasEnumConnections   Lib   "rasapi32.dll"   Alias   "RasEnumConnectionsA"   (lprasconn   As   Any,   lpcb   As   Long,   lpcConnections   As   Long)   As   Long   
  Private   Declare   Function   RasEnumEntries   Lib   "rasapi32.dll"   Alias   "RasEnumEntriesA"   (ByVal   reserved   As   String,   ByVal   lpszPhonebook   As   String,   lprasentryname   As   Any,   lpcb   As   Long,   lpcEntries   As   Long)   As   Long   
  Private   Declare   Function   RasHangUp   Lib   "rasapi32.dll"   Alias   "RasHangUpA"   (ByVal   hRasConn   As   Long)   As   Long   
   
  '拨号   
  Public   Function   DialUp(LinkName   As   String)   As   Boolean   
          InternetDial   0,   LinkName,   INTERNET_AUTODIAL_FORCE_UNATTENDED,   Handle,   0   
          DialUp   =   (Handle   <>   0)   
  End   Function   
  '断网   
  Public   Sub   HangUp()   
          If   Handle   <>   0   Then   
                  InternetHangUp   Handle,   0   
                  Handle   =   0   
          End   If   
  End   Sub   
   
   
  '枚举网络连接   
  Public   Sub   EnumConnectName(Value()   As   String)   
          Dim   s   As   Long,   l   As   Long,   ln   As   Long,   a   As   String   
          ReDim   r(255)   As   RASENTRYNAME95   
   
          r(0).dwSize   =   264   
          s   =   256   *   r(0).dwSize   
          l   =   RasEnumEntries(vbNullString,   vbNullString,   r(0),   s,   ln)   
          ReDim   Value(ln   -   1)   
          For   l   =   0   To   ln   -   1   
                  a   =   StrConv(r(l).szEntryName(),   vbUnicode)   
                  Value(l)   =   Left$(a$,   InStr(a$,   Chr$(0))   -   1)   
          Next   
  End   Sub   
   
  '判断是否在线   
  Public   Function   Online()   As   Boolean   
          Online   =   InternetGetConnectedState(0&,   0&)   
  End   Function   
  '判断是否在线并返回连接方式   
  Public   Property   Get   OnlineOfLinkName(LinkName   As   String)   As   Boolean   
          LinkName   =   Space$(128)   
          OnlineOfLinkName   =   InternetGetConnectedStateEx(0,   LinkName,   128,   0&)   
  End   Property   
   
  '如果是通过LAN的连接,则返回True   
  Public   Function   IsNetConnectViaLAN()   As   Boolean   
          Dim   dwFlags   As   Long   
          Call   InternetGetConnectedState(dwFlags,   0&)   
          IsNetConnectViaLAN   =   dwFlags   And   INTERNET_CONNECTION_LAN   
  End   Function   
  '如果是通过调制解调器的连接,则返回True   
  Public   Function   IsNetConnectViaModem()   As   Boolean   
          Dim   dwFlags   As   Long   
          Call   InternetGetConnectedState(dwFlags,   0&)   
          IsNetConnectViaModem   =   dwFlags   And   INTERNET_CONNECTION_MODEM   
  End   Function   
  '如果是通过Proxy代理服务器的连接,则返回True   
  Public   Function   IsNetConnectViaProxy()   As   Boolean   
          Dim   dwFlags   As   Long   
          Call   InternetGetConnectedState(dwFlags,   0&)   
          IsNetConnectViaProxy   =   dwFlags   And   INTERNET_CONNECTION_PROXY   
  End   Function   
  '如果已安装了RAS,则返回True   
  Public   Function   IsNetRASInstalled()   As   Boolean   
          Dim   dwFlags   As   Long   
          Call   InternetGetConnectedState(dwFlags,   0&)   
          IsNetRASInstalled   =   dwFlags   And   INTERNET_RAS_INSTALLED   
  End   Function   
  '返回当前网络状态信息字符串   
  Public   Function   GetNetConnectString()   As   String   
          Dim   dwFlags   As   Long   
          Dim   msg   As   String   
          If   InternetGetConnectedState(dwFlags,   0&)   Then   
                  If   dwFlags   And   INTERNET_CONNECTION_CONFIGURED   Then   
                          msg   =   msg   &   "系统配置了网络连接"   &   vbCrLf   
                  End   If   
                  If   dwFlags   And   INTERNET_CONNECTION_LAN   Then   
                          msg   =   msg   &   "系统通过局域网与因特网相连接"   
                  End   If   
                  If   dwFlags   And   INTERNET_CONNECTION_PROXY   Then   
                          msg   =   msg   &   "并使用了Proxy代理服务"   
                  Else:   msg   =   msg   &   "."   
                  End   If   
                  If   dwFlags   And   INTERNET_CONNECTION_MODEM   Then   
                          msg   =   msg   &   "系统使用调制解调器与因特网相连接"   
                  End   If   
                  If   dwFlags   And   INTERNET_CONNECTION_OFFLINE   Then   
                          msg   =   msg   &   "系统当前处于离线状态"   
                  End   If   
                  If   dwFlags   And   INTERNET_CONNECTION_MODEM_BUSY   Then   
                          msg   =   msg   &   "系统的调制解调器未连接到因特网"   
                  End   If   
                  If   dwFlags   And   INTERNET_RAS_INSTALLED   Then   
                          msg   =   msg   &   "本系统安装了远程访问服务"   
                  End   If   
          Else   
                  msg   =   "当前未与因特网相连"   
          End   If   
          GetNetConnectString   =   msg   
  End   Function
发表于 2009-6-1 12:13:12 | 显示全部楼层
就你提问的问题而言
哪用的上这么复杂啊
au3就是解放双手
这样搞下不是将简单的事情变复杂了
发表于 2009-6-1 14:32:53 | 显示全部楼层
2楼的代码是拨号用的吧?公司内部网的电脑用拨号?
发表于 2010-1-9 17:34:50 | 显示全部楼层
2楼的代码不错!!精典!!!可能判断当前网络是否连通
发表于 2010-1-11 12:49:36 | 显示全部楼层
用AdlibRegister调用检测!
发表于 2010-1-11 12:55:11 | 显示全部楼层
发表于 2010-1-11 14:26:04 | 显示全部楼层
用While ... WEnd/For ... Next / Do...Until/ AdlibRegister,如此循环的方式检测是否断线,显然在1000次检测中,最少有999次是多余的,只有1次检测是有意义的,程序执行过程中,总是将效率与资源浪费在那999次毫无意义的判断中,不必说现在的内存与CPU性能有多好。
但为了确保程序能够实时感知到线路状态,不得不采用循环检测的方式?
您需要登录后才可以回帖 登录 | 加入

本版积分规则

QQ|手机版|小黑屋|AUTOIT CN ( 鲁ICP备19019924号-1 )谷歌 百度

GMT+8, 2024-9-22 14:32 , Processed in 0.080324 second(s), 21 queries .

Powered by Discuz! X3.5 Licensed

© 2001-2024 Discuz! Team.

快速回复 返回顶部 返回列表