ADSL拨号程序问题??在线等

lcddda 2009-02-07 11:31:22
我看了starluck 大哥给的代码,问题是我调试好了后点按钮没反应,想问问这程序是怎么工作的,是不是还要在代码中做修改(用户名什么的)



unit publicDefine;

interface

//implementation


Uses WinTypes, WinProcs, Dialogs;

Const
UNLEN = 256;
PWLEN = 256;
DNLEN = 15;
RAS_MaxEntryName = 256;//连接名称最大长度
RAS_MaxDeviceName = 128;//设备名称最大长度
RAS_MaxDeviceType = 16;//设备类型名称长度
//RAS_MaxParamKey = 32;
//RAS_MaxParamValue = 128;
RAS_MaxPhoneNumber = 128;//电话号码的最大长度
RAS_MaxCallbackNumber = RAS_MaxPhoneNumber;
RDEOPT_IgnoreModemSpeaker = $00000004;

Type
HRASConn = DWORD;
{ 确认一活动的拨号连接. (为RasConnectEnum函数使用) }
PRASConn = ^TRASConn;//拨号连接的句柄类型
TRASConn = record
dwSize: DWORD;//该结构类型所占内存的字节大小
rasConn: HRASConn;//活动连接的句柄
szEntryName: Array[0..RAS_MaxEntryName] Of Char;//
szDeviceType : Array[0..RAS_MaxDeviceType] Of Char;
szDeviceName : Array [0..RAS_MaxDeviceName] of char;
end;

PRASConnStatus = ^TRASConnStatus;
TRASConnStatus = Record
dwSize: LongInt;
rasConnstate: Word;
dwError: LongInt;
szDeviceType: Array[0..RAS_MaxDeviceType] Of Char;
szDeviceName: Array[0..RAS_MaxDeviceName] Of Char;
End;

PRASDIALEXTENSIon__S= ^TRASDIALEXTENSION__S;
TRASDIALEXTENSIon__S= Record
dwSize: DWORD;
dwfOptions: DWORD;
hwndParent: HWnd;
reserved: DWORD;
end;

PRASDialParams = ^TRASDialParams;
TRASDialParams = Record
dwSize: DWORD;
szEntryName: Array[0..RAS_MaxEntryName] Of Char;
szPhoneNumber: Array[0..RAS_MaxPhoneNumber] Of Char;
szCallbackNumber: Array[0..RAS_MaxCallbackNumber] Of Char;
szUserName: Array[0..UNLEN] Of Char;
szPassword: Array[0..PWLEN] Of Char;
szDomain: Array[0..DNLEN] Of Char;
end;

PRASEntryName = ^TRASEntryName;
TRASEntryName = Record
dwSize: LongInt;
szEntryName: Array[0..RAS_MaxEntryName] Of Char;
{Reserved: Byte;}
End;

//拨号函数

Function RasDial(
lpRasDialExtensions : PRASDIALEXTENSION__S ; //在WIN9X下无用,可设置为NIL
lpszPhonebook: PChar; //在WIN9X下无用,可设置为NIL
lpRasDialParams : PRASDIALPARAMS; // 拨号参数,类型指针
dwNotifierType : DWORD; { 消息通知方式}
lpvNotifier: DWORD; { 消息处理事件}
var rasConn: HRASConn { 返回成功连接的连接句柄}
): DWORD; stdcall;

Function RasEnumConnections(RASConn: PrasConn;
var BufSize: DWord;
var Connections: DWord): LongInt; stdcall;

Function RasEnumEntries (
reserved: PChar; {保留字段,必须为空}
lpszPhonebook: PChar; { 电话本名称,在WIN9X下无用,可设置为NIL}
lprasentryname: PRASENTRYNAME; {接收拨号连接名称的缓冲区,是一类型数组的指针}
var lpcb : DWORD; {接收拨号连接名称的缓冲区的大小}
var lpcEntries : DWORD {实际获得拨号连接 的数目}
) : DWORD; stdcall;

Function RasGetConnectStatus(RASConn: hrasConn; { 指定活动连接的句柄 }
RASConnStatus: PRASConnStatus { 获取活动连接状态信息的缓冲区}
): LongInt; stdcall;

Function RasGetErrorString(ErrorCode: DWord; { 错误代码标识}
szErrorString: PChar; { 错误提示信息的缓冲区}
BufSize: DWord {错误提示信息的缓冲区的大小 }
): LongInt; stdcall;

Function RasHangUp(RASConn: hrasConn ): LongInt; stdcall;

Function RasGetEntryDialParams(
lpszPhonebook:PChar; {电话本名称,在WIN9X下无用,可设置为NIL }
VAR lprasdialparams:TRASDIALPARAMS; {拨号参数,是一类型指针}
VAR lpfPassword : BOOL {显示是否需要用户密码}
): DWORD; stdcall;

implementation

const
RAS_DLL = 'RASAPI32';

