?? 在delphi程序中撥號(hào)上網(wǎng).txt
字號(hào):
在DELPHI程序中撥號(hào)上網(wǎng)
用MODEM撥號(hào)上網(wǎng),仍是大多數(shù)個(gè)人網(wǎng)民選擇上網(wǎng)的方式.如果能在我們的應(yīng)用程序中啟動(dòng)撥號(hào)連接(如IE瀏覽器程序中的自動(dòng)撥號(hào)功能),無(wú)疑將會(huì)方便我們的軟件用戶(不用再切換應(yīng)用程序,運(yùn)行撥號(hào)網(wǎng)絡(luò)),提高我們的軟件的友好性從而提高軟件的競(jìng)爭(zhēng)力.
在WIN9X下,如果安裝了撥號(hào)網(wǎng)絡(luò),則在WINDOWS系統(tǒng)的系統(tǒng)目錄System下將有兩個(gè)撥號(hào)網(wǎng)絡(luò)管理程序庫(kù)RasApi32.DLL和RasApi16.DLL,我們可利用其中的函數(shù)來(lái)創(chuàng)建、修改撥號(hào)連接,并利用指定的撥號(hào)連接進(jìn)行撥號(hào)上網(wǎng)。
一、新建撥號(hào)連接
當(dāng)WIN9X系統(tǒng)中已經(jīng)建立了撥號(hào)連接,則可利用現(xiàn)成的撥號(hào)連接。如果沒(méi)有撥號(hào)連接,則需要新建一個(gè)撥號(hào)連接。RasAPI中提供了相應(yīng)的函數(shù),其函數(shù)名為RasCreatePhonebookEntryA,函數(shù)原型為:
function RasCreatePhonebookEntryA( hwnd : THandle;lpszPhonebook: pchar ) : DWORD;
stdcall; { 位于interface部分 }
function RasCreatePhonebookEntryA ; external ’Rasapi32.dll’;{ 位于implementation部分 }
參數(shù):
hwnd(THandle):新建撥號(hào)連接窗口的父窗口的句柄,可以為T(mén)Form的Handle,為NIL表;Windows桌面(DeskTop)
lpszPhonebook(pchar):電話本名稱
在Win9X下無(wú)作用
可設(shè)為空字符串
函數(shù)返回值:
0表示執(zhí)行成功;否則為錯(cuò)誤.
下面是一個(gè)新建撥號(hào)連接的例子.
{ 新建撥號(hào)連接 }
procedure TForm1.Button1Click(Sender: TObject);
var
dwResult : DWORD;
begin
//在當(dāng)前窗口中新建撥號(hào)連接
dwResult := RasCreatePhonebookEntryA( handle
’’ );
if dwResult = 0 then
memo1.lines.add(’新建撥號(hào)連接成功!’)
else
memo1.lines.add(’新建撥號(hào)連接失敗!’)
end;
二、修改指定撥號(hào)連接的屬性
如果用戶需要修改撥號(hào)連接的屬性如電話號(hào)碼、國(guó)家及區(qū)號(hào)、連接方式、服務(wù)器類(lèi)型等,可以用RasAPI函數(shù)來(lái)實(shí)現(xiàn),其函數(shù)名為RasEditPhonebookEntryA,函數(shù)原型為:
function RasEditPhonebookEntryA( hwnd : THandle; lpszPhonebook: pchar;
lpszEntryName: pchar ) : DWORD;stdcall; { 位于interface部分 }
function RasEditPhonebookEntryA; external ’Rasapi32.dll’;{ 位于implementation部分 }
參數(shù):
hwnd(THandle):新建撥號(hào)連接窗口的父窗口的句柄,可以為T(mén)Form的Handle,為NIL表示
Windows桌面(DeskTop)
lpszPhonebook(pchar):電話本名稱
在Win9X下無(wú)作用
可設(shè)為空字符串
lpszEntryName:( pchar):要修改的撥號(hào)連接的名稱,如’163’、’169’等
函數(shù)返回值:
0表示執(zhí)行成功;否則為錯(cuò)誤.
下面是一個(gè)修改指定撥號(hào)連接屬性的例子.
{ 修改指定撥號(hào)連接屬性 }
procedure TForm1.Button2Click(Sender: TObject);
var
dwResult : DWORD;
strDialName : string;
begin
strDialName := ’163’;//撥號(hào)連接的名稱設(shè)為163
//在當(dāng)前窗口中指定修改撥號(hào)連接的屬性
dwResult := RasEditPhonebookEntryA( handle
’’
PChar( strDialName ) );
if dwResult = 0 then
memo1.lines.add(’修改撥號(hào)連接’ + strDialName + ’成功!’)
else
memo1.lines.add(’修改撥號(hào)連接’ + strDialName + ’失敗!’)
end;
三、獲取當(dāng)前系統(tǒng)中可用的撥號(hào)連接名稱
為了讓用戶選擇使用撥號(hào)連接進(jìn)行撥號(hào),我們需要獲取系統(tǒng)中已建立的撥號(hào)連接的名稱。在建立了撥號(hào)連接后,WIN9X將撥號(hào)連接的名稱和屬性寫(xiě)在了注冊(cè)表中,我們可以從注冊(cè)表中獲取當(dāng)前系統(tǒng)中可用的撥號(hào)連接名稱及在Internet Explorer中設(shè)置的默認(rèn)連接名稱。
在注冊(cè)表的HKEY_USERS\.Default\RemoteAccess\Addresses下,列出了已經(jīng)在撥號(hào)網(wǎng)絡(luò)中建立了的撥號(hào)連接的名稱及其屬性設(shè)置,其中各項(xiàng)目的名稱即為可用的撥號(hào)連接的名稱;各項(xiàng)目的值即為各撥號(hào)連接的屬性設(shè)置.我們只要讀出各項(xiàng)目的名稱即可獲取當(dāng)前系統(tǒng)中可用的撥號(hào)連接名稱.
如果在Internet Explorer中設(shè)置了默認(rèn)連接名稱(查看=》Internet選項(xiàng)=》連接=》連接=》設(shè)置=》使用以下?lián)芴?hào)網(wǎng)絡(luò)連接),則在注冊(cè)表的HKEY_USERS\.Default\RemoteAccess下,有一個(gè)字符串類(lèi)型的鍵值,鍵值名InternetProfile,其值即為Internet Explorer中設(shè)置的默認(rèn)連接名稱。
下面是一個(gè)獲取當(dāng)前系統(tǒng)中可用的撥號(hào)連接名稱的例子.
{ 注意在Uses中增加Registry單元,用于操作注冊(cè)表 }
{ 獲取當(dāng)前系統(tǒng)中可用的撥號(hào)連接名稱 }
procedure TForm1.Button3Click(Sender: TObject);
var
registryTemp : TRegistry;
stringsTemp : TStringlist;
intIndex : integer;
begin
registryTemp := TRegistry.Create;
stringsTemp := TStringlist.Create;
with registryTemp do
begin
RootKey := HKEY_USERS;//根鍵設(shè)置為HKEY_USERS
//如果存在子鍵.Default\RemoteAccess\Addresses
if OpenKey(’.Default\RemoteAccess\Addresses’
false) then
GetValueNames( stringsTemp );//讀出各項(xiàng)目的名稱,即撥號(hào)連接名稱
CloseKey;
end;
//當(dāng)前系統(tǒng)中可用的撥號(hào)連接
memo1.lines.add( ’******************當(dāng)前系統(tǒng)中有’+ IntToStr( stringsTemp.count )
+’個(gè)可用的撥號(hào)連接如下****************’);
for intIndex := 0 to stringsTemp.count - 1 do
memo1.lines.add( stringsTemp.strings[ intIndex ] );
//列出Internet Explorer中設(shè)置的默認(rèn)連接名稱
if registryTemp.OpenKey(’.Default\RemoteAccess’
false) then
memo1.lines.add( ’Internet Explorer中設(shè)置的默認(rèn)連接名稱為’ +
registryTemp.ReadString(’InternetProfile’) );
//釋放內(nèi)存
registryTemp.free;
stringsTemp.free;
end;
四、用指定的撥號(hào)連接撥號(hào)
以上的三個(gè)工作的目的就是為了撥號(hào)上網(wǎng),現(xiàn)在就來(lái)看看如果用指定的撥號(hào)連接撥號(hào)上網(wǎng)。最好的方法就是調(diào)用WIN9X的撥號(hào)網(wǎng)絡(luò)服務(wù)了,就是運(yùn)行WIN9X下的現(xiàn)成程序。
在Delphi程序中可以用如下代碼實(shí)現(xiàn)撥號(hào)上網(wǎng):
winexec(’rundll32.exe rnaui.dll
RnaDial 163’
SW_SHOWNORMAL);
其中字符串中的最后一個(gè)參數(shù)“163”為撥號(hào)連接的名稱。
下面是一個(gè)用指定的撥號(hào)連接撥號(hào)上網(wǎng)的例子.
{ 用指定的撥號(hào)連接撥號(hào)上網(wǎng) }
procedure TForm1.Button4Click(Sender: TObject);
var
strDialName : string;
begin
strDialName := ’163’;//撥號(hào)連接的名稱設(shè)為163
memo1.lines.add( ’******************用撥號(hào)連接’+ strDialName
+’實(shí)現(xiàn)撥號(hào)上網(wǎng)****************’);
winexec( PChar(’rundll32.exe rnaui.dll
RnaDial ’ + strDialName)
SW_SHOWNORMAL);
end;
以上程序在PWIN98+Delphi3.0下調(diào)試通過(guò)。
?? 快捷鍵說(shuō)明
復(fù)制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號(hào)
Ctrl + =
減小字號(hào)
Ctrl + -