我的程序将在以下环境中使用:
1.局域网中没有网关和域,不能连上Internet
2.所有计算机都没有自己指定IP,也没有计算机专门提供分配IP的服务
3.所有计算机都拒绝 ping
3.要求在计算机启动后,没有访问任何网络资源,也没有其他计算机来访问的前提下(操作系统自己访问网络,不受该限制)判断局域网是否连通.操作系统可以判断,我想程序也应该可以实现,操作系统应该提供了接口,只是我没有找到。希望高手指教.该贴也是
http://expert.csdn.net/Expert/topic/2599/2599214.xml?temp=.9102289
1.局域网中没有网关和域,不能连上Internet
2.所有计算机都没有自己指定IP,也没有计算机专门提供分配IP的服务
3.所有计算机都拒绝 ping
3.要求在计算机启动后,没有访问任何网络资源,也没有其他计算机来访问的前提下(操作系统自己访问网络,不受该限制)判断局域网是否连通.操作系统可以判断,我想程序也应该可以实现,操作系统应该提供了接口,只是我没有找到。希望高手指教.该贴也是
http://expert.csdn.net/Expert/topic/2599/2599214.xml?temp=.9102289
解决方案 »
- 关于DirectX的显示模式由16位升级至32位
- 如何对div赋值
- 新年了,散分 ,顺便谈谈一年来的工作经验。这贴年后接!
- 要崩溃了!关于OnCreate函数!!!
- GDI+ Image的初始化!
- 用Windows API函数建立windows程序,添加菜单,如何响应菜单消息?
- (高手请进,帮帮我吧)郁闷了我好几天的,连接点的问题,回调客户的时候数据传不过去?
- 请问用VC6 编写ActiveX控件时,如何利用已经存在的ActiveX控件
- 线程同步问题(关于Mutex)!
- 我能不能往一个listview 里的 SubItem 里加位图啊!如果能怎么加!!!用LVM_ 消息!
- 如何判断局域网是否连通?
- 请问有谁知道那些程序能在windows下看linux,unix的桌面。
BOOL CheckOffline()
{
DWORD ConnectState;
DWORD StateSize;
StateSize=sizeof(ConnectState);
BOOL result=false;
//检查当前的Internet设置是否可用
if(InternetQueryOption(NULL,INTERNET_OPTION_CONNECTED_STATE,&ConnectState,StateSize)
{
if(ConnectState & INTERNET_STATE_DISCONNECTED != 2)
{
//检查连接到internet了吗?
if InternetheckConnection('http://www.sohu,com/'1,0)
GetDlgItem(IDC_EDIT1)->SetDlgItemText(IDC_EDIT1,_T("Connected"));
else 'DisConnected'
result = true;
}
}
return result;
}
//检查Internet 的连接性
BOOL CMyGoodsDlg::CheckOnline()
{
DWORD ConnectState;
DWORD StateSize;
StateSize=sizeof(ConnectState);
BOOL result=false;
//检查当前的Internet设置是否可用
if(InternetQueryOption(NULL,INTERNET_OPTION_CONNECTED_STATE,&ConnectState,&StateSize))
{
if((ConnectState & INTERNET_STATE_DISCONNECTED) != 2)
{
//检查连接到internet了吗?
if (InternetCheckConnection("http://www.sohu.com/",1,0))
{
GetDlgItem(IDC_TESTALT)->SetDlgItemText(IDC_TESTALT,_T("Connected"));
result = true;
}
else GetDlgItem(IDC_TESTALT)->SetDlgItemText(IDC_TESTALT,_T("DisConnected"));
}
}
return result;
}
//是否上网 //INTERNET_CONNECTED_INFO
void CMyGoodsDlg::OnIsonline()
{ CheckOnline();
return ; DWORD flags; //上网方式
InternetGetConnectedState(&flags,0);
if( (flags & INTERNET_CONNECTION_MODEM) || (flags & INTERNET_CONNECTION_LAN) ||
(flags & INTERNET_CONNECTION_PROXY)) {
TCHAR bufferpath[_MAX_PATH];
PTCHAR pBuf;
pBuf=bufferpath;
GetSystemDirectory(pBuf,_MAX_PATH);
PTCHAR pPos=_tcsstr(pBuf,_T("System32"));
VERIFY((pPos-pBuf-1)>0);
bufferpath[pPos-pBuf-1]='\0';
_tcscat(pBuf,"\\Media\\Windows 登录音.wav");
// StrTrim(pBuf,_T("system32")); //这个需要:Shlwapi.h
CString cs=_T( "已上网");
//GetDlgItem(IDC_ISONLINE)->
SetDlgItemText(IDC_ISONLINE, cs);
sndPlaySound(pBuf,SND_SYNC);
}
else GetDlgItem(IDC_TESTALT)->SetWindowText(_T("未上网"));
}
//下面这段是MSDN的如何设置代理服务器信息
The following sample demonstrates how to set proxy information for a LAN connection.BOOL SetConnectionOptions()
{
INTERNET_PER_CONN_OPTION_LIST list;
BOOL bReturn;
DWORD dwBufSize = sizeof(list); // Fill out list struct.
list.dwSize = sizeof(list); // NULL == LAN, otherwise connectoid name.
list.pszConnection = NULL; // Set three options.
list.dwOptionCount = 3;
list.pOptions = new INTERNET_PER_CONN_OPTION[3]; // Make sure the memory was allocated.
if(NULL == list.pOptions)
{
// Return FALSE if the memory wasn't allocated.
return FALSE;
} // Set flags.
list.pOptions[0].dwOption = INTERNET_PER_CONN_FLAGS;
list.pOptions[0].Value.dwValue = PROXY_TYPE_DIRECT |
PROXY_TYPE_PROXY; // Set proxy name.
list.pOptions[1].dwOption = INTERNET_PER_CONN_PROXY_SERVER;
list.pOptions[1].Value.pszValue = "http://proxy:80"; // Set proxy override.
list.pOptions[2].dwOption = INTERNET_PER_CONN_PROXY_BYPASS;
list.pOptions[2].Value.pszValue = "local"; // Set the options on the connection.
bReturn = InternetSetOption(NULL,
INTERNET_OPTION_PER_CONNECTION_OPTION, &list, dwBufSize); // Free the allocated memory.
delete [] list.pOptions; return bReturn;
}
发送netbois命令就可以了
看看msdn就知道了
发信人: rain (夜猫子大王), 信区: SysInternals
标 题: Re: 请问实时发现网络down掉的原理?(转载)
发信站: 武汉白云黄鹤站 (2001年03月31日09:57:05 星期六), 转信实时检测网线被拔掉是需要网卡设备驱动程序支持的,
如果驱动程序不支持是无法实现的,NDIS4要求设备驱动程序
最好提供CheckForHangHandler回调函数。2000会每隔2秒钟
调用此函数。驱动程序在此函数中检查网卡连线状态,
如果发生了改变,即拔去了网线或接上了网线,
驱动程序就会调用NdisMIndicateStatus通知所有的上层NDIS协议驱动程序.
其中: NDIS_STATUS_MEDIA_DISCONNECT 指示网线被拔掉,
NDIS_STATUS_MEDIA_CONNECT 指示网线被接上
NDIS_STATUS_LINK_SPEED_CHANGE 指示网卡速度改变,10/100自适应网卡才有。
网卡一般都有 status register 指示当然的连线状态,
也有网卡是通过获得 led status 来知道当前的连线状态的,
即绿灯亮表示连线,灭表示没有。
有些网卡拔掉或接上网线时会产生中断,在中断处理程序中一般也
检测网络连线状态并调用NdisMIndicateStatus,这样连线状态
在2000中就实时反应出来了,否则会在2秒钟内,即NDIS调用CheckForHangHandler后。这个功能是微软在PC97规范中定义的,所以ndis3没有这个功能。
linux对这个没有要求,novell netware对这个有要求,其它的操作系统我也不清楚。