Recuperation du numéro de télephone et son type sans tapi

Description

Ce bout de code nous permet d'extraire le numéro de téléphone de la carte sim et son type:
- Unknown
- International
- National
- NetworkSpecific
- Subscriber
- Alphanumeric
- Abbreviated

Le code utilise l'api SmsGetPhoneNumber pour le récupérer ainsi que des parties de code unsafe

Source / Exemple :


using System;
using System.Runtime.InteropServices;
using System.Windows.Forms;
// NB dans les propriété du projet: Onglet build-> puis cochet la case Allow unsafe code.
namespace Type_et_NuméroTelephone
{
    public partial class frmMain : Form
    {
        public enum AddressType
        {
            Unknown,
            International,
            National,
            NetworkSpecific,
            Subscriber,
            Alphanumeric,
            Abbreviated
        }
        public struct PhoneAddress
        {
            public AddressType AddressType;
            public String Address;
        }
        [DllImport("sms.dll")]
        public static extern IntPtr SmsGetPhoneNumber(IntPtr psmsaAddress);
        public frmMain()
        {
            InitializeComponent();
        }
        
        unsafe public static PhoneAddress GetPhoneNumber()
        {
            PhoneAddress phoneaddr = new PhoneAddress();
            // Réservation d'un espace de 100 octet
            Byte[] buffer = new Byte[100];
            // Pointer le buffer
            fixed (byte* pAddr = buffer)
            {
                IntPtr res = SmsGetPhoneNumber((IntPtr)pAddr);

                if (res != IntPtr.Zero)
                    MessageBox.Show("Erreur, l'opération a echoué.");
                // pointer le début du buffer contenant les infos
                byte* pCurrent = pAddr;
                // Récuperer le type de l'adresse (4 premiers octets)
                phoneaddr.AddressType = (AddressType)Marshal.ReadInt32((IntPtr)pCurrent);
                // Se déplacer 4 octets.
                pCurrent += Marshal.SizeOf(phoneaddr.AddressType);
                // Récupérer le numéro de la carte sim (chaine de caracteres unicode).
                phoneaddr.Address = Marshal.PtrToStringUni((IntPtr)pCurrent);
            }
            return phoneaddr;
        }
        private void mnuQuit_Click(object sender, EventArgs e)
        {
            Application.Exit();
        }

        private void frmMain_Load(object sender, EventArgs e)
        {
            // Prendre les informations.
            PhoneAddress ad = GetPhoneNumber();
            lblPhoneNbr.Text = ad.Address;
            lblType.Text = ad.AddressType.ToString();
        }
    }
}

Conclusion :


Pour ceux qui veulent utiliser la tapi
http://www.pdafr.com/codes/NET-COMPACT-FRAMEWORK-OBTENIR-NUMERO-TELEPHONE-CARTE-SIM_40013.aspx

Codes Sources

A voir également

Vous n'êtes pas encore membre ?

inscrivez-vous, c'est gratuit et ça prend moins d'une minute !

Les membres obtiennent plus de réponses que les utilisateurs anonymes.

Le fait d'être membre vous permet d'avoir un suivi détaillé de vos demandes et codes sources.

Le fait d'être membre vous permet d'avoir des options supplémentaires.