VB能通过API免控件连网吗(不是网页控件,是网络控件)?

作者&投稿:夕萱 (若有异议请与网页底部的电邮联系)
VB怎样不用控件,只调用API读取网页?~

用Socket控件自己抓取通讯进程

webbrowser是IE自带的,也就是说它是微软的亲生子,所以用webbrowser编的程序拿到其他windows系统的电脑中也可以轻松运行,完全无压力。你觉得不好用那是因为你还没有真正掌握。如果改用其他控件,那么首先遇到的就是兼容性问题,你的程序如果要分发到其他平台使用,程序的体积就要加大了;其次,换了别的控件就一定好用吗?不见得啊,webbrowser其实很容易用的,主要问题是它有一些bug,通过补丁可以解决的。

用到资源文件就是为了解决一般电脑不带所需控件的问题,如果你想用API的话可以搜索一下API相关资料。这里可以供你参考一下。 WinSockAPI的使用 1.WSAStartup 函数 为了在你的应用程序当中调用任何一个Winsock API 函数,首先第一件事情你就是必须通过WSAStartup函数完成对Winsock 服务的初始化,因此需要调用WSAStartup函数。 Declare Function WSAStartup Lib "ws2_32.dll" _ (ByVal wVersionRequired As Long, lpWSAData As WSAData) As Long 这个函数有两个参数: wVersionRequired 和 lpWSAData。wVersionRequired 参数定义Windows Sockets 提供能使用的最高版本,它的高位字节定义的是次版本号,低位字节定义的是主版本号。下面的2个Winsock版本在VB中使用的例子: 初始化1.1版本 lngRetVal = WSAStartup(&H101, udtWinsockData) 初始化2.2版本 lngRetVal = WSAStartup(&H202, udtWinsockData) 第二个参数是WSADATA 的数据结构 ,它是接收Windows Sockets 执行时的数据。 Type WSAData wVersion As Integer wHighVersion As Integer szDescription As String * WSADESCRIPTION_LEN szSystemStatus As String * WSASYS_STATUS_LEN iMaxSockets As Integer iMaxUdpDg As Integer lpVendorInfo As Long End Type 数据成员的描述在下表中: Field 描述 wVersion Windows Sockets 版本信息。 wHighVersion 通过加载库文件得到的最高的支持Winsock 的版本, 它通常和wVersion值相同。 szDescription Windows Sockets 执行时的详细描述 szSystemStatus 包含了相关的状态和配置的信息 iMaxSockets 表示同时打开的socket最大数,为0表示没有限制。 iMaxUdpDg 表示同时打开的数据报最大数,为0表示没有限制。 lpVendorInfo 厂商指定信息预留 在Winsock的1.1和2.2版本中没有lpVendorInfo的返回值。因为winsock 2支持多个传输协议,所以iMaxSockets 和iMaxUdpDg只能在仅支持TCP/TP的winsock1.1中使用。为了在Winsock 2中获得这些值,你可以使用WSAEnumProtocols 函数。 如果成功或者返回一个错误代码,则函数返回 0。 错误代码 含义 WSASYSNOTREADY 指出网络没有为传输准备好。 WSAVERNOTSUPPORTED 当前的WinSock实现不支持应用程序指定的Windows Sockets规范版本 WSAEINPROGRESS 一个阻塞WinSock调用正在进行 WSAEPROCLIM 请求的协议没有在系统中配置或没有支持它的实现存在。 WSAEFAULT lpWSAData 不是有效的指针 2.WSACleanup 函数 每次调用了WSAStartup函数,你都需要调用WSACleanup函数,通知系统来卸载库文件及清除已分配的资源,这个函数十分简单,没有任何参数: Declare Function WSACleanup Lib "ws2_32.dll" () As Long 3.建立Socket函数 Declare Function socket Lib "ws2_32.dll" (ByVal af As Long, _ ByVal s_type As Long, ByVal Protocol As Long) As Long 函数有3个参数定义建立何种socket,三个参数分别是: Argument Description Enum Type af Address family specification. AddressFamily s_type Type specification for the new socket. SocketType Protocol Protocol to be used with the socket SocketProtocol that is specific to the indicated address family. AddressFamily: AF_UNSPEC = 0 '/* unspecified */ AF_UNIX = 1 '/* local to host (pipes, portals) */ AF_INET = 2 '/* internetwork: UDP, TCP, etc. */ AF_IMPLINK = 3 '/* arpanet imp addresses */ AF_PUP = 4 '/* pup protocols: e.g. BSP */ AF_CHAOS = 5 '/* mit CHAOS protocols */ AF_NS = 6 '/* XEROX NS protocols */ AF_IPX = AF_NS '/* IPX protocols: IPX, SPX, etc. */ AF_ISO = 7 '/* ISO protocols */ AF_OSI = AF_ISO '/* OSI is ISO */ AF_ECMA = 8 '/* european computer manufacturers */ AF_DATAKIT = 9 '/* datakit protocols */ AF_CCITT = 10 '/* CCITT protocols, X.25 etc */ AF_SNA = 11 '/* IBM SNA */ AF_DECnet = 12 '/* DECnet */ AF_DLI = 13 '/* Direct data link interface */ AF_LAT = 14 '/* LAT */ AF_HYLINK = 15 '/* NSC Hyperchannel */ AF_APPLETALK = 16 '/* AppleTalk */ AF_NETBIOS = 17 '/* NetBios-style addresses */ AF_VOICEVIEW = 18 '/* VoiceView */ AF_FIREFOX = 19 '/* Protocols from Firefox */ AF_UNKNOWN1 = 20 '/* Somebody is using this! */ AF_BAN = 21 '/* Banyan */ AF_ATM = 22 '/* Native ATM Services */ AF_INET6 = 23 '/* Internetwork Version 6 */ AF_CLUSTER = 24 '/* Microsoft Wolfpack */ AF_12844 = 25 '/* IEEE 1284.4 WG AF */ AF_MAX = 26 Socket types: SOCK_STREAM = 1 ' /* stream socket */ SOCK_DGRAM = 2 ' /* datagram socket */ SOCK_RAW = 3 ' /* raw-protocol interface */ SOCK_RDM = 4 ' /* reliably-delivered message */ SOCK_SEQPACKET = 5 ' /* sequenced packet stream */ Protocols: IPPROTO_IP = 0 '/* dummy for IP */ IPPROTO_ICMP = 1 '/* control message protocol */ IPPROTO_IGMP = 2 '/* internet group management protocol */ IPPROTO_GGP = 3 '/* gateway^2 (deprecated) */ IPPROTO_TCP = 6 '/* tcp */ IPPROTO_PUP = 12 '/* pup */ IPPROTO_UDP = 17 '/* user datagram protocol */ IPPROTO_IDP = 22 '/* xns idp */ IPPROTO_ND = 77 '/* UNOFFICIAL net disk proto */ IPPROTO_RAW = 255 '/* raw IP packet */ IPPROTO_MAX = 256 该函数可以建立使用特定协议的网络套接字,例如对于UDP协议可以这样写: s=socket(AF_INET, SOCK_DGRAM, IPPROTO_UDP) s=socket(AF_INET, SOCK_STREAM, IPPROTO_TCP) 4.关闭Socket函数 Declare Function closesocket Lib "ws2_32.dll" (ByVal s As Long) As Long 函数有一个参数为建立socket时的Handle 5.连接函数 Declare Function connect Lib "ws2_32.dll" (ByVal s As Long, _ ByRef name As sockaddr_in, _ ByVal namelen As Long) As Long 参数 s 连接的socket句柄。 name 建立连接的地址。 namelen 连接地址的长度。 返回值 成功时返回0。否则返回SOCKET_ERROR以及一个对应的错误号 Err.LastDllError。 显然在调用这个函数时我们需要知道socket句柄,将连接的电脑的端口号和主机名称(或主机IP地址)。我们知道Winsock 控件的Connect方法依靠两个变量:RemoteHost 和RemotePort。此方法不需要socket句柄,因其已经被封装在COM对象中。你也许认为connect函数应该也接受相同的变量设置,然而,事实并非如此。connect函数的主机地址和端口号的传送是依靠 sockaddr_in 结构。 Public Type sockaddr_in sin_family As Integer sin_port As Integer sin_addr As Long sin_zero(1 To 8) As Byte End Type 6.套接字帮定函数 Declare Function bind Lib "ws2_32.dll" (ByVal s As Long, _ ByRef name As sockaddr_in, _ ByRef namelen As Long) As Long s是使用Socket函数创建好的套接字,name指向描述通信对象的结构体的指针,namelen是该结构的长度。该结 构体中的分量包括: IP地址:对应name.sin_addr.s_addr 端口号:对应name.sin_port 端口号用于表示同一台计算机上不同的进程(即应用程序),其分配方法有两种: 第一种分配方法是,进程让系统为套接字自动分配一端口号,这只要在调用bind前将端口号指定为0即可。由系统自动分配的端口号位于1024~5000之间,而1~1023之间的任一TCP或UDP端口都是保留的,系统不允许任一进程使用保留端口,除非其有效用户ID是零(即超级用户)。 第二种分配方法是,进程为套接字指定一特定端口。这对于需要给套接字分配一众所周知的端口的服务器是很有用的。指定范围在1024~65536之间。 地址类型:对应name.sin_family,一般都赋成AF_INET,表示是internet地址(即IP 地址)。IP地址通常使用点分表示法表示,但它事实上一个32位的长整数,这两者之间可通过inet_addr()函数转换。 7.套接字监听函数 Declare Function listen Lib "ws2_32.dll" (ByVal s As Long, ByVal backlog As Long) As Long listen函数用来设定Socket为监听状态,这种状态表明Socket准备被连接了。注意,此函数一般在服务程序上使用,其中s是使用Socket函数创建好的套接字,backlog参数用于设定等待连接的客户端数。


