如何用Delphi5在Win2000下实现拨号的功能?(100分)

  • 主题发起人 主题发起人 幻影
  • 开始时间 开始时间

幻影

Unregistered / Unconfirmed
GUEST, unregistred user!
我已经编写了一个拨号程序,但在运行过程中总提示错误“系统无法为这个连接找到电话簿项。”
我的程序如下:
procedure TForm1.Button4Click(Sender: TObject);
var
RASDialParams : TRASDialParams;
dwResult : DWord;
begin
//指定拨号连接的拨号参数
with RASDialParams do begin
dwSize := sizeof(TRASDialParams);//结构大小
szEntryName := '163';//指定拨号连接的名称
szUserName := 'user';//指定用户名称
szPassword := 'user';//指定用户密码
szDomain := '';//指定域名
szCallbackNumber := '';//指定回叫号码
szPhoneNumber := '8430436';//指定拨号号码
end;
dwResult := RasDial(nil,'c:/Documents and Settings/All Users/Application Data/Microsoft/Network/Connections/pbk', @RASDialParams, 0, 0, RasCon);
if dwResult <> 0 then //设置指定拨号连接的拨号参数失败
ShowMessage('拨号失败:' + GetRasError( dwResult ))
else
ShowMessage('拨号成功!' );
end;

注1:'c:/Documents and Settings/All Users/Application Data/Microsoft/Network/Connections/pbk'
是电话薄文件 RasPhone.pbk 所在的目录;
注2:GetRasError是一个自定义函数,用来根据返回代码得到错误的函数。
注3:在编写“获取指定拨号连接的拨号参数”时出现同样的错误提示。
 
我有个方法,不过是从别的网友那学来的:
首先要建立两个Unit文件
1、unit Ras;
interface
uses
Windows;
const
{$IFDEF WINVER400}
RAS_MaxEntryName = 256;
{$ELSE}
RAS_MaxEntryName = 20;
{$ENDIF}
rasapi32 = 'rasapi32.dll';
type
TRASENTRYNAME = packed record
dwSize : DWORD;
szEntryName : array [0..RAS_MaxEntryName] of char;
szPadding : array [0..2] of Char;
end;
PRASENTRYNAME = ^TRASENTRYNAME;
implementation
end.
2、
unit libRasDial;
interface
uses
Windows, SysUtils, Registry, WinSock, WinInet, Ras;
function _IsConnectedToInternet: Boolean;
function _DoConnect(hwndParent:HWND): Boolean;
function _GetRasConnNum: Integer;
procedure _DoNew(hwndParent:HWND);
function RasEnumEntriesA(Reserved: Pointer;
szPhonebook: PChar;
lpRasEntryName: PRASENTRYNAME;
lpcb : PDWORD;
lpcEntries : PDWORD
): DWORD; stdcall;
function RasGetErrorStringA(uErrorValue : DWORD;
szErrorString : PChar;
cBufSize : DWORD
): DWORD; stdcall;
function RasCreatePhonebookEntryA(hWndParent : HWND;
lpszPhonebook : PChar
) : DWORD; stdcall;
var Conn: DWORD;
implementation
const
INTERNET_CONNECTION_MODEM = 1;
INTERNET_CONNECTION_LAN = 2;
INTERNET_CONNECTION_PROXY = 4;
INTERNET_CONNECTION_MODEM_BUSY = 8;
function InternetGetConnectedState(lpdwFlags: LPDWORD;
dwReserved: DWORD): BOOL; stdcall; external 'WININET.DLL';
function _IsConnectedToInternet: Boolean;
var
dwConnectionTypes: Integer;
begin
try
dwConnectionTypes := INTERNET_CONNECTION_MODEM +
INTERNET_CONNECTION_LAN +
INTERNET_CONNECTION_PROXY;
if InternetGetConnectedState(@dwConnectionTypes, 0) then
Result := true
else
Result := false;
except
Result := false;
end;
end;
function _DoConnect(hwndParent:HWND):Boolean;
begin
Result:= false;
if _GetRasConnNum=0 then _DoNew(hwndParent);
if _GetRasConnNum=0 then exit;
InternetDial(hwndparent,
'',
INTERNET_AUTODIAL_FORCE_ONLINE,
@Conn,
0);
if Conn<>0 then Result:=true;
end;
function _GetRasConnNum: Integer;
var
Entries : array [0..15] of TRASENTRYNAME;
cb : DWORD;
cEntries : DWORD;
dwRet : DWORD;
Buf : array [0..127] of char;
begin
FillChar(Entries, SizeOf(Entries), 0);
Entries[0].dwSize := SizeOf(TRASENTRYNAME);
cb := SizeOf(Entries);
cEntries := 0;
dwRet := RasEnumEntriesA(NIL, NIL, @Entries[0], @cb, @cEntries);
if dwRet <> 0 then RasGetErrorStringA(dwRet, @Buf[0], SizeOf(Buf));
Result:= cEntries;
end;
procedure _DoNew(hwndParent:HWND);
var
dwRet: DWORD;
Buf : Array [0..127] of char;
begin
dwRet := RasCreatePhonebookEntryA(hwndParent, nil);
if dwRet <> 0 then RasGetErrorStringA(dwRet, @Buf[0], SizeOf(Buf));
end;
function RasEnumEntriesA; external rasapi32 name 'RasEnumEntriesA';
function RasGetErrorStringA; external rasapi32 name 'RasGetErrorStringA';
function RasCreatePhonebookEntryA; external rasapi32 name 'RasCreatePhonebookEntryA';
end.
然后你就可以调用这些函数了
procedure TMainForm.Buttn1Click(Sender: TObject);
begin
_DoConnect(0);//拨号
end;
procedure TMainForm.Buttn1Click(Sender: TObject);
begin
if Conn <> 0 then
InternetHangUp(Conn,0);//断开
end;
 
用户拨号后弹出"找不到电话薄项目"对话框或不能创建拨号网络?

在拨号网络的连接里新建一个连接,连接名自己定义;
连接的前提是用户必须配置好各种设置,包括MODEM,TCP/IP协议等,即用户没有用拨
号程序以前可以正常上网。
如果操作系统为Windows NT4.0,你必须先手工配置您建立一个连接,其中NT的配置中
要求首先NT必须单独能拨号,其次您选择的连接的属性必须如下设置:
(A) 在安全项里选择第一个既接受任何验证
(B) 在输入用户名和密码的时候,请将域设置为空。
(C) 必须安装PPP协议。

我在98下试的。我新建了一个连接,用公用帐号(如,263,169等),点中保存密码,
然后拨到网上,断掉连接(就是在你的拨号网络里有一个一点连接按钮就可以 正确 连
到网上的 连接),再运行你的程序即可。
希望对你有用
 
我有一个拨号控件,要的话给你。我没有用过,你自己试试
 
Boss:来一个拨号控件给我,谢谢。
E-Mail:INFO@PC668.COM
 
to :Creater
控件已经发出,请查收
 
接受答案了.
 
后退
顶部