有没有哪位大虾知道MSN Messenger监控网络连线/断线的方法(50分)

  • 主题发起人 主题发起人 ePing
  • 开始时间 开始时间
E

ePing

Unregistered / Unconfirmed
GUEST, unregistred user!
一直以来觉得MSN判断网络是否连线/断线的速度之快让人吃惊,
基本上在2-3秒就能够反馈出来,而QQ就没有办法做到这点,而偶
最近也急需做一个类似于这样检测网络状况的方法,不知哪位仁兄
可以指点一二...
 
加上timer控件,不定时扫描,如果扫描时间设的过短,服务器会吃不消的,当然你有很多服务器会好一点
 
谢谢回复,偶最想知道的就是如何实现你上面说的扫描.....
 
用一个定时器,用下面的函数判断连线状态即可。
uses WinInet;

function InetOnline : Boolean;
begin
result := InternetCheckConnection('http://www.yahoo.com/', 1, 0) or
InternetCheckConnection('http://www.sina.com.cn/', 1, 0) or
InternetCheckConnection('http://www.microsoft.com/', 1, 0)
end;

把网址设成你要监视的网站最好
 
我想,应该短线后,会有一个广播信息的,接收该信息更好,但,查msdn,一时还没找到
 
本身的网卡如果断线好办,但如果不是LAN,网关有问题就不好办。
它有一个系统广播消息。
CSDN有一贴介绍的是说: Windows的提供了一套使用COM+接口的机制SENS(System Event Notification Services),不过具体怎么做还没能试过。

http://expert.csdn.net/expert/Topicview2.asp?id=2073376

procedure TForm1.AppMessage(var Msg: tagMSG;
var Handled: Boolean);
const
DBT_DEVNODES_CHANGED = $0007;
begin
if Msg.message = WM_DEVICECHANGE then
begin
Memo1.Lines.Add('WM_DeviceChange');
case Msg.wParam of
DBT_DEVNODES_CHANGED:
Memo1.Lines.Add('wParam: DBT_DEVNODES_CHANGED, lParam: ' + IntToStr(Msg.lParam));
end;
end;
end;
 
ping 呵呵
 
var
dw: DWORD;
begin
hEvent := CreateEvent(nil, TRUE, FALSE, 'RasNotification');
if hEvent = 0 then
ShowMessage('Error in CreateEvent')
else begin
dw := RasConnectionNotification(INVALID_HANDLE_VALUE,
hEvent, RASCN_Disconnection+RASCN_Connection);
if dw <> 0 then
ShowMessage('Error in RasConnectionNotification')
else begin
while true do
begin
if WaitForSingleObject(hEvent, INFINITE) = WAIT_OBJECT_0 then
begin
ShowMessage('检测到网络连接变化');
//***********************************************
//用RasGetConnectStatus得到具体是什么变化
//***********************************************
ResetEvent(hEvent);
end;
end;
end;
end;
Result := 0;
end;
 
楼上哥们可否解释详细点
 
看MSDN中RasConnectionNotification的帮助吧,说的比较清楚:)
http://msdn.microsoft.com/library/default.asp?url=/library/en-us/rras/rras/rasconnectionnotification.asp
 
Use Rasapi32.lib

好像需要这个支持也,不是每台机器都有这个玩意的啊??
 
Windows内置的,Rasapi32.dll,可以去http://www.delphi-jedi.org/下载RAS的Delphi版声明
 
谢谢pihome的回复, 关于RAS的一套东西偶都有,能够确定Rasapi32.dll是系统自带

的就好,谢谢
 
pihome 兄:
刚刚在一本书上瞅到:
在这里需要强调的是由于RASAPI32.DLL(Win32 RAS API)并不是默认安装的函数库,
而是在安装拨号网络相关程序后才会存在...
这种情况最易在Windows NT中产生, 因为一般在安装Windows NT时(尤其是以Ethernet
卡连上网络的主机),都会忽略安装拨号网络...
 
的确如此,不过据说MSN检测的办法和上面所说的是差不多的,Raspai32.dll的问题,2000以上的机器不用考虑,肯定是有的[:)]
可能还有其他方法,我就不知道了[:)]
 
多人接受答案了。
 
后退
顶部