[Windows Mobile]取得 IMEI、IMSI
1. 簡介
如何取得行動裝置的 IMEI (International Mobile Equipment Identification Number) 與 IMSI (International Mobile Subscriber Identification Number) 是在各大討論版常見的問題,首先,什麼是 IMEI 跟 IMSI ?
國際行動裝置識別碼(IMEI)是區別行動裝置的標誌,儲存在行動裝置中,可用於監控被竊或無效的行動裝置。其總長為15位,每位數字僅使用0~9的數字。其中TAC代表型號裝配碼,由歐洲型號標準中心分配;FAC代表裝配廠家號碼;SNR為產品序號,用於區別同一個TAC和FAC中的每台行動裝置;SP是備用編碼。
國際行動用戶識別碼(IMSI)是區別行動裝置用戶的標誌,儲存在SIM卡中,可用於區別行動裝置用戶的有效訊息。其總長度不超過15位,同樣使用0~9的數字。 其中MCC是行動裝置用戶所屬國家代號,佔3位數字;MNC是行動網號碼,最多由兩位數字組成,用於識別行動裝置用戶所歸屬的行動通信網;MSIN是行動用戶識別碼,用以識別某一行動通信網中的行動用戶。
本文學習目標
(1) 學習如何取得 IMEI 與 IMSI
(2) 由於 WM 修練大會即將進入尾聲,希望藉此問題,讓大家認識好用的 Library : OpenNETCF.Telephony 與 beeMobile4.net 如何使用
2. 使用 OpenNETCF.Telephony
2.1 前置作業
首先介紹如何使用 OpenNETCF.Telephony 取得 IMEI 與 IMSI,首先進行下載,並且將 OpenNetCF.Telephony 加入專案裡。下載網址
將 OpenNetCF.Telephony 重建後,產生的 OpenNETCF.Telephony.dll 加入參考中
並於程式中 using
using OpenNETCF.Telephony;
2.2 程式碼
於 Form 中加入 Button (Name :btnGetInfo,點擊後顯示 IMEI 與 IMSI)與兩個 TextBox ( Name : txtIMSI,顯示 IMSI;Name : txtIMEI,顯示 IMEI)
using System;
using System.Linq;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Text;
using System.Windows.Forms;
using OpenNETCF.Telephony;
namespace SmartDeviceTAPI
{
public partial class Form1 : Form
{
public Form1()
{
InitializeComponent();
}
private void btnGetInfo_Click(object sender, EventArgs e)
{
LineGeneralInfo deviceInfo = null;
if (GetDeviceInfo(ref deviceInfo))
{
txtIMSI.Text = deviceInfo.SubscriberNumber; // IMSI
txtIMEI.Text = deviceInfo.SerialNumber; // IMEI
}
}
private static bool GetDeviceInfo(ref LineGeneralInfo deviceInfo)
{
bool result = false;
Telephony phone = new Telephony();
try
{
phone.Initialize();
if (deviceInfo == null)
{
deviceInfo = new LineGeneralInfo(512);
}
BitConverter.GetBytes(deviceInfo.Data.Length).CopyTo(deviceInfo.Data, 0);
using (Line line = phone.CreateLine(0, MediaMode.InteractiveVoice, CallPrivilege.Monitor))
{
if (0 == NativeMethods.lineGetGeneralInfo(line.hLine, deviceInfo.Data))
{
deviceInfo.Load();
result = true;
}
}
}
finally
{
phone.Shutdown();
}
return result;
}
}
}
3. 使用 beeMobile4.net
3.1 介紹
beeMobile4.net 其實最有名是關於 Compact Framework UI 的部份,有興趣的可以到 此網頁 看看其介面設定,但幾乎都是要收費的
其中 beeMobile4.net 的 Free Utils Library 是免費的,可以使用此 Library 取得 IMEI 與 IMSI
除了取得 IMEI 與 IMSI 外,還可以做以下事情
- Resetting the device
- Keeping the back-light on
- Finding out the path to application's executable
- Getting the device's IMSI and IMEI
- Changing Volume level
- Making Screenshot
3.2 前置作業
首先將 Free Utils 下載,並且將 Free Utils 加入專案裡。下載網址
將 Utils 重建後,產生的 BeeMobile.Util.dll 加入參考中
並於程式中 using
using BeeMobile.TAPI;
3.3 程式碼
於 Form 中加入 Button (Name :btnGetInfo,點擊後顯示 IMEI 與 IMSI)與兩個 TextBox ( Name : txtIMSI,顯示 IMSI;Name : txtIMEI,顯示 IMEI)
using System;
using System.Linq;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Text;
using System.Windows.Forms;
using BeeMobile.TAPI;
namespace SmartDeviceProjectFU
{
public partial class Form1 : Form
{
public Form1()
{
InitializeComponent();
}
private void btnGetInfo_Click(object sender, EventArgs e)
{
txtIMSI.Text = PhoneInfo.GetIMSI(); // IMSI
txtIMEI.Text = PhoneInfo.GetIMEI(); // IMEI
}
}
}
4. 結語
其實取得 IMEI 跟 IMSI 的部分,這兩個 Library 都是透過調用 Windows API 取得資訊,而除了直接使用 Library 外,建議可以看看原始碼是怎麼寫的。
例如 Free Utils Library,其中 Reset Device 的程式碼與 MSDN 中的 HOW TO:重設裝置 幾乎一樣
而取得應用程式目錄的部份,其實是使用此程式碼
Path.GetDirectoryName(Assembly.GetExecutingAssembly().GetName().CodeBase);
5. 參考
SIM,PIN,PUK,IMEI,ICCID,Ki,IMSI,SMSP概念