静宁县13275322383: 如何在vb中用api函数代替winsock控件建立网络连接 -
称新欣美: 利用 WinSock 控件可以与远程 计算 机建立连接,并通过用户数据文报协议 (UDP)或者传输控制协议 (TCP)进行数据交换,并分别给出Winsock控件使用 UDP 协议和TCP协议进行远程计算机连接. API函数是指,操作系统除了协调应用程...

静宁县13275322383: VB 不加载控件,读取网页数据的方法 -
称新欣美: '获取源码过程,调用 GetText(网址即可),给分吧 Function GetText(ByVal url) As String Dim obj Set obj = CreateObject("Microsoft.XMLHTTP") obj.Open "GET", url, False obj.Send GetText = StrConv(obj.responseBody, vbUnicode) '假如获取的网页源码中的汉字为乱码的话用下面这个 'GetText = obj.responseText End Function'例如 MsgBox GetText("www.baidu.com")

静宁县13275322383: vb的hook问题 -
称新欣美: 不需要控件,调用API 就可以实现,但是API不是VB写的,是C写的.也算不是自己完成的. 以下是调用API的声明和函数的功能 调用的API的申明: 写入Module中 Declare Function SetWindowsHookEx Lib "user32" Alias "...

静宁县13275322383: 在VB中怎么用API进行简单的网络编程给个例子最好 -
称新欣美: 网络编程,建议使用inet控件、webbrowser控件、winsock控件 inet控件和webbrowser控件适合编写对互联网网站进行访问和操作的程序 winsock控件适合编写tcp或upd协议的远程服务器--客户端程序

