Pour récupérer le numéro de téléphone contenu dans la carte SIM de notre appareil Microsoft Windows Mobile, nous allons avoir besoin d’une DLL managée qui se nomme TapiLib.dll Disponible à cette adresse : http://iow4.net/public/TapiLib.rar
Note : le SDK de développement pour SmartPhone doit être installé sur votre système et vous devez posséder Visual Studio.
Une fois le téléchargement de la DLL terminé et le pré-requis précédent rempli, voici la marche à suivre pour créer un projet :
- Créez un nouveau projet Visual C# SmartDeviceApplication
- Ouvrez l’explorateur de solution, faite un clique droit sur Références puis Add Reference
- Cliquez sur Browse… et sélectionnez la DLL TapiLib à l’endroit ou vous l’avez téléchargé précédemment
- La DLL est ajoutée, Il faut maintenant inclure le namespace, ouvrez votre fichier de code et ajouté en haut :
using OpenNETCF.Tapi;
Une fois la DLL incluse et le namespace ajouté, vous pouvez commencer à utiliser la DLL dans votre code. Cependant même avec TapiLib remplissant le rôle de couche d'abstraction, la récupération du numéro de téléphone n'est pas simple et nécessite quelques vérifications, c'est pourquoi nous allons avoir recourt à une fonction managée à inclure dans votre fichier de code CSharp Cette fonction ne prendra pas de paramètres mais en revanche retournera un string contenant le numéro de téléphone directement.
string num() { Tapi tapi = new Tapi(); tapi.Initialize(); Hashtable DeviceCaps; int deviceIDCell = -1; DeviceCaps = new Hashtable(); string szPhoneNumber = ""; for( int i = 0; i < tapi.NumDevices; i++ ) { LINEDEVCAPS dc = new LINEDEVCAPS(1024); dc.Store(); int dwVersion = tapi.NegotiateVersion(i); int ret = NativeTapi.lineGetDevCaps(tapi.hLineApp, i, dwVersion, 0, dc.Data); if ( ret < 0 ) continue; if ( (LINEERR)ret == LINEERR.STRUCTURETOOSMALL ) { dc.Data = new byte[dc.dwNeededSize]; ret = NativeTapi.lineGetDevCaps(tapi.hLineApp, i, dwVersion, 0, dc.Data); } dc.Load(); if (dc != null && dc.ProviderName == CellTSP.CELLTSP_PROVIDERINFO_STRING) { LINEADDRESSCAPS ac = new LINEADDRESSCAPS(1024); ac.Store(); ret = NativeTapi.lineGetAddressCaps(tapi.hLineApp, i, 0, dwVersion, 0, ac.Data); ac.Load(); szPhoneNumber = Encoding.Unicode.GetString(ac.Data, ac.dwAddressOffset, ac.dwAddressSize); ac = null; deviceIDCell = i; break; } } if (deviceIDCell == -1) // Not found MessageBox.Show("Could not find cellular line"); tapi.Shutdown(); return szPhoneNumber; }
Cette fonction (un peu modifiée) est issue de l’exemple fournit avec la DLL.
Pour obtenir le numéro de téléphone il suffit maintenant d'appeler la fonction num();