Function RasDial; external RAS_DLL name 'RasDialA';
Function RasEnumConnections; external RAS_DLL name 'RasEnumConnectionsA';
Function RasEnumEntries; external RAS_DLL name 'RasEnumEntriesA';
Function RasGetConnectStatus; external RAS_DLL name 'RasGetConnectStatusA';
Function RasGetErrorString; external RAS_DLL name 'RasGetErrorStringA';
Function RasHangUp; external RAS_DLL name 'RasHangUpA';
Function RasGetEntryDialParams; external RAS_DLL name 'RasGetEntryDialParamsA';
end.


end.









unit AutoDial;

interface

uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, StdCtrls;

type
TForm1 = class(TForm)
Button1: TButton;
Button2: TButton;
procedure Button1Click(Sender: TObject);
procedure Button2Click(Sender: TObject);
private
{ Private declarations }
public
{ Public declarations }
end;
// function RasCreatePhonebookEntryA( hwnd : THandle;lpszPhonebook: pchar ) : DWORD;stdcall; external 'RasApi32.DLL';
var
Form1: TForm1;

implementation
uses publicDefine;
{$R *.dfm}

function ConnectionToInterNet(const UserName, Password, Phone, Domain: string;
bSpeaker: Boolean = False): Boolean;
var
hRas: HRasConn;
DialParams: PRasDialParams;
Extensions: PRASDialExtension__s;
Value: Integer;
C: array [0..255] of Char;
begin
Screen.Cursor := crHourglass;
Result := False;
New(DialParams);
try
Extensions := nil;
if Not bSpeaker then {忽略拨号音}
begin
New(Extensions);
Extensions^.dwSize := SizeOf(TRASDialExtension__s);
Extensions^.dwfOptions := RDEOPT_IgnoreModemSpeaker;
end;
FillChar(Dialparams^, SizeOf(TRasDialParams), 0);
with Dialparams^ do
begin
dwSize := Sizeof(TRasDialParams);
StrPCopy(szUserName,UserName);
StrPCopy(szPassword,Password);
StrPCopy(szPhoneNumber,Phone);
if Domain <> '' then
StrPCopy(szDomain, Domain);
end;
hRas := 0;
Value := RasDial(Extensions,nil,dialparams,0,0,hRas);
if Value <> 0 then
begin
Result := False;
RasGetErrorString(Value,C,255);
RasHangUp(hRas);
ShowMessage('rasdial error:'+ string(C));
end;
if not bSpeaker then dispose(Extensions);
finally
Dispose(DialParams);
Result := Value = 0;
Screen.Cursor := crDefault;
end;
end;
procedure TForm1.Button1Click(Sender: TObject);
begin
ConnectionToInterNet('9616900','','9616900','',true);
end;
procedure TForm1.Button2Click(Sender: TObject);
var
conn:array[0..100] of TRASConn;
c,S :Dword;
i,j:integer;
state : TRASConnStatus;
P :PRASConn;
H : HRASConn;
begin
conn[1].dwSize := SIZEOF(TRasConn);
c := SIZEOF(TRasConn)*100;
FillChar(state,sizeof(TRasConnStatus),100);
state.dwSize := sizeof(TRasConnStatus);
if RasEnumConnections(@conn[1],c,S) = 0 then
begin
if s > 0 then
with conn[1] do
begin
P := pointer(rasconn);
H := Longint(P);
if RasHangUp(H) <> 0 then
begin
ShowMessage('断开失败');
end
else ShowMessage('断开成功');
end;
end;
end;

end.

...全文
289 4 打赏 收藏 转发到动态 举报
写回复
用AI写文章
4 条回复
切换为时间正序
请发表友善的回复…
发表回复
willflyz 2009-02-07
  • 打赏
  • 举报
回复
呵呵,改成下面的就可以了..


with Dialparams^ do
begin
dwSize := Sizeof(TRasDialParams);
StrPCopy(szEntryName,'你的拔号连接名称');
StrPCopy(szUserName,UserName);
StrPCopy(szPassword,Password);
//StrPCopy(szPhoneNumber,Phone);
if Domain <> '' then
StrPCopy(szDomain, Domain);
end;
starluck 2009-02-07
  • 打赏
  • 举报
回复
这是电话拔号中的:

ConnectionToInterNet('9616900','','9616900','',true);


96169 这个号码用的。可能你那边要根据需要改变下。
willflyz 2009-02-07
  • 打赏
  • 举报
回复
我用的是VPN,ADSL的应该也差不多就改两个地方就可以了,如下.

with Dialparams^ do
begin
dwSize := Sizeof(TRasDialParams);
StrPCopy(szEntryName, 'MyVPN');
StrPCopy(szUserName, UserName);
StrPCopy(szPassword, Password);
//StrPCopy(szPhoneNumber,Phone);
if Domain <> '' then
StrPCopy(szDomain, Domain);
end;

procedure TForm1.Button1Click(Sender: TObject);
begin
ConnectionToInterNet('test', 'test', '', '', true);
end;

lcddda 2009-02-07
  • 打赏
  • 举报
回复
我是ADSL用户 我该在那些地方进行修改呢??

1,183

社区成员

发帖
与我相关
我的任务
社区描述
Delphi Windows SDK/API
社区管理员
  • Windows SDK/API社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