国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁(yè) > 編程 > Delphi > 正文

談?dòng)肈elphi程序獲取撥號(hào)連接的動(dòng)態(tài)IP地址

2019-11-18 18:54:11
字體:
來(lái)源:轉(zhuǎn)載
供稿:網(wǎng)友
在WIN9X下,如果安裝了撥號(hào)網(wǎng)絡(luò),則在WINDOWS系統(tǒng)的系統(tǒng)目錄System下將有兩個(gè)撥號(hào)網(wǎng)絡(luò)管理程序庫(kù)RasApi32.DLL和RasApi16.DLL,我們可利用其中的RAS系列函數(shù)來(lái)獲取和設(shè)置撥號(hào)連接網(wǎng)絡(luò)的信息。當(dāng)然是可以獲取撥號(hào)連接的動(dòng)態(tài)ip地址了。在Delphi幫助文件中,有相關(guān)RAS函數(shù)的詳細(xì)說(shuō)明。

---- 一、先解釋一些要用到的數(shù)據(jù)常量和數(shù)據(jù)結(jié)構(gòu)。

constRAS_MaxDeviceType = 16;//設(shè)備類型名稱長(zhǎng)度RAS_MaxEntryName = 256;//連接名稱最大長(zhǎng)度RAS_MaxDeviceName = 128;//設(shè)備名稱最大長(zhǎng)度RAS_MaxIpAddress = 15;//IP地址的最大長(zhǎng)度Rasp_PppIp = $8021;//撥號(hào)連接的協(xié)議類型,該數(shù)值表示PPP連接typeHRASCONN = DWord;//撥號(hào)連接句柄的類型RASCONN = record//活動(dòng)的撥號(hào)連接的句柄和設(shè)置信息dwSize : DWORD;//該結(jié)構(gòu)所占內(nèi)存的大小(Bytes), 一般設(shè)置為SizeOf(RASCONN)    hrasconn : HRASCONN;//活動(dòng)連接的句柄szEntryName : array[0..RAS_MaxEntryName] of char; //活動(dòng)連接的名稱szDeviceType : array[0..RAS_MaxDeviceType] of char;//活動(dòng)連接的所用的設(shè)備類型szDeviceName : array[0..RAS_MaxDeviceName] of char;//活動(dòng)連接的所用的設(shè)備名稱end;TRASPPPIP = record//活動(dòng)的撥號(hào)連接的動(dòng)態(tài)IP地址信息dwSize : DWORD;//該結(jié)構(gòu)所占內(nèi)存的大小(Bytes),一般設(shè)置為SizeOf(TRASPPPIP)    dwError : DWORD;//錯(cuò)誤類型標(biāo)識(shí)符szIpAddress : array[ 0..RAS_MaxIpAddress ] of char;//活動(dòng)的撥號(hào)連接的IP地址end;

---- 二、接著要解釋要用到的兩個(gè)RAS函數(shù)。

//獲取所有活動(dòng)的撥號(hào)連接的信息(連接句柄和設(shè)置信息)function RasEnumConnections( var lPRasconn : RASCONN ;//接收活動(dòng)連接的緩沖區(qū)的指針    var lpcb: DWORD;//緩沖區(qū)大小    var lpcConnections : DWORD//實(shí)際的活動(dòng)連接數(shù)   ) : DWORD; stdcall;function RasEnumConnections;external 'Rasapi32.dll' name 'RasEnumConnectionsA';//獲取指定活動(dòng)的撥號(hào)連接的動(dòng)態(tài)IP信息function RasGetProjectionInfo(    hrasconn : HRasConn;//指定活動(dòng)連接的句柄    rasprojection : DWORD;//RAS連接類型    var  lpprojection : TRASPPPIP;//接收動(dòng)態(tài)IP信息的緩沖區(qū)    var  lpcb : DWord//接收緩沖區(qū)的大小   ) : DWORD;stdcall;function RasGetProjectionInfo;external 'Rasapi32.dll' name 'RasGetProjectionInfoA';

  這兩個(gè)函數(shù)的返回值為0時(shí)表示執(zhí)行成功,非0表示錯(cuò)誤代碼。

---- 三、下面要討論如何用上面的兩個(gè)RAS函數(shù)獲取撥號(hào)連接的動(dòng)態(tài)IP地址

