如何用VB6拦截连接和断开网络的消息?

sluck1988 2008-10-18 12:42:17
我想在VB6中用API拦截连接网络和断开网络的Windows消息,但不知道该如何操作。我没接触过Windows消息拦截,请高手帮帮忙,有源码最好~
...全文
336 12 打赏 收藏 转发到动态 举报
写回复
用AI写文章
12 条回复
切换为时间正序
请发表友善的回复…
发表回复
lsftest 2008-10-19
  • 打赏
  • 举报
回复
你添加两个按钮,一个监视连接,一个监视丢失连接,然后分别把我上面的两段代码分别复制到对应按钮的点击事件,点击按钮后就会监视对应事件的发生。至于切换和终止监视可以通过用一些全局变量来标识状态来实现。
vansoft 2008-10-19
  • 打赏
  • 举报
回复
断开或连接有系统消息的,HOOT到就OK了。
sluck1988 2008-10-19
  • 打赏
  • 举报
回复
感谢lsftest,我明白了。这个方法基本思路应该和我说的用Timer+API是相似的,都是不断扫描更新状态。如果让程序变成被动的,也就是在网络连接或者断开时主动通知我的程序作出反应该更好,但一直没找到实现方法,这个应该很困难吧?
lsftest 2008-10-19
  • 打赏
  • 举报
回复
不能响应可以在循环里加几个doevents,至于wmi这庞然大物的使用,可不是三两句就可以说完的,有兴趣的话可以到:
http://msdn.microsoft.com/zh-cn/library/ms974579.aspx
去看看。
sluck1988 2008-10-19
  • 打赏
  • 举报
回复
还有,我不太懂这段代码,能解释一下么?谢谢!
sluck1988 2008-10-19
  • 打赏
  • 举报
回复
您提出的方法我试过了

一旦开始执行代码程序就不能响应了

这两种方法哪个占用资源更少呢?
sluck1988 2008-10-19
  • 打赏
  • 举报
回复
楼上的朋友,感谢您的回答,但我对WMI不太了解,麻烦您给讲一下,具体又该怎么用

我找到了一个检测网络是否连通的API,看您的方法中是用循环解决问题的,而我在下面的方法中是使用了Timer控件,不知道这两种方法哪种更好(高效,占用资源少)


Private Const INTERNET_CONNECTION_CONFIGURED = &H40
Private Const INTERNET_CONNECTION_LAN = &H2
Private Const INTERNET_CONNECTION_MODEM = &H1
Private Const INTERNET_CONNECTION_OFFLINE = &H20
Private Const INTERNET_CONNECTION_PROXY = &H4
Private Const INTERNET_RAS_INSTALLED = &H10
Private Declare Function InternetGetConnectedState Lib "wininet.dll" (ByRef lpdwFlags As Long, ByVal dwReserved As Long) As Long

Private Sub Timer1_Timer()
Dim Ret As Long
InternetGetConnectedState Ret, 0&
'show the result
If (Ret And INTERNET_CONNECTION_CONFIGURED) = INTERNET_CONNECTION_CONFIGURED Then Label1.Caption = Else Label1.Caption = "您没有连接到Internet!"
If (Ret And INTERNET_CONNECTION_LAN) = INTERNET_CONNECTION_LAN Then Label2.Caption = "您正在通过局域网连接至Internet"
If (Ret And INTERNET_CONNECTION_MODEM) = INTERNET_CONNECTION_MODEM Then Label2.Caption = "您正在通过调制解调器连接至Internet"
If (Ret And INTERNET_CONNECTION_PROXY) = INTERNET_CONNECTION_PROXY Then Label2.Caption = "您正在通过代理服务器连接至Internet"
If (Ret And INTERNET_RAS_INSTALLED) = INTERNET_RAS_INSTALLED Then Label3.Caption = "远程访问服务已开启" Else Label3.Caption = "远程访问服务没有开启!"
End Sub


"您的网络连接正常!" 意味着计算机已经连接到了Internet,但是这个方法要用到Timer,似乎有点占用资源

再次感谢楼上的朋友

东方之珠 2008-10-18
  • 打赏
  • 举报
回复
vb判断网络连接 http://zhidao.baidu.com/question/51389111.html
东方之珠 2008-10-18
  • 打赏
  • 举报
回复
VB断开网络连接!API源码
http://www.upschool.com.cn/edu/1325/2007/29/10du272060_1.shtml
lsftest 2008-10-18
  • 打赏
  • 举报
回复
'使用wmi的MSNdis_StatusMediaDisconnect类监视网络连接丢失:
strComputer = "."

Set objWMIService = GetObject("winmgmts:\\" & strComputer & "\root\wmi")
Set colMonitoredEvents = objWMIService.ExecNotificationQuery _
("Select * from MSNdis_StatusMediaDisconnect")

Do While True
Set strLatestEvent = colMonitoredEvents.NextEvent
debug.print "A network connection has been lost:"
debug.print strLatestEvent.InstanceName, Now
debug.print
Loop

lsftest 2008-10-18
  • 打赏
  • 举报
回复
'要拦截还是要监视?如果是想在网络连通时执行某一操作,建议监视。
'使用wmi的MSNdis_StatusMediaConnect类监视连接网络动作:
strComputer = "."

Set objWMIService = GetObject("winmgmts:\\" & strComputer & "\root\wmi")
Set colMonitoredEvents = objWMIService.ExecNotificationQuery _
("Select * from MSNdis_StatusMediaConnect")

Do While True
Set strLatestEvent = colMonitoredEvents.NextEvent
debug.print "A network connection has been made:"
debug.print strLatestEvent.InstanceName, Now
debug.print
Loop

sluck1988 2008-10-18
  • 打赏
  • 举报
回复
楼上的没理解我的意思啊,我是想在网络连通时执行某一操作

1,488

社区成员

发帖
与我相关
我的任务
社区描述
VB API
社区管理员
  • API
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