静宁县13275322383: VB中利用控件串口通讯和API函数串口通讯哪个更好 -
称新欣美: 控件就是使用方便,但功能不能调整 API函数可以调整细微的参数 控件也是API做的 只不过把API封装了 一楼说得很对.看你要做什么好,如控件能满足你的要求就用控件反之调用API.当然用API对你的编码程水平有助提高.

静宁县13275322383: vb 怎么实现多线程 -
称新欣美: Vb.net简单,vb得用API实现而且相当麻烦和不稳定 .不稳定是vb6自身控件不是线程安全的,所以多线程统统不能用.所以界面不能用控件而得用API实现,这样vb多线程才稳定,但是那样可视化开发的优势全无. 建议用Vb.net线程简单,只要 Dim aaa As New Thread (线程函数代码名称) aaa.Start 即可启动线程了

静宁县13275322383: vb和vb.net是一样的吗?有什么不同? -
称新欣美: 1、从OOP概念上讲,VB不是一个真正的面对对象的语言,他不支持继承等一些面对对象的特性,而VB.net是一个面对对象的语言,支持这些特性2、VB和VB.net都可以用来网络编程的,这点可以肯定,两者都有这个功能 VB是通过控件进行网...

静宁县13275322383: VB能联网么?
称新欣美: 楼主您好 VB技术部 为您解答 VB 是一个简单功能强大的编译软件 若是精简版 可以使用控件 或函数来连通 建议使用 microsoft internet controls 点开VB 按ctrl+t 快捷键 出来部件 然后往下拉 找到 microsoft internet controls 勾上点确定 在最左边会出来一个小地球 那各就是了

静宁县13275322383: vba 或vb有没有纯api的socket教程啊,别提控件了,脚本语言我不可能每台机 -
称新欣美: 你说的是脚本吗?那就是VBS(或者VBScript)咯?脚本是解析型的语言,它不支持控件,也不支持大部分的API(尤其是与界面、交互有关的API),此外它还受浏览器的安全机制所控制(涉及到系统安全的敏感操作会弹出提示框或者直接屏蔽...

静宁县13275322383: vb,可不可以通过一个什么api函数,或什么方法,获取当前系统有的或已连接的声音播放设备,然后可以 -
称新欣美: 网上直接下源程序就有. VB声音处理演示程序,包括播放WAV文件、获取WAV文件信息、播放背景音乐、检测系统是否支持声音等功能,多媒体编程需要这些技巧.

本站内容来自于网友发表,不代表本站立场,仅表示其个人看法,不对其真实性、正确性、有效性作任何的担保
相关事宜请发邮件给我们
© 星空见康网