----   首先,要用函數(shù)RasEnumConnections列出已建立的活動(dòng)撥號(hào)連接的信息,其中包括連接名稱、連接句柄、連接設(shè)備類型和設(shè)備名稱;然后根據(jù)連接句柄用函數(shù)RasGetProjectionInfo獲取連接對(duì)應(yīng)的一個(gè)TRASPPPIP結(jié)構(gòu),其中包括一個(gè)成員屬性szIpAddress即為動(dòng)態(tài)IP地址。具體請(qǐng)參見以下程序片段和注釋信息。

procedure TForm1.Button1Click(Sender: TObject);const     MaxConnections = 10;//假設(shè)最多有10個(gè)活動(dòng)的撥號(hào)連接var   connections : array[0..MaxConnections-1] of RASCONN;   //撥號(hào)連接數(shù)組   longSize : dword;   intAvailabelConnections : dword;   //活動(dòng)的撥號(hào)連接的實(shí)際數(shù)目   intIndex : integer;   strTemp : string;   dwResult : DWORD;   dwSize         : DWORD;   RASpppIP     : TRASPPPIP;//活動(dòng)的撥號(hào)連接的動(dòng)態(tài)IP地址信息begin     connections[ 0 ].dwSize := sizeof(RASCONN);     longSize := MaxConnections * connections[ 0 ].dwSize;//接收活動(dòng)連接的緩沖區(qū)大小     intAvailabelConnections := 0;     //獲取所有活動(dòng)的撥號(hào)連接的信息(連接句柄和設(shè)置信息)     dwResult := RasEnumConnections( connections[ 0 ], longSize,intAvailabelConnections );     if 0 < > dwResult then        memo1.lines.add( '錯(cuò)誤:' + inttostr( dwResult ) )     else         begin              memo1.lines.add( '現(xiàn)有的活動(dòng)連接有' + IntToStr( intAvailabelConnections ) + '個(gè)');//顯示所有活動(dòng)的撥號(hào)連接的信息(設(shè)置信息和動(dòng)態(tài)IP地址)        for intIndex := 0 to intAvailabelConnections - 1 do                     begin//顯示一個(gè)活動(dòng)的撥號(hào)連接的設(shè)置信息                          strTemp := '連接名稱:' + StrPAS( connections[ intIndex ].szEntryName )                                   + ',設(shè)備類型:' + StrPAS( connections[ intIndex ].szDeviceType )                                   + ',設(shè)備名稱:' + StrPAS( connections[ intIndex ].szDeviceName );                          memo1.lines.add( strTemp ); //顯示一個(gè)活動(dòng)的撥號(hào)連接的動(dòng)態(tài)IP地址                          dwSize := SizeOf(RASpppIP);                          RASpppIP.dwSize := dwSize;                          dwResult := RASGetProjectionInfo( connections[ intIndex ].hRasConn,RASP_PppIp,RasPPPIP,dwSize);//獲取動(dòng)態(tài)IP地址                          if  0 < > dwResult then                              memo1.lines.add('錯(cuò)誤:' + inttostr( dwResult ))                          else                              memo1.lines.add( '動(dòng)態(tài)地址:' + StrPas(RASpppIP.szIPAddress));                     end;         end;end;

上一篇:創(chuàng)建良好設(shè)計(jì)的代碼(基于Delphi/VCL)

下一篇:在DELPHI程序中使用ADO對(duì)象存取ODBC數(shù)據(jù)庫(kù)

發(fā)表評(píng)論 共有條評(píng)論
用戶名: 密碼:
驗(yàn)證碼: 匿名發(fā)表
學(xué)習(xí)交流
熱門圖片

新聞熱點(diǎn)

疑難解答

圖片精選

網(wǎng)友關(guān)注

主站蜘蛛池模板: 清河县| 突泉县| 恩平市| 元氏县| 邯郸县| 双城市| 同仁县| 大余县| 灵石县| 鸡西市| 山丹县| 灵武市| 五台县| 阿拉善右旗| 蕉岭县| 三原县| 安泽县| 潮安县| 方山县| 东阿县| 丹阳市| 阳江市| 宁夏| 房产| 通辽市| 肇东市| 句容市| 阳曲县| 三穗县| 西畴县| 甘谷县| 边坝县| 龙陵县| 襄樊市| 七台河市| 车险| 长武县| 社会| 卓尼县| 宜都市| 乾安县|