aardio 官方社区

 找回密码
 注册会员

QQ登录

只需一步,快速开始

搜索
查看: 7059|回复: 4

VB6的一个网络类怎么转成aardio

[复制链接]

2

主题

5

回帖

53

积分

一级会员

积分
53
发表于 2013-1-22 15:06:45 | 显示全部楼层 |阅读模式
本帖最后由 hst 于 2013-1-22 15:08 编辑

这是我找到的一个VB6的类,想将它转成aardio代码来实现,直接使用aardio的代码转换工具得到的结果是不可运行的。

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 Boolean
    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
        GetNetConnectString = True
    Else
        Msg = "当前未与因特网相连"
        GetNetConnectString = False
    End If

End Function

9

主题

443

回帖

2546

积分

版主

积分
2546
发表于 2013-1-22 15:28:27 | 显示全部楼层
两种不同的语言不可能自动转换完整程序的,自动转换以后要手工整理。

如果是拔号,用 inet.ras支持库就可以了。

  1. import inet.ras;
  2. import console;

  3. var ras,lan = inet.ras.isAlive()
  4. if( ras ){
  5.         console.log("拔号连接")
  6. }
  7. elseif(lan){
  8.         console.log("局域网连接")
  9. }

  10. //拔号,可以不指定任何参数自动获取
  11. conn,msg = inet.ras.dial(
  12.         entryName =  "拔号连接名";
  13.         user =  "拔号用户名";
  14.         password = "拔号密码"
  15. )
复制代码

2

主题

5

回帖

53

积分

一级会员

积分
53
 楼主| 发表于 2013-1-22 15:57:34 | 显示全部楼层
本帖最后由 hst 于 2013-1-22 16:14 编辑

谢谢,马上去看了一下 inet.ras 的源码,不过对于里面的
status(__/*拔号连接*/) = 返回拔号连接状态
RasEnumConnections() = 获取当前拔号连接
试了一下还是摸不着头脑,请问能给出一个例子吗?

import inet.ras;

import console;

var ras,lan = inet.ras.isAlive()
if (ras) console.log("拨号连接");
if (lan) console.log("局域网连接");

tab = inet.ras.getEntries();
min,max = table.range(tab);
console.log('min='++min++' max='++max);

for i,v in tab {
        console.log('拨号连接:' ++ v.entryName);
}

console.pause() //按任意键继续
;//关闭控制台

19

主题

294

回帖

1945

积分

新手入门

积分
1945
发表于 2013-1-22 19:02:29 | 显示全部楼层
RasEnumConnections() 可以获取当前连接的句柄,有了这个句柄,就可以用status函数判断连接状态,也可以用hangUp挂断连接。

19

主题

294

回帖

1945

积分

新手入门

积分
1945
发表于 2013-1-22 19:04:45 | 显示全部楼层
你帖的vb的这些函数inet.ras大部分都封装了,没有的也很容易封装
您需要登录后才可以回帖 登录 | 注册会员

本版积分规则

手机版|未经许可严禁引用或转载本站文章|aardio.com|aardio 官方社区 ( 皖ICP备09012014号 )

GMT+8, 2025-2-13 17:03 , Processed in 0.077578 second(s), 22 queries .

Powered by Discuz! X3.5

Copyright © 2001-2024 Tencent Cloud.

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