这段代码没法链接拨号,怎么改

sexfio 2018-02-27 09:35:57

using System;
using System.Runtime.InteropServices;

namespace TaskHelper
{
public struct RASCONN
{
public int dwSize;
public IntPtr hrasconn;
[MarshalAs(UnmanagedType.ByValTStr, SizeConst = 257)]
public string szEntryName;
[MarshalAs(UnmanagedType.ByValTStr, SizeConst = 17)]
public string szDeviceType;
[MarshalAs(UnmanagedType.ByValTStr, SizeConst = 129)]
public string szDeviceName;
}

[StructLayout(LayoutKind.Sequential, CharSet = CharSet.Auto)]
public struct RasStats
{
public int dwSize;
public int dwBytesXmited;
public int dwBytesRcved;
public int dwFramesXmited;
public int dwFramesRcved;
public int dwCrcErr;
public int dwTimeoutErr;
public int dwAlignmentErr;
public int dwHardwareOverrunErr;
public int dwFramingErr;
public int dwBufferOverrunErr;
public int dwCompressionRatioIn;
public int dwCompressionRatioOut;
public int dwBps;
public int dwConnectionDuration;
}

[StructLayout(LayoutKind.Sequential, CharSet = CharSet.Auto)]
public struct RasEntryName
{
public int dwSize;
//[MarshalAs(UnmanagedType.ByValTStr,SizeConst=(int)RasFieldSizeConstants.RAS_MaxEntryName + 1)]
public string szEntryName;
//#if WINVER5
// public int dwFlags;
// [MarshalAs(UnmanagedType.ByValTStr,SizeConst=260+1)]
// public string szPhonebookPath;
//#endif
}

public class RAS
{
[DllImport("RaSAPi32.dll", EntryPoint = "RasEnumConnectionsA",
SetLastError = true)]

internal static extern int RasEnumConnections
(
ref RASCONN lprasconn, // buffer to receive connections data
ref int lpcb, // size in bytes of buffer
ref int lpcConnections // number of connections written to buffer
);


[DllImport("rasapi32.dll", CharSet = CharSet.Auto)]
internal static extern uint RasGetConnectionStatistics(
IntPtr hRasConn, // handle to the connection
[In, Out]RasStats lpStatistics // buffer to receive statistics
);
[DllImport("rasapi32.dll", CharSet = CharSet.Auto)]
public extern static uint RasHangUp(
IntPtr hrasconn // handle to the RAS connection to hang up
);

[DllImport("rasapi32.dll", CharSet = CharSet.Auto)]
public extern static uint RasEnumEntries(
string reserved, // reserved, must be NULL
string lpszPhonebook, // pointer to full path and
// file name of phone-book file
[In, Out]RasEntryName[] lprasentryname, // buffer to receive
// phone-book entries
ref int lpcb, // size in bytes of buffer
out int lpcEntries // number of entries written
// to buffer
);

[DllImport("wininet.dll", CharSet = CharSet.Auto)]
public extern static int InternetDial(
IntPtr hwnd,
[In]string lpszConnectoid,
uint dwFlags,
ref int lpdwConnection,
uint dwReserved
);

public RAS()
{

}


}

public enum DEL_CACHE_TYPE //要删除的类型。
{
File,//表示internet临时文件
Cookie //表示Cookie
};

public class RASDisplay
{
[DllImport("wininet.dll", CharSet = CharSet.Auto)]
public static extern bool DeleteUrlCacheEntry(
DEL_CACHE_TYPE type
);
private string m_duration;
private string m_ConnectionName;
private string[] m_ConnectionNames;
private double m_TX;
private double m_RX;
private bool m_connected;
private IntPtr m_ConnectedRasHandle;

RasStats status = new RasStats();
public RASDisplay()
{
m_connected = true;

RAS lpras = new RAS();
RASCONN lprasConn = new RASCONN();

lprasConn.dwSize = Marshal.SizeOf(typeof(RASCONN));
lprasConn.hrasconn = IntPtr.Zero;

int lpcb = 0;
int lpcConnections = 0;
int nRet = 0;
lpcb = Marshal.SizeOf(typeof(RASCONN));


nRet = RAS.RasEnumConnections(ref lprasConn, ref lpcb, ref
lpcConnections);


if (nRet != 0)
{
m_connected = false;
return;

}

if (lpcConnections > 0)
{


//for (int i = 0; i < lpcConnections; i++)

//{
RasStats stats = new RasStats();

m_ConnectedRasHandle = lprasConn.hrasconn;
RAS.RasGetConnectionStatistics(lprasConn.hrasconn, stats);


m_ConnectionName = lprasConn.szEntryName;

int Hours = 0;
int Minutes = 0;
int Seconds = 0;

Hours = ((stats.dwConnectionDuration / 1000) / 3600);
Minutes = ((stats.dwConnectionDuration / 1000) / 60) - (Hours * 60);
Seconds = ((stats.dwConnectionDuration / 1000)) - (Minutes * 60) - (Hours * 3600);


m_duration = Hours + " hours " + Minutes + " minutes " + Seconds + " secs";
m_TX = stats.dwBytesXmited;
m_RX = stats.dwBytesRcved;


//}


}
else
{
m_connected = false;
}


int lpNames = 1;
int entryNameSize = 0;
int lpSize = 0;
RasEntryName[] names = null;

entryNameSize = Marshal.SizeOf(typeof(RasEntryName));
lpSize = lpNames * entryNameSize;

names = new RasEntryName[lpNames];
names[0].dwSize = entryNameSize;

uint retval = RAS.RasEnumEntries(null, null, names, ref lpSize, out lpNames);

//if we have more than one connection, we need to do it again
if (lpNames > 1)
{
names = new RasEntryName[lpNames];
for (int i = 0; i < names.Length; i++)
{
names[i].dwSize = entryNameSize;
}

retval = RAS.RasEnumEntries(null, null, names, ref lpSize, out lpNames);

}
m_ConnectionNames = new string[names.Length];


if (lpNames > 0)
{
for (int i = 0; i < names.Length; i++)
{

m_ConnectionNames[i] = names[i].szEntryName;

}
}
}

public string Duration
{
get
{
return m_connected ? m_duration : "";
}
}

public string[] Connections
{
get
{
return m_ConnectionNames;
}
}

public double BytesTransmitted
{
get
{
return m_connected ? m_TX : 0;
}
}
public double BytesReceived
{
get
{
return m_connected ? m_RX : 0;

}
}
public string ConnectionName
{
get
{
return m_connected ? m_ConnectionName : "";
}
}
public bool IsConnected
{
get
{
return m_connected;
}
}

public int Connect(string Connection)
{
int temp = 0;
uint INTERNET_AUTO_DIAL_UNATTENDED = 2;
int retVal = RAS.InternetDial(IntPtr.Zero, Connection, INTERNET_AUTO_DIAL_UNATTENDED, ref temp, 0);
return retVal;
}
public void Disconnect()
{
RAS.RasHangUp(m_ConnectedRasHandle);
}
}
}


