前几天我开始用c#做一个adsl的拨号程序,就在论坛的搜索中搜索"拨号"结果出来一大堆关于拨号的内容,有的朋友给贴出来了源码(很感谢这些热心的朋友),但我发现的问题是,有很多人提出用了这些源码后,不能自动拨号,只是调出拨号的窗体,还需人工点击拨号才能用,(本人也在测试的时候出现了同样问题没有解决)我想这可能是一个普遍的问题有很多问题贴都没有解决,所以恳请mvp,版主们能够对这类的问题进行集中的解决.谢谢你们了.

解决方案 »

  1.   

            [System.Runtime.InteropServices.DllImport("wininet.dll",
    EntryPoint = "InternetGetConnectedState", ExactSpelling = true,
    CharSet = System.Runtime.InteropServices.CharSet.Ansi,
    SetLastError = true)]
            private static extern bool InternetGetConnectedState(ref Int32
    lpdwFlags, Int32 dwReserved);        [System.Runtime.InteropServices.DllImport("Wininet.dll",
    EntryPoint = "InternetDial", ExactSpelling = true,
    CharSet = System.Runtime.InteropServices.CharSet.Ansi,
    SetLastError = true)]
            private static extern Int32 InternetDial(IntPtr hwndParent, string
    lpszConnectoid, Int32 dwFlags, ref Int32 lpdwConnection, Int32
    dwReserved);        [System.Runtime.InteropServices.DllImport("Wininet.dll",
    EntryPoint = "InternetHangUp", ExactSpelling = true,
    CharSet = System.Runtime.InteropServices.CharSet.Ansi,
    SetLastError = true)]
            private static extern Int32 InternetHangUp(Int32 lpdwConnection,
    Int32 dwReserved);        private enum Flags : int
            {
                //Local system uses a LAN to connect to the Internet.
                INTERNET_CONNECTION_LAN = 0X2,
                //Local system uses a modem to connect to the Internet.
                INTERNET_CONNECTION_MODEM = 0X1,
                //Local system uses a proxy server to connect to the Internet.
                INTERNET_CONNECTION_PROXY = 0X4,
                //Type Visual Basic 6 code here...            //Local system has RAS installed.
                INTERNET_RAS_INSTALLED = 0X10
            }        //Declaration Used For InternetDialUp.
            private enum DialUpOptions : int
            {
                INTERNET_DIAL_UNATTENDED = 0X8000,
                INTERNET_DIAL_SHOW_OFFLINE = 0X4000,
                INTERNET_DIAL_FORCE_PROMPT = 0X2000
            }        private const int ERROR_SUCCESS = 0X0;
            private const int ERROR_INVALID_PARAMETER = 0X87;
         可以自动拨号....[/code]
      

  2.   

    谢谢ericzhangbo1982111他,这是个解决办法。不过现在网上也都有关于拨号的帖子他们最主要不能拨号的原因我弄明白了,问题出现在InternetDial上,不能用InternetDial,应该用InternetAutoDial。所以总结了一下,是有2个办法可以解决的(这里不贴代码了,网上有的是)。
    1,使用代码调用ADSL拨号的程序,然后进行拨号(使用的是InternetDial)如果想自动拨号,把拨号属性里的选项标签里的显示连接进度和提示名称,密码取消后就可以实现自动拨号了。但弱点程序操作麻烦。2,就是把InternetDial替换成InternetAutoDial就可以自动拨号了。对于ericzhangbo1982111给的这个程序我想就是靠wininet的参数把第一条里的显示连接进度和提示名称,密码取消的,(具体没有差参数说错了不要介意哈)