如何获取宽带用户的宽带连接名称,宽带用户名和密码?
想调用批处理,达到快速断网和连接网的目地,之前发帖想实现像金山网标里自带的断开网络和恢复网络的功能,结果没有人揭帖,说要用到驱动,驱动有点难,暂时不研究了想了一下,当时学批处理的时候,批处理可以控制宽带连接的断开和恢复,但要获取宽带连接的名称,用户名和密码,不知,用d如何获取它们?
宽带用户包括,网通和电信,铁通,总知是拔号上网,即需要建立宽带连接和输入帐号和密码的用户.程序界面两个按钮,按钮1,按下断网.按钮2,连网.之前用过这个软件AWPR,它可以获取用户名和密码.感觉这类软件有点意思,有时密码忘记了,用它就能找回来了.代码要具有通用性!不能只在我的机器上起作用!

解决方案 »

  1.   

    又见面啦控制拨号链接需要调用system32下面的rasapi32.dll 网上有你需要的全部资料,可以自己去查查,至于获得密码这个功能不好实现,因为xp将宽带连接的密码隐藏了.
    可以参考这里
    http://www.delphibbs.com/delphibbs/dispq.asp?lid=829782
      

  2.   


    我是想控制拔号链接.
    但不管怎样,哪三个参数,如果拿不到的话,就白费力气了
    http://www.delphibbs.com/delphibbs/dispq.asp?lid=829782
    这个帖子是2002年,和现在的宽带有区别的如果获取帐号和密码,获取宽带连接名称,这三个缺一不可当然,我最终要的是,快速断网和快速连网,有这样的效果的代码都可以回,当然禁用网卡哪个不算 ,哪个太慢了.
      

  3.   

    晕,不用管帖子是哪一年的,可以用就是了,可以负责任的告诉你和现在的没有区别,只要是网络连接里面的,就都可以用。
    再给你点参考资料
    http://msdn.microsoft.com/en-us/library/aa446741(VS.85).aspx 
    官方的,这总可以相信我了吧。
      

  4.   

    HKEY_USERS\.Default\RemoteAccess\Addresses下,列出了已经在
    拨号网络中建立
      了的拨号连接的名称及其属性设置,其中各项目的名称即为可
    用的拨号连接的名称;各项目的值即这个在xp下根本没有
      

  5.   

    不要通过注册表,要通过rasapi32.dll提供的api去做
      

  6.   

    没有路由
    AWPR这个软件能取到,包括xp的登录密码都能取到.
      

  7.   

    密码也是可以得来的,只是你看到的是一串‘**********’。
    但实际上通过RasGetEntryDialParams得来的字符串中隐藏了密码的handle。
    你想让adsl之类的拨号上网吗?知道连接名就可以了。
    获取用户的adsl密码有必要吗?
      

  8.   

    可以的。
    大概流程是这样的。
    联网:
    通过RasEnumEntries获得可用连接名称列表。然后通过RasGetEntryDialParams和前面或得的连接名称来获得拨号链接所需参数。然后通过RasDial和前面获得的参数去拨号上网。
    断网:
    通过RasEnumConnections获得当前活动链接然后通过RasHangUp断开连接。各个函数详细用法的请参阅http://msdn.microsoft.com/en-us/library/aa446739(VS.85).aspx及上面给你的相关链接。
      

  9.   

    哦,直接使用RasGetEntryDialParams就可以获得可用连接参数,不需要链接名称。
    “通过RasEnumEntries获得可用连接名称列表。”这一步可以省略掉。其中用到的数据结构参阅我给你的msdn地址吧 
      

  10.   

    zhangxiaommmm 的问题  值得关注  哈哈哈
      

  11.   

    还是上代码吧,不然没法结贴了。首先将下面的unit加入工程(来自网络),并在需要的窗体中引用;
    就是重新封装了一下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;
      

  12.   

    type
    { 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]
      

  13.   

    以下代码为实现,不完善,需自己改善下。其中关闭链接代码来自网络unit Unit1;interfaceuses
      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.
    注意,以上代码不完善,需要自己改善。
      

  14.   

    测试了一下,发现一些问题
    1,点按钮1后,程序界面假死,我想这个功能应该在线程中完成会好一些
    2,点按钮1后,会返回一些错误代码,什么678,688等,但此代码有一个bug吧,就是当按钮1执行后,你在桌面上的宽带连接图标,将打不开.双击桌面的宽带连接图标后,出现选择打开方式的对话框.我想,此代码可以删除或修改了以前的宽带连接
    3,至于断网方面没条件测试,但连接部分确实存在一些问题,重新封装原98下的东西,可能效果是不太好
    总知,意思到了就行了,其它的我自己慢慢研究吧.lcgboy谢了.
      

  15.   

    xp delphi6下测试通过,但必须是先在系统里建好拨号,我认为使用在系统里建好的拨号直接使用dos命令rasdial就可以连
    接和关闭了,不再需要引用rasapi32.dll