Connect to Internet via GPRS on Pocket PC (CSharp)

Материал из PDA Prime_wiki

Содержание

Описание

Иногда нам требуется создать интернет-соединение с карманного компьютера (PocketPC). В этом примере описывается, как подключиться к интернету с КПК через GPRS или 3G.

Код

using System;
using System.Drawing;
using System.Collections;
using System.Windows.Forms;
using System.Data;
using System.Text;
using System.Net;
using System.Runtime.InteropServices;
using System.Threading;

namespace SmartDeviceApplication1
{
        /// <summary>
        /// </summary>
        /// 
        
        public class GPRSConnection 
        { 
                const int S_OK = 0; 
                const uint CONNMGR_PARAM_GUIDDESTNET = 0x1; 
                const uint CONNMGR_FLAG_PROXY_HTTP = 0x1; 
                const uint CONNMGR_PRIORITY_USERINTERACTIVE = 0x08000; 
                const uint INFINITE = 0xffffffff; 
                const uint CONNMGR_STATUS_CONNECTED = 0x10; 
                static Hashtable ht = new Hashtable(); 
                static GPRSConnection() 
                { 
                        ManualResetEvent mre = new ManualResetEvent(false); 
                        mre.Handle = ConnMgrApiReadyEvent(); 
                        mre.WaitOne(); 
                        CloseHandle(mre.Handle); 
                } 
                ~GPRSConnection() 
                { 
                        ReleaseAll(); 
                } 
                public static bool Setup(Uri url) 
                { 
                        return Setup(url.ToString()); 
                } 
                public static bool Setup(string urlStr) 
                { 
                        ConnectionInfo ci = new ConnectionInfo(); 
                        IntPtr phConnection = IntPtr.Zero; 
                        uint status = 0;
                        if (ht[urlStr] != null)
                        {
                                return true;
                        }
                        if (ConnMgrMapURL(urlStr, ref ci.guidDestNet, IntPtr.Zero) != S_OK)
                        {
                                return false;
                        }
                        ci.cbSize = (uint)Marshal.SizeOf(ci); 
                        ci.dwParams = CONNMGR_PARAM_GUIDDESTNET; 
                        ci.dwFlags = CONNMGR_FLAG_PROXY_HTTP; 
                        ci.dwPriority = CONNMGR_PRIORITY_USERINTERACTIVE; 
                        ci.bExclusive = 0; 
                        ci.bDisabled = 0; 
                        ci.hWnd = IntPtr.Zero; 
                        ci.uMsg = 0; 
                        ci.lParam = 0;
                        if (ConnMgrEstablishConnectionSync(ref ci, ref phConnection, INFINITE, ref status) != S_OK && status != CONNMGR_STATUS_CONNECTED)
                        {
                                return false;
                        }
                        ht[urlStr] = phConnection; 
                        return true; 
                } 
                public static bool Release(Uri url) 
                { 
                        return Release(url.ToString()); 
                } 
                public static bool Release(string urlStr) 
                { 
                        return Release(urlStr, true); 
                } 
                private static bool Release(string urlStr, bool removeNode) 
                { 
                        bool res = true; 
                        IntPtr ph = IntPtr.Zero;
                        if (ht[urlStr] == null)
                        {
                                return true;
                        }
                        ph = (IntPtr)ht[urlStr];
                        if (ConnMgrReleaseConnection(ph, 1) != S_OK)
                        {
                                res = false;
                        }
                        CloseHandle(ph);
                        if (removeNode)
                        {
                                ht.Remove(urlStr);
                        }
                        return res; 
                } 
                public static void ReleaseAll() 
                { 
                        foreach (DictionaryEntry de in ht) 
                        { 
                                Release((string)de.Key, false); 
                        } 
                        ht.Clear(); 
                } 
                [StructLayout(LayoutKind.Sequential)]  
                        public struct ConnectionInfo 
                { 
                        public uint cbSize; 
                        public uint dwParams; 
                        public uint dwFlags; 
                        public uint dwPriority; 
                        public int bExclusive; 
                        public int bDisabled; 
                        public Guid guidDestNet; 
                        public IntPtr hWnd; 
                        public uint uMsg; 
                        public uint lParam; 
                        public uint ulMaxCost;
                        public uint ulMinRcvBw; 
                        public uint ulMaxConnLatency;        
                } 
                [DllImport("cellcore.dll")]       
                private static extern int ConnMgrMapURL(string pwszURL, ref Guid pguid, IntPtr pdwIndex); 
                [DllImport("cellcore.dll")] 
                private static extern int ConnMgrEstablishConnectionSync(ref ConnectionInfo ci, ref IntPtr phConnection, uint dwTimeout, ref uint pdwStatus); 
                [DllImport("cellcore.dll")] private static extern IntPtr ConnMgrApiReadyEvent();        
                [DllImport("cellcore.dll")] private static extern int ConnMgrReleaseConnection(IntPtr hConnection, int bCache);        
                [DllImport("coredll.dll")] private static extern int CloseHandle(IntPtr hObject);    
        }

        public class Form1 : System.Windows.Forms.Form
        {
                private System.Windows.Forms.MainMenu mainMenu1;

                public Form1()
                {
                        //

                        //
                        InitializeComponent();

                        //
        
                        //
                }
                /// <summary>
                /// </summary>
                protected override void Dispose( bool disposing )
                {
                        base.Dispose( disposing );
                }
                #region Windows 
                /// <summary>

                /// </summary>
                private void InitializeComponent()
                {
                        this.mainMenu1 = new System.Windows.Forms.MainMenu();
                        // 
                        // Form1
                        // 
                        this.Menu = this.mainMenu1;
                        this.Text = "Form1";
                        this.Load += new System.EventHandler(this.Form1_Load);

                }
                #endregion

                /// <summary>
                /// </summary>

                static void Main() 
                {
                        Application.Run(new Form1());
                }

                private void Form1_Load(object sender, System.EventArgs e)
                {
                
                }
        }
}

Ссылки