程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> 更多編程語言 >> Delphi >> 在DELPHI程序中撥號上網

在DELPHI程序中撥號上網

編輯:Delphi
用MODEM撥號上網,仍是大多數個人網民選擇上網的方式.如果能在我們的應用程序中啟動撥號連接(如IE浏覽器程序中的自動撥號功能),無疑將會方便我們的軟件用戶(不用再切換應用程序,運行撥號網絡),提高我們的軟件的友好性從而提高軟件的競爭力.
  在WIN9X下,如果安裝了撥號網絡,則在Windows系統的系統目錄System下將有兩個撥號網絡管理程序庫RasApi32.DLL和RasApi16.DLL,我們可利用其中的函數來創建、修改撥號連接,並利用指定的撥號連接進行撥號上網。
  
  一、新建撥號連接
  當WIN9X系統中已經建立了撥號連接,則可利用現成的撥號連接。如果沒有撥號連接,則需要新建一個撥號連接。RasAPI中提供了相應的函數,其函數名為RasCreatePhonebookEntryA,函數原型為:
  function RasCreatePhonebookEntryA( hwnd : THandle;lpszPhonebook: pchar ) : DWord;
  stdcall; { 位於interface部分 }
  function RasCreatePhonebookEntryA ; external ’Rasapi32.dll’;{ 位於implementation部分 }
  參數:
  hwnd(THandle):新建撥號連接窗口的父窗口的句柄,可以為TForm的Handle,為NIL表;Windows桌面(DeskTop)
  lpszPhonebook(pchar):電話本名稱,在Win9X下無作用,可設為空字符串
  函數返回值:
  0表示執行成功;否則為錯誤.
  
  下面是一個新建撥號連接的例子.
  { 新建撥號連接 }
  procedure TForm1.Button1Click(Sender: TObject);
  var
     dwResult : DWord;
  begin
       //在當前窗口中新建撥號連接
       dwResult := RasCreatePhonebookEntryA( handle, ’’ );
       if dwResult = 0 then
          memo1.lines.add(’新建撥號連接成功!’)
       else
          memo1.lines.add(’新建撥號連接失敗!’)
  end;
  
  二、修改指定撥號連接的屬性
  如果用戶需要修改撥號連接的屬性如電話號碼、國家及區號、連接方式、服務器類型等,可以用RasAPI函數來實現,其函數名為RasEditPhonebookEntryA,函數原型為:
  function RasEditPhonebookEntryA( hwnd : THandle; lpszPhonebook: pchar;
  lpszEntryName: pchar ) : DWord;stdcall; { 位於interface部分 }
  function RasEditPhonebookEntryA; external ’Rasapi32.dll’;{ 位於implementation部分 }
  參數:
  hwnd(THandle):新建撥號連接窗口的父窗口的句柄,可以為TForm的Handle,為NIL表示
                           Windows桌面(DeskTop)
  lpszPhonebook(pchar):電話本名稱,在Win9X下無作用,可設為空字符串
          lpszEntryName:( pchar):要修改的撥號連接的名稱,如’163’、’169’等
  函數返回值:
  0表示執行成功;否則為錯誤.
  
  下面是一個修改指定撥號連接屬性的例子.
  { 修改指定撥號連接屬性 }
  procedure TForm1.Button2Click(Sender: TObject);
  var
     dwResult : DWord;
     strDialName : string;
  begin
       strDialName := ’163’;//撥號連接的名稱設為163
       //在當前窗口中指定修改撥號連接的屬性
       dwResult := RasEditPhonebookEntryA( handle, ’’, PChar( strDialName ) );
       if dwResult = 0 then
          memo1.lines.add(’修改撥號連接’ + strDialName + ’成功!’)
       else
          memo1.lines.add(’修改撥號連接’ + strDialName + ’失敗!’)
  end;
  
  三、獲取當前系統中可用的撥號連接名稱
  為了讓用戶選擇使用撥號連接進行撥號,我們需要獲取系統中已建立的撥號連接的名稱。在建立了撥號連接後,WIN9X將撥號連接的名稱和屬性寫在了注冊表中,我們可以從注冊表中獲取當前系統中可用的撥號連接名稱及在Internet Explorer中設置的默認連接名稱。
  在注冊表的HKEY_USERS.DefaultRemoteAccessAddresses下,列出了已經在撥號網絡中建立了的撥號連接的名稱及其屬性設置,其中各項目的名稱即為可用的撥號連接的名稱;各項目的值即為各撥號連接的屬性設置.我們只要讀出各項目的名稱即可獲取當前系統中可用的撥號連接名稱.
  如果在Internet Explorer中設置了默認連接名稱(查看=》Internet選項=》連接=》連接=》設置=》使用以下撥號網絡連接),則在注冊表的HKEY_USERS.DefaultRemoteAccess下,有一個字符串類型的鍵值,鍵值名InternetProfile,其值即為Internet Explorer中設置的默認連接名稱。
  
  下面是一個獲取當前系統中可用的撥號連接名稱的例子.
  { 注意在Uses中增加Registry單元,用於操作注冊表 }
  { 獲取當前系統中可用的撥號連接名稱 }
  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;//根鍵設置為HKEY_USERS
           //如果存在子鍵.DefaultRemoteAccessAddresses
                   if OpenKey(’.DefaultRemoteAccessAddresses’,false) then
                      GetValueNames( stringsTemp );//讀出各項目的名稱,即撥號連接名稱
                   CloseKey;
              end;
         //當前系統中可用的撥號連接
         memo1.lines.add( ’******************當前系統中有’+ IntToStr( stringsTemp.count )
                         +’個可用的撥號連接如下****************’);
         for intIndex := 0 to stringsTemp.count - 1 do
             memo1.lines.add( stringsTemp.strings[ intIndex ] );
        
         //列出Internet Explorer中設置的默認連接名稱
         if registryTemp.OpenKey(’.DefaultRemoteAccess’,false) then
            memo1.lines.add( ’Internet Explorer中設置的默認連接名稱為’ +
                             registryTemp.ReadString(’InternetProfile’) );
  
         //釋放內存
         registryTemp.free;
         stringsTemp.free;
  end;
  
  四、用指定的撥號連接撥號
  以上的三個工作的目的就是為了撥號上網,現在就來看看如果用指定的撥號連接撥號上網。最好的方法就是調用WIN9X的撥號網絡服務了,就是運行WIN9X下的現成程序。
  在Delphi程序中可以用如下代碼實現撥號上網:
  winexec(’rundll32.exe rnaui.dll,RnaDial 163’,SW_SHOWNORMAL);
  其中字符串中的最後一個參數“163”為撥號連接的名稱。
  
  下面是一個用指定的撥號連接撥號上網的例子.
  { 用指定的撥號連接撥號上網 }
  procedure TForm1.Button4Click(Sender: TObject);
  var
     strDialName : string;
  begin
       strDialName := ’163’;//撥號連接的名稱設為163
       memo1.lines.add( ’******************用撥號連接’+ strDialName
                       +’實現撥號上網****************’);
       winexec( PChar(’rundll32.exe rnaui.dll,RnaDial ’ + strDialName),SW_SHOWNORMAL);
  end;
  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved