用BCB編程完成掛斷撥號(hào)網(wǎng)絡(luò)技巧
發(fā)表時(shí)間:2024-06-20 來(lái)源:明輝站整理相關(guān)軟件相關(guān)文章人氣:
[摘要]河北 張利輝 有一次在用BCB開(kāi)發(fā)程序的過(guò)程時(shí),客戶要求實(shí)現(xiàn)在結(jié)束Internet事務(wù)(傳輸文件等)后自動(dòng)掛斷撥號(hào)網(wǎng)絡(luò)的功能,以提高軟件的自動(dòng)化程度。首先想到的方法是使用Windows API實(shí)現(xiàn)該功能,但是查遍WIN32 API并沒(méi)有發(fā)現(xiàn)相應(yīng)的函數(shù)。在查閱資料之后終于找到了一種解決的方法,為了...
河北 張利輝
有一次在用BCB開(kāi)發(fā)程序的過(guò)程時(shí),客戶要求實(shí)現(xiàn)在結(jié)束Internet事務(wù)(傳輸文件等)后自動(dòng)掛斷撥號(hào)網(wǎng)絡(luò)的功能,以提高軟件的自動(dòng)化程度。首先想到的方法是使用Windows API實(shí)現(xiàn)該功能,但是查遍WIN32 API并沒(méi)有發(fā)現(xiàn)相應(yīng)的函數(shù)。在查閱資料之后終于找到了一種解決的方法,為了給同行以幫助,特將此方法介紹給大家。
我是使用RAS API來(lái)完成這個(gè)功能的。使用它需要三個(gè)條件:1.計(jì)算機(jī)中應(yīng)當(dāng)安裝好撥號(hào)網(wǎng)絡(luò),此時(shí)的Window\system目錄下將會(huì)存在動(dòng)態(tài)鏈接庫(kù)RasApi32.dll,這是實(shí)現(xiàn)本功能的前提條件;2.源程序中應(yīng)當(dāng)有預(yù)編譯指令#include ″ras.h″;3.存在庫(kù)文件RasApi32.lib。
我的方法中用到了RAS API中提供的兩個(gè)函數(shù)RasHangUp()和RasEnumConnections(),它們的原型和功能如下:
DWORD RasHangUp(HRASCONN hrasconn),此函數(shù)的功能是關(guān)閉撥號(hào)網(wǎng)絡(luò),返回值是0時(shí)表示調(diào)用成功。它的參數(shù)是RAS句柄,該句柄的獲得可以通過(guò)下面的函數(shù)。
DWORD RasEnumConnections(LPRASCONN lprasconn, LPDWORD lpcb, LPDWORD lpcConnections),這個(gè)函數(shù)可以獲得所有連接的數(shù)據(jù)。它的三個(gè)參數(shù)都是指針,第一個(gè)指向存放連接數(shù)據(jù)的緩沖區(qū),該緩沖區(qū)由RASCONN結(jié)構(gòu)數(shù)組組成。RASCONN結(jié)構(gòu)的成員hrasconn保存了RasHangUp()所需的RAS句柄;第二個(gè)參數(shù)指向存放緩沖器字節(jié)數(shù)的變量;第三個(gè)參數(shù)指向的變量存放了連接的數(shù)目。當(dāng)函數(shù)返回值是0時(shí)表示調(diào)用成功。
實(shí)現(xiàn)掛斷撥號(hào)網(wǎng)絡(luò)功能的函數(shù)如下:
bool CloseRas()
{bool bReturn= false;
RASCONN ras[20];
DWORD dSize, dNumber, dCount;
//函數(shù)RasEnumConnections()的要求
ras[0].dwSize=sizeof(RASCONN);
dSize =sizeof(ras);
if (RasEnumConnections(ras, &dSize, &dNumber)==0)
{bReturn=true;
//依次關(guān)閉所有的連接
for (dCount=0; dCount<dNumber; dCount++ )
{if (RasHangUp(ras[dCount].hrasconn)!=0)
{bReturn=false;
break;
}}}
return bReturn;
}
將它加入到程序中適當(dāng)?shù)奈恢镁涂梢詫?shí)現(xiàn)自動(dòng)掛斷撥號(hào)網(wǎng)絡(luò)的功能了,本函數(shù)在Windows 98、Borland C++ Builder 5.0中運(yùn)行成功。