如何获取宽带用户的宽带连接名称,宽带用户名和密码?
想调用批处理,达到快速断网和连接网的目地,之前发帖想实现像金山网标里自带的断开网络和恢复网络的功能,结果没有人揭帖,说要用到驱动,驱动有点难,暂时不研究了想了一下,当时学批处理的时候,批处理可以控制宽带连接的断开和恢复,但要获取宽带连接的名称,用户名和密码,不知,用d如何获取它们?
宽带用户包括,网通和电信,铁通,总知是拔号上网,即需要建立宽带连接和输入帐号和密码的用户.程序界面两个按钮,按钮1,按下断网.按钮2,连网.之前用过这个软件AWPR,它可以获取用户名和密码.感觉这类软件有点意思,有时密码忘记了,用它就能找回来了.代码要具有通用性!不能只在我的机器上起作用!
想调用批处理,达到快速断网和连接网的目地,之前发帖想实现像金山网标里自带的断开网络和恢复网络的功能,结果没有人揭帖,说要用到驱动,驱动有点难,暂时不研究了想了一下,当时学批处理的时候,批处理可以控制宽带连接的断开和恢复,但要获取宽带连接的名称,用户名和密码,不知,用d如何获取它们?
宽带用户包括,网通和电信,铁通,总知是拔号上网,即需要建立宽带连接和输入帐号和密码的用户.程序界面两个按钮,按钮1,按下断网.按钮2,连网.之前用过这个软件AWPR,它可以获取用户名和密码.感觉这类软件有点意思,有时密码忘记了,用它就能找回来了.代码要具有通用性!不能只在我的机器上起作用!
解决方案 »
- 怎么解决acm 控件 声音延时的问题
- {$IFDEF UNICODE}有没有简单一点的表达方式,像C语言那样
- 请问哪里有rave report设计器的下载?
- 如何使窗口在最前面,并且不能再打开其他程序??
- 关于Indy里的TIdTCPClient接收数据的问题!
- 数据导出到EXCEL的问题,把数据库中的一个字段的值"001002005"导出到EXCEL表中后,在EXCEL表中显示为"1002005"了,前面的两个0没了,如何让数
- 如何在delphi 中控制excel表的一個小問題?急呀請幫忙.
- 请问FastReport控件的数据源问题,迅速给分!
- 关于Image的图片切换问题!
- 新手问题!给你们烧香了!
- quickreport问题
- TChart中多个Series如何根据X轴索引得到它们的Y值
可以参考这里
http://www.delphibbs.com/delphibbs/dispq.asp?lid=829782
我是想控制拔号链接.
但不管怎样,哪三个参数,如果拿不到的话,就白费力气了
http://www.delphibbs.com/delphibbs/dispq.asp?lid=829782
这个帖子是2002年,和现在的宽带有区别的如果获取帐号和密码,获取宽带连接名称,这三个缺一不可当然,我最终要的是,快速断网和快速连网,有这样的效果的代码都可以回,当然禁用网卡哪个不算 ,哪个太慢了.
再给你点参考资料
http://msdn.microsoft.com/en-us/library/aa446741(VS.85).aspx
官方的,这总可以相信我了吧。
拨号网络中建立
了的拨号连接的名称及其属性设置,其中各项目的名称即为可
用的拨号连接的名称;各项目的值即这个在xp下根本没有
AWPR这个软件能取到,包括xp的登录密码都能取到.
但实际上通过RasGetEntryDialParams得来的字符串中隐藏了密码的handle。
你想让adsl之类的拨号上网吗?知道连接名就可以了。
获取用户的adsl密码有必要吗?
大概流程是这样的。
联网:
通过RasEnumEntries获得可用连接名称列表。然后通过RasGetEntryDialParams和前面或得的连接名称来获得拨号链接所需参数。然后通过RasDial和前面获得的参数去拨号上网。
断网:
通过RasEnumConnections获得当前活动链接然后通过RasHangUp断开连接。各个函数详细用法的请参阅http://msdn.microsoft.com/en-us/library/aa446739(VS.85).aspx及上面给你的相关链接。
“通过RasEnumEntries获得可用连接名称列表。”这一步可以省略掉。其中用到的数据结构参阅我给你的msdn地址吧
就是重新封装了一下rasapi32.dll中的函数。[code=Delphi(Pascal)]
unit RasApi;interfaceuses 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;type
{UINT = Word;}
PHRASConn = ^HRASConn;
HRASConn = DWORD;
{ Pass this string to the RegisterWindowMessage() API to get the message
** number that will be used for notifications on the hwnd you pass to the
** RasDial() API. WM_RASDIALEVENT is used only if a unique message cannot be
** registered. }
const
RASDialEvent = 'RASDialEvent';
WM_RASDialEvent = $0CCCD;
{ Enumerates intermediate states to a Connection. (See RasDial) }
RASCS_Paused = $1000;
RASCS_Done = $2000; RASBase = 600;
Success = 0;
{ Error Codes }
PENDING = (RASBase + 0);
ERROR_INVALID_PORT_HANDLE = (RASBase + 1);
ERROR_PORT_ALREADY_OPEN = (RASBase + 2);
ERROR_BUFFER_TOO_SMALL = (RASBase + 3);
ERROR_WRONG_INFO_SPECIFIED = (RASBase + 4);
ERROR_CANNOT_SET_PORT_INFO = (RASBase + 5);
ERROR_PORT_NOT_ConnECTED = (RASBase + 6);
ERROR_EVENT_INVALID = (RASBase + 7);
ERROR_DEVICE_DOES_NOT_EXIST = (RASBase + 8);
ERROR_DEVICETYPE_DOES_NOT_EXIST = (RASBase + 9);
ERROR_INVALID_BUFFER = (RASBase + 10);
ERROR_ROUTE_NOT_AVAILABLE = (RASBase + 11);
ERROR_ROUTE_NOT_ALLOCATED = (RASBase + 12);
ERROR_INVALID_COMPRESSION_SPECIFIED = (RASBase + 13);
ERROR_OUT_OF_BUFFERS = (RASBase + 14);
ERROR_PORT_NOT_FOUND = (RASBase + 15);
ERROR_ASYNC_REQUEST_PENDING = (RASBase + 16);
ERROR_ALREADY_DISConnECTING = (RASBase + 17);
ERROR_PORT_NOT_OPEN = (RASBase + 18);
ERROR_PORT_DISConnECTED = (RASBase + 19);
ERROR_NO_ENDPOINTS = (RASBase + 20);
ERROR_CANNOT_OPEN_PHONEBOOK = (RASBase + 21);
ERROR_CANNOT_LOAD_PHONEBOOK = (RASBase + 22);
ERROR_CANNOT_FIND_PHONEBOOK_ENTRY = (RASBase + 23);
ERROR_CANNOT_WRITE_PHONEBOOK = (RASBase + 24);
ERROR_CORRUPT_PHONEBOOK = (RASBase + 25);
ERROR_CANNOT_LOAD_STRING = (RASBase + 26);
ERROR_KEY_NOT_FOUND = (RASBase + 27);
ERROR_DISConnECTION = (RASBase + 28);
ERROR_REMOTE_DISConnECTION = (RASBase + 29);
ERROR_HARDWARE_FAILURE = (RASBase + 30);
ERROR_USER_DISConnECTION = (RASBase + 31);
ERROR_INVALID_SIZE = (RASBase + 32);
ERROR_PORT_NOT_AVAILABLE = (RASBase + 33);
ERROR_CANNOT_PROJECT_CLIENT = (RASBase + 34);
ERROR_UNKNOWN = (RASBase + 35);
ERROR_WRONG_DEVICE_ATTACHED = (RASBase + 36);
ERROR_BAD_STRING = (RASBase + 37);
ERROR_REQUEST_TIMEOUT = (RASBase + 38);
ERROR_CANNOT_GET_LANA = (RASBase + 39);
ERROR_NETBIOS_ERROR = (RASBase + 40);
ERROR_SERVER_OUT_OF_RESOURCES = (RASBase + 41);
ERROR_NAME_EXISTS_ON_NET = (RASBase + 42);
ERROR_SERVER_GENERAL_NET_FAILURE = (RASBase + 43);
WARNING_MSG_ALIAS_NOT_ADDED = (RASBase + 44);
ERROR_AUTH_INTERNAL = (RASBase + 45);
ERROR_RESTRICTED_LOGON_HOURS = (RASBase + 46);
ERROR_ACCT_DISABLED = (RASBase + 47);
ERROR_PASSWD_EXPIRED = (RASBase + 48);
ERROR_NO_DIALIN_PERMISSION = (RASBase + 49);
ERROR_SERVER_NOT_RESPONDING = (RASBase + 50);
ERROR_FROM_DEVICE = (RASBase + 51);
ERROR_UNRECOGNIZED_RESPONSE = (RASBase + 52);
ERROR_MACRO_NOT_FOUND = (RASBase + 53);
ERROR_MACRO_NOT_DEFINED = (RASBase + 54);
ERROR_MESSAGE_MACRO_NOT_FOUND = (RASBase + 55);
ERROR_DEFAULTOFF_MACRO_NOT_FOUND = (RASBase + 56);
ERROR_FILE_COULD_NOT_BE_OPENED = (RASBase + 57);
ERROR_DEVICENAME_TOO_LONG = (RASBase + 58);
ERROR_DEVICENAME_NOT_FOUND = (RASBase + 59);
ERROR_NO_RESPONSES = (RASBase + 60);
ERROR_NO_COMMAND_FOUND = (RASBase + 61);
ERROR_WRONG_KEY_SPECIFIED = (RASBase + 62);
ERROR_UNKNOWN_DEVICE_TYPE = (RASBase + 63);
ERROR_ALLOCATING_MEMORY = (RASBase + 64);
ERROR_PORT_NOT_CONFIGURED = (RASBase + 65);
ERROR_DEVICE_NOT_READY = (RASBase + 66);
ERROR_READING_INI_FILE = (RASBase + 67);
ERROR_NO_ConnECTION = (RASBase + 68);
ERROR_BAD_USAGE_IN_INI_FILE = (RASBase + 69);
ERROR_READING_SECTIONNAME = (RASBase + 70);
ERROR_READING_DEVICETYPE = (RASBase + 71);
ERROR_READING_DEVICENAME = (RASBase + 72);
ERROR_READING_USAGE = (RASBase + 73);
ERROR_READING_MAXConnECTBPS = (RASBase + 74);
ERROR_READING_MAXCARRIERBPS = (RASBase + 75);
ERROR_LINE_BUSY = (RASBase + 76);
ERROR_VOICE_ANSWER = (RASBase + 77);
ERROR_NO_ANSWER = (RASBase + 78);
ERROR_NO_CARRIER = (RASBase + 79);
ERROR_NO_DIALTONE = (RASBase + 80);
ERROR_IN_COMMAND = (RASBase + 81);
ERROR_WRITING_SECTIONNAME = (RASBase + 82);
ERROR_WRITING_DEVICETYPE = (RASBase + 83);
ERROR_WRITING_DEVICENAME = (RASBase + 84);
ERROR_WRITING_MAXConnECTBPS = (RASBase + 85);
ERROR_WRITING_MAXCARRIERBPS = (RASBase + 86);
ERROR_WRITING_USAGE = (RASBase + 87);
ERROR_WRITING_DEFAULTOFF = (RASBase + 88);
ERROR_READING_DEFAULTOFF = (RASBase + 89);
ERROR_EMPTY_INI_FILE = (RASBase + 90);
ERROR_AUTHENTICATION_FAILURE = (RASBase + 91);
ERROR_PORT_OR_DEVICE = (RASBase + 92);
ERROR_NOT_BINARY_MACRO = (RASBase + 93);
ERROR_DCB_NOT_FOUND = (RASBase + 94);
ERROR_STATE_MACHINES_NOT_STARTED = (RASBase + 95);
ERROR_STATE_MACHINES_ALREADY_STARTED = (RASBase + 96);
ERROR_PARTIAL_RESPONSE_LOOPING = (RASBase + 97);
ERROR_UNKNOWN_RESPONSE_KEY = (RASBase + 98);
ERROR_RECV_BUF_FULL = (RASBase + 99);
ERROR_CMD_TOO_LONG = (RASBase + 100);
ERROR_UNSUPPORTED_BPS = (RASBase + 101);
ERROR_UNEXPECTED_RESPONSE = (RASBase + 102);
ERROR_INTERACTIVE_MODE = (RASBase + 103);
ERROR_BAD_CALLBACK_NUMBER = (RASBase + 104);
ERROR_INVALID_AUTH_STATE = (RASBase + 105);
ERROR_WRITING_INITBPS = (RASBase + 106);
ERROR_INVALID_WIN_HANDLE = (RASBase + 107);
ERROR_NO_PASSWORD = (RASBase + 108);
ERROR_NO_USERNAME = (RASBase + 109);
ERROR_CANNOT_START_STATE_MACHINE = (RASBase + 110);
ERROR_GETTING_COMMSTATE = (RASBase + 111);
ERROR_SETTING_COMMSTATE = (RASBase + 112);
ERROR_COMM_FUNCTION = (RASBase + 113);
ERROR_CONFIGURATION_PROBLEM = (RASBase + 114);
ERROR_X25_DIAGNOSTIC = (RASBase + 115);
ERROR_TOO_MANY_LINE_ERRORS = (RASBase + 116);
ERROR_OVERRUN = (RASBase + 117);
ERROR_ACCT_EXPIRED = (RASBase + 118);
ERROR_CHANGING_PASSWORD = (RASBase + 119);
ERROR_NO_ACTIVE_ISDN_LINES = (RASBase + 120);
ERROR_NO_ISDN_CHANNELS_AVAILABLE = (RASBase + 121);const
RASCS_OpenPort = 0;
RASCS_PortOpened = 1;
RASCS_ConnectDevice = 2;
RASCS_DeviceConnected = 3;
RASCS_AllDevicesConnected = 4;
RASCS_Authenticate = 5;
RASCS_AuthNotify = 6;
RASCS_AuthRetry = 7;
RASCS_AuthCallback = 8;
RASCS_AuthChangePassword = 9;
RASCS_AuthProject = 10;
RASCS_AuthLinkSpeed = 11;
RASCS_AuthAck = 12;
RASCS_ReAuthenticate = 13;
RASCS_Authenticated = 14;
RASCS_PrepareForCallback = 15;
RASCS_WaitForModemReset = 16;
RASCS_WaitForCallback = 17; RASCS_Interactive = RASCS_Paused;
RASCS_RetryAuthentication = RASCS_Paused + 1;
RASCS_CallbackSetByCaller = RASCS_Paused + 2;
RASCS_PasswordExpired = RASCS_Paused + 3; RASCS_Connected = RASCS_Done;
RASCS_DisConnected = RASCS_Done + 1;
{ Identifies an active RAS Connection. (See 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; PRASDIALEXTENSIONS = ^TRASDIALEXTENSIONS;
TRASDIALEXTENSIONS = 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: DWORD;
szEntryName: array[0..RAS_MaxEntryName] of Char;
{ Reserved: Byte;}
end;
function RasDial(
lpRasDialExtensions: PRASDIALEXTENSIONS; { pointer to function extensions data }
lpszPhonebook: PChar; { pointer to full path and filename of phonebook file}
lpRasDialParams: PRASDIALPARAMS; { pointer to calling parameters data}
dwNotifierType: DWORD; { specifies type of RasDial event handler}
lpvNotifier: DWORD; { specifies a handler for RasDial events}
var rasConn: HRASConn { pointer to variable to receive connection handle}
): DWORD; stdcall;function RasEnumConnections(RASConn: PrasConn; { buffer to receive Connections data }
var BufSize: DWord; { size in bytes of buffer }
var Connections: DWord { number of Connections written to buffer }
): LongInt; stdcall;function RasEnumEntries(
reserved: PChar; {reserved, must be NULL}
lpszPhonebook: PChar; { pointer to full path and filename of phonebook file}
lprasentryname: PRASENTRYNAME; {buffer to receive phonebook entries}
var lpcb: DWORD; {size in bytes of buffer}
var lpcEntries: DWORD {number of entries written to buffer}
): DWORD; stdcall;function RasGetConnectStatus(RASConn: hrasConn; { handle to Remote Access Connection of interest }
RASConnStatus: PRASConnStatus { buffer to receive status data }
): LongInt; stdcall;function RasGetErrorString(ErrorCode: DWord; { error code to get string for }
szErrorString: PChar; { buffer to hold error string }
BufSize: DWord { sizeof buffer }
): LongInt; stdcall;function RasHangUp(RASConn: hrasConn { handle to the Remote Access Connection to hang up }
): LongInt; stdcall;function RasGetEntryDialParams(
lpszPhonebook: PChar; {pointer to the full path and filename of the phonebook file}
var lprasdialparams: TRASDIALPARAMS; {pointer to a structure that receives the connection parameters}
var lpfPassword: BOOL {indicates whether the user's password was retrieved}
): DWORD; stdcall;implementationconst
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.[/code]
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, StdCtrls, RasApi;type
TForm1 = class(TForm)
Button1: TButton;
Button2: TButton;
procedure Button2Click(Sender: TObject);
procedure Button1Click(Sender: TObject);
private
{ Private declarations }
function GetEntriesName: string;
public
{ Public declarations }
end;var
Form1: TForm1;implementation{$R *.dfm}procedure TForm1.Button2Click(Sender: TObject); //关闭连接
var
bufsize: Cardinal;
numEntries: Cardinal;
entries: array[1..10] of TRasConn;
stat: TRasConnStatus;
hRas: HRasConn;
conexion: pRasConn;
begin
entries[1].dwSize := SizeOf(TRasConn);
bufsize := SizeOf(TRasConn) * 10;
FillChar(stat, Sizeof(TRasConnStatus), 0);
stat.dwSize := Sizeof(TRasConnStatus);
if RasEnumConnections(@entries[1], bufsize,
numEntries) = 0 then
begin
if numEntries > 0 then
with entries[1] do
begin
conexion := Pointer(rasconn);
hRas := Longint(conexion);
if RasHangUp(hRas) <> 0 then
ShowMessage('Error HangUp')
else
ShowMessage('HangUp Success');
end else
ShowMessage('No active connection detect!');
end;
end;procedure TForm1.Button1Click(Sender: TObject); //开始连接
var
EntriesList: TStringList;
i: Integer;
Params: array of TRASDialParams;
NeedPWD:LongBool;
Conned:DWORD;
dwResult:DWORD;
begin
needPWD:=True;
EntriesList := TStringList.Create;
EntriesList.Clear;
EntriesList.Delimiter := '|';
EntriesList.DelimitedText := GetEntriesName;
SetLength(params, 0);
for i := 0 to EntriesList.Count - 1 do
begin
if Trim(EntriesList.Strings[i]) <> '' then
begin
SetLength(params, Length(params) + 1);
params[i].dwSize := SizeOf(Trasdialparams);
CopyMemory(@params[i].szEntryName[0], PChar(EntriesList.Strings[i]), Length(EntriesList.Strings[i]));
RasGetEntryDialParams(nil,params[i],needPWD);
end;
end;
for i := 0 to Length(params) - 1 do
begin
dwResult:=RasDial(nil,nil,@params[i],0,0,Conned);
ShowMessage(IntToStr(dwResult));//返回连接结果
end;
end;function TForm1.GetEntriesName: string;
var
i: integer;
EntriesName: array[1..10] of TRASEntryName;
dwSize, dwEntries, dwResult: DWORD;
begin
Result := '';
EntriesName[1].dwSize := SizeOf(TRASEntryName);
dwSize := 10 * sizeof(TRASEntryName);
dwResult := RasEnumEntries(nil, nil, @EntriesName[1], dwSize, dwEntries);
if dwEntries = 0 then
Exit;
for i := 1 to dwEntries do
Result := result + entriesname[i].szEntryName + '|';
end;end.
注意,以上代码不完善,需要自己改善。
1,点按钮1后,程序界面假死,我想这个功能应该在线程中完成会好一些
2,点按钮1后,会返回一些错误代码,什么678,688等,但此代码有一个bug吧,就是当按钮1执行后,你在桌面上的宽带连接图标,将打不开.双击桌面的宽带连接图标后,出现选择打开方式的对话框.我想,此代码可以删除或修改了以前的宽带连接
3,至于断网方面没条件测试,但连接部分确实存在一些问题,重新封装原98下的东西,可能效果是不太好
总知,意思到了就行了,其它的我自己慢慢研究吧.lcgboy谢了.
接和关闭了,不再需要引用rasapi32.dll