none
PDA网络连接问题 RRS feed

  • 问题

  • 我写了一个手机程序需要进行网络连线,
    当PDA接到电脑时,我希望可以判断目前已经接到电脑,
    不需要连接到GPRS.而当没有接通电脑时,则通过GPRS连接.

    我在网上查了下说

    ConnMgrQueryDetailedStatus这个函数可以实现,有人用过吗?请指教一下.
    2008年8月27日 2:34

答案

全部回复

  • 您好,

    你需要关于ConnMgrQueryDetailedStatus什么样的指教?请问您尝试过吗?遇到了什么样的问题呢?您使用过搜索引擎和MSDN吗?

    2008年8月27日 3:13
    版主
  • 我在网上搜到了这样一段代码是可以判断PDA的连接状态.

    Code Snippet

    [DllImport("CellCore.dll")]

            public static extern int ConnMgrQueryDetailedStatus(out ConnMgrConnectionDetailedStatus pStatusBuffer, out uint pcbBufferSize);

     

            [StructLayout(LayoutKind.Sequential)]

            public struct ConnMgrConnectionDetailedStatus
            {

                public IntPtr pNext;

                public uint dwVer;

                public uint dwParams;

                public uint dwType;

                public uint dwSubType;

                public uint dwFlags;

                public uint dwSecure;

                public Guid guidDestNet;

                public Guid guidSourceNet;

                public IntPtr szDescription;

                public IntPtr szAdaptername;

                public uint dwConnectionStatus;

                public SYSTEMTIME LastConnectTime;

                public uint dwSignalQuality;

                public IntPtr pIPAddr;

            }

     

            public struct SYSTEMTIME
            {

                public ushort wYear;

                public ushort wMonth;

                public ushort wDayOfWeek;

                public ushort wDay;

                public ushort wHour;

                public ushort wMinute;

                public ushort wSecond;

                public ushort wMilliseconds;

            }

     


              

    Code Snippet

      GPSExit.ConnMgrConnectionDetailedStatus pStatusBuffer;

                uint pcbBufferSize = (uint)Marshal.SizeOf(typeof(GPSExit.ConnMgrConnectionDetailedStatus));

                GPSExit.ConnMgrQueryDetailedStatus(out pStatusBuffer, out pcbBufferSize);

                string szDescription = string.Empty;

                if (pStatusBuffer.szDescription != IntPtr.Zero)
                {

                    szDescription = Marshal.PtrToStringUni(pStatusBuffer.szDescription);

                    MessageBox.Show(szDescription);

                }

                string szAdaptername = string.Empty;

                if (pStatusBuffer.szAdaptername != IntPtr.Zero)
                {

                    szAdaptername = Marshal.PtrToStringUni(pStatusBuffer.szAdaptername);

                    MessageBox.Show(szAdaptername);

                }

     

     

    但是这代码有问题,pStatusBuffer.szDescription与pStatusBuffer.szAdaptername总是空

     

    2008年8月28日 6:48
  • 你在什么设备测试的?类似的问题之前好像有人问过,你可以参考这里:

    http://blogs.msdn.com/zhengpei/archive/2007/11/01/connection-manager-what-s-in-connmgr-connection-detailed-status.aspx

    如果只是为空而不报错的话,有可能与OEM提供的Network Driver的实现有关.我没有使用这个函数的经验,也许其他人能帮助你.Good luck~

     

     

     

    2008年8月30日 12:13
    版主
  • 我是用的多普达D600手机做的测试,

    https://forums.microsoft.com/MSDN/ShowPost.aspx?PostID=2407497&SiteID=1这个测接提到过这个方法的使用,但是这个贴方法的人自已也写的有问题,他自已也在问这个代码哪里出了错,不知道你有没有我所提问的类似的开发经历.

    自动判断程序是通过USB线连接到电脑,然后通过本地网络连接到远程服务器上,如果没有,则检查是否开通GPRS,然后连接到远程服务器上.

    2008年8月31日 10:34