贴一点代码(用VC实现在WINXP下的宽带拨号)
2007-03-31 17:23

如何用vc实现宽带拨号的问题很早就有人提过了,但网上很少有满意的解答,CSDN的高手们也不过一句“参见Rasdial”或“参见winxp sdk”了事。本着为人民服务的精神,我从国外某高手的代码中整理了两个函数,以方便各位同志使用。

以下代码基本来自“Ras高级编程”,一国外高手做的拨号统计软件。这代码下载自国内的某家论坛。若有人能指出论坛名称,不胜感谢。如果有人要下载ras高级编程的代码做深入研究,可以到我的网络硬盘http://bigeyex.ys168.com

在使用下列代码的时候别忘了在程序的开头加入
#include <ras.h>
#include <raserror.h>
还有就是在Object/Library Modules里加入
Rasapi32.lib
此外还要定义一个全局的
static HRASCONN hRasConn = NULL;

//这是获取当前ISP的代码。m_Providers是一个CListBox控件。
BOOL QueryConnections()
{
DWORD cbBuf;
DWORD cEntry;
UINT    ndx;
char    szMessage[256];
m_Providers.ResetContent();

DWORD dwRet;
LPBYTE lpBuffer;

LPRASENTRYNAME lpRasEntry = new RASENTRYNAME;
lpRasEntry->dwSize = sizeof(RASENTRYNAME);
cbBuf = sizeof(RASENTRYNAME);
//获得所有连接
dwRet = RasEnumEntries(NULL, NULL, lpRasEntry, &cbBuf, &cEntry);
delete lpRasEntry;

lpBuffer = new BYTE[cbBuf];
lpRasEntry = (LPRASENTRYNAME)lpBuffer;
lpRasEntry->dwSize = sizeof(RASENTRYNAME);
dwRet = RasEnumEntries(NULL, NULL, lpRasEntry, &cbBuf, &cEntry);

if (ERROR_BUFFER_TOO_SMALL == dwRet)
{
    delete lpRasEntry;
    lpRasEntry = NULL;
    lpRasEntry = (LPRASENTRYNAME) new char[cbBuf];
    if (NULL != lpRasEntry)
    {
     ZeroMemory(lpRasEntry, cbBuf);
     lpRasEntry->dwSize = cbBuf;
     dwRet = RasEnumEntries(NULL, NULL, lpRasEntry, &cbBuf, &cEntry);
    }
    else
     dwRet = ERROR_NOT_ENOUGH_MEMORY;
}
if (0 != dwRet) // 其他错误
{
    if (0 != RasGetErrorString((UINT)dwRet, szMessage, 256))
    {
    }
}
if (0 == cEntry)
{
    delete lpRasEntry ;
    return FALSE;
}
BOOL bSet = FALSE;
if (0 == dwRet)  
{
    for (ndx = 0; ndx < cEntry; ndx++)
    {
     m_Providers.InsertString(ndx, lpRasEntry[ndx].szEntryName);
     if (lpRasEntry[ndx].szEntryName == sCurrentProvider)
     {
      m_Providers.SetCurSel(ndx);
      bSet = TRUE;
     }
    }
    if (!bSet)
    {
     m_Providers.SetCurSel(0);
     sCurrentProvider = lpRasEntry[0].szEntryName;
    }
}
delete lpRasEntry ;
return TRUE;
}

//这是拨号的程序,netuser是用户名,netpwd是拨号密码,sCurrentProvider是ISP
BOOL StartDial(CString netuser,CString netpwd,CString sCurrentProvider)
{
hRasConn = NULL;
RASDIALPARAMS rdParams;
char    szBuf[256] = "";
ZeroMemory(&rdParams, sizeof(RASDIALPARAMS));
rdParams.dwSize = sizeof(RASDIALPARAMS);
lstrcpy(rdParams.szEntryName, sCurrentProvider);
lstrcpy(rdParams.szPhoneNumber, CString("P"));
CString un, pw;
un=netuser;
pw=netpwd;
lstrcpy(rdParams.szUserName, un);
lstrcpy(rdParams.szPassword, pw);
rdParams.szCallbackNumber[0] = '*';
rdParams.szDomain[0] = '*';
Sleep(400);
DWORD dwRet;
dwRet = RasDial(NULL, NULL, &rdParams, 0L, NULL, &hRasConn);
return TRUE;
}

//这是断开的代码
BOOL HangUp()
{
DWORD dwRet;
RASCONNSTATUS rStatus;
ZeroMemory(&rStatus, sizeof(RASCONNSTATUS));
rStatus.dwSize = sizeof(RASCONNSTATUS);
dwRet = RasGetConnectStatus(hRasConn, &rStatus);
if (dwRet != ERROR_INVALID_HANDLE)
{
    RasHangUp(hRasConn);
    dwRet = RasGetConnectStatus(hRasConn, &rStatus);
}
return TRUE;
}