别人的代码,貌似网上好多 都是复制的 这段 代码 ,但是 我的 win7 64位下无法拨号,请看看怎么改
...全文
260 2 打赏 收藏 转发到动态 举报
写回复
用AI写文章
2 条回复
切换为时间正序
请发表友善的回复…
发表回复
threenewbee 2018-02-27
  • 打赏
  • 举报
回复
看下你的dll函数的名字和dll导出的是否一致
sexfio 2018-02-27
  • 打赏
  • 举报
回复
Connect 函数返回0 成功 但是实际上没有拨号
V12 2.05 修正了在某些Intel网卡上的IP设置和MAC修问题!如果还有人遇到此类问题,请将系统信息导出,发送至 zhangzhezh@gmail.com 谢谢 将更新文件放入模块文件夹,以免误点。 主界面的地址信息中文,加主机和客户机段数增加至6个。 By Zhangzhezh 2010-11-23 V11 2.05 修正了一个IP地址设置问题,当客户机使用主机时并配置编号为1的客户机时不再出错。更新模块加入了简易的版本检测功能, 同时加入了测试的自动更新功能,写的很粗略,仅供测试。。 修IP地址时会刷新主界面的IP显示。把之前的拨号成功提示加回来了,有些朋友反映都不知道是否拨号成功 不喜欢的这个提示的朋友可以在主界面设置。。 By Zhangzhezh 2010-11-21 V10 2.05 修复了一下小bug,应某些人要求将CMD窗口封装起来了,以便更好的读取错误信息,当已经连接错误弹出时程序不再自动关闭。。 By Zhangzhezh 2010-11-20 V9 2.05 当勾选了自动连接并且已经连接至互联网的情况下程序不会再自动连接也不会关闭了,修正了界面里IP信息显示超界的问题, 当自动连接失败时会返回主界面,界面体验的优化,加入了IPV6 ISATAP隧道快速设置功能(测试)。。 By Zhangzhezh 2010-11-20 V8 2.05 修正自动连接功能的返回消息错误,重新布局界面,添加快速访问网络连接路径, 应大众要求讲dialerconfig.xml中的密码加密了,不再明文保存了,还有些小Bug优化。。 By Zhangzhezh 2010-11-19 V7 2.05 修复在Win7 64位下自动创建拨号点出错的问题!! 主界面重新排版,IP设置界面加入了例外处理,加入链接状态显示,加入断开连接功能,再次增加检测等待时间,以免遇到不准确的连接不成功提示。。 优化了部分代码,修正一下小Bug。。 By Zhangzhezh 2010-11-10 V6 2.05 将MAC修功能用C#实现了,可能还不太完善,浏览器调用默认的,不启动IE了,完善主机客户机设置功能,允许设置不同的主机。。 加入网卡选择判断机制,不会连虚拟机网卡的MAC和IP也了,抓取网卡准确度也提高了,拨号点每次会自动建立,不用再手工创建了。。 By Zhangzhezh 2010-11-6
V15 2.05 应大家要求重写了DialProcess模块。 显示更加美观了。 开放核心编码选择,喜欢DIY的自己整吧。 自己修dzhsurf写的gen.html里面的JS函数即可。 同时用gen.html也算号,大家自己研究吧,不出什么问题软件到此为止结束更新,暂时没什么BUG了。 如果还遇到错误请发送至zhangzhezh@gmail.com By Zhangzhezh 2010-12-2 V14 2.05 程序开始时会检查电信的拨号器是否运行,以及检查自己本身是否运行,拿自己的电脑当服务器内存压力太大。 将更新服务器放到网上的免费空间了。 某高手dzhsurf(dzhsurf@gmail.com)之前提议我将核心算号模块独立出来,电信更新的话直接升级算号模块就好了,功能我已经做好了, 暂时就不放出了。dzhsurf也提供了用JS写的算号模块,以后电信升级只需在网上更新算号文件就OK了,希望有大一的对加密解密, 反汇编有研究的童鞋之后可以接手此算法更新工作。 算法可见 http://code-e.vicp.net/gen.html dzhsurf用JS写的,下载下来编辑即可见源码,打算以后用本地调用JS的方法解密 C#的可见 http://download.csdn.net/source/2836732 By Zhangzhezh 2010-11-29 V13 2.05 修正一些信息显示,为新手加入了环境检查功能,并可快速开启服务,以免ICS服务没开启导致共享失败,加入了开机自启动设置 加入了注册表检查GHCA保护驱动是否存在.稍微进更新模块,以免线程无法销毁覆盖失败。 By Zhangzhezh 2010-11-24 V12 2.05 修正了在某些Intel网卡上的IP设置和MAC修问题!如果还有人遇到此类问题,请将系统信息导出,发送至 zhangzhezh@gmail.com 谢谢 将更新文件放入模块文件夹,以免误点。 主界面的地址信息中文,加主机和客户机段数增加至6个。 By Zhangzhezh 2010-11-23 V11 2.05 修正了一个IP地址设置问题,当客户机使用主机时并配置编号为1的客户机时不再出错。更新模块加入了简易的版本检测功能, 同时加入了测试的自动更新功能,写的很粗略,仅供测试。。 修IP地址时会刷新主界面的IP显示。把之前的拨号成功提示加回来了,有些朋友反映都不知道是否拨号成功 不喜欢的这个提示的朋友可以在主界面设置。。

110,533

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术 C#
社区管理员
  • C#
  • Web++
  • by_封爱
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

让您成为最强悍的C#开发者

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