贴一点代码(用VC实现在WINXP下的宽带拨号)相关推荐

  1. VC实现在ListBox中选择背景位图

    VC实现在ListBox中选择背景位图 本文介绍如何在ListBox中添加更换背景位图,并提供源代码供参考.本文源代码运行效果图如下:   一.基本原理: 构造一个LISTBOX的子类CMYLISTB ...

  2. VC实现对Excel表格的操作

    转载请注明原文网址: http://www.cnblogs.com/xianyunhe/archive/2011/09/25/2190485.html 通过VC实现对Excel表格的操作的方法有多种, ...

  3. 互联网产品设计进阶(14)多一点设计,少一点代码

    互联网产品设计进阶(14)多一点设计,少一点代码 来自图书:<修炼之道:互联网产品从设计到运营>抢鲜评品,即将出版! 在项目会上,常常听到有人抱怨:今天又要修修补补了,客户一点改动,害得大 ...

  4. .NET代码质量 | 一天一点代码坏味道(4)

    [代码精进]| 总结/Edison Zhou 作为一个后端工程师,想必在职业生涯中都写过一些不好维护的代码.本文是我学习<代码之丑>的学习笔记,今天最后一天,一起品品滥用控制语句的味道,再 ...

  5. .NET代码质量 | 一天一点代码坏味道(3)

    [代码精进]| 总结/Edison Zhou 作为一个后端工程师,想必在职业生涯中都写过一些不好维护的代码.本文是我学习<代码之丑>的学习笔记,今天第三天,品品大类和长参数列表的味道. 上 ...

  6. .NET代码质量 | 一天一点代码坏味道(2)

    [代码精进]| 总结/Edison Zhou 作为一个后端工程师,想必在职业生涯中都写过一些不好维护的代码.本文是我学习<代码之丑>的学习笔记,今天第二天,品品重复代码和长函数方法的味道. ...

  7. Xp下的程序编译成linux,WinXP下打造自己的linux 0.11简易编译环境(原创)

    http://caiwei8888.blog.163.com/blog/static/3017424120101913353856/ 学习赵炯博士的<linux 0.11 内核完全注释>, ...

  8. 【转载】VC遍历文件夹下所有文件和文件夹

    2019独角兽企业重金招聘Python工程师标准>>> 一.先介绍一个结构WIN32_FIND_DATA VC遍历文件夹下所有文件和文件夹 typedef struct _WIN32 ...

  9. android 获取wifi的ip地址吗,Android开发实现在Wifi下获取本地IP地址的方法

    本文实例讲述了Android开发实现在Wifi下获取本地IP地址的方法.分享给大家供大家参考,具体如下: 代码核心介绍: WifiManager类提供了对设备Wifi功能的管理,包括Wifi开关的打开 ...

最新文章

  1. 电脑勒索病毒之谜:用户如何能确保电脑安全
  2. C/C++ 位操作 总结
  3. Veritas Backup Exec 10简体中文版+winXP SP2安装问题
  4. PAT (Basic Level) Practise - 继续(3n+1)猜想
  5. stmmac 中断处理
  6. 靠一平台构建核心指标系统,数据分析让业务运营效率提升90%
  7. layer.open组件获取弹出层页面变量、函数
  8. 在C#中将集合用作键
  9. .WeightedRandomSampler(3)
  10. 树状数组相关应用之多叉树子树问题
  11. 数据分析:Hive、Pig和Impala
  12. 基础搜索(kuangbin专题)
  13. pdf 复制文本 乱码_如何在保留格式的同时从PDF复制文本?
  14. 远程无人值守批量装机(图文详解)
  15. git 提交代码防止尾行序列LF转为CRLF
  16. macos的pycharm无setting选项
  17. PDMS批量输出ISO图
  18. MSP430FR5994LannchPad开发笔记之一:CCS+DriverLib建立工程模板,及使用eZ-FET Debug进行printf
  19. 打印设置自定义表尾_教大家Excel2013表格中如何打印固定的表头和表尾
  20. Echarts字体和线条颜色设置操作笔记

热门文章

  1. CPU峰值性能计算方法
  2. 基于Java对Flash网站的抓取
  3. 计算机术语rander是什么意思,Rendering Engine,呈现引擎还是渲染引擎?
  4. 王者荣耀扫码登录教程,扫码登录王者荣耀怎么弄?
  5. 华虹半导体冲刺科创板上市:简称为华虹宏力,拟募资180亿元
  6. java.lang.IllegalStateException: 由于没有提供multi-part配置,无法处理parts
  7. 『树形DP』[IOI2005]Riv 河流
  8. 应用包含Involution算子的RedNet实现Classification
  9. Windows Media Player 无法播放
  10. 偏微分方程的基本概念