none
Microsoft.WindowsMobile.Status.SystemState.OwnerPhoneNumber 疑問 RRS feed

  • 問題

  • Imports Microsoft.WindowsMobile.Status

    Public Class Form1

       

        Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click

           

            TextBox1.Text = Convert.ToString(SystemState.OwnerPhoneNumber)

        End Sub

    End Class


    上面的程式碼執行前出現下列錯誤訊息

    第一個可能發生的例外狀況類型 'Microsoft.WindowsMobile.Utilities.Registry.RegistryException' 發生於 Microsoft.WindowsMobile.Utilities.dll

    使用語言為 VB
    手機為 LG的 KS-20


    請大家給點建議
    謝謝


    2009年3月15日 下午 09:58

解答

  • 目前測試抓取SIM卡連絡人的姓名跟電話號碼,看起來是沒問題,也是拼拼湊湊測試出來的,沒詳細測試,程式碼如下,參考看看

    模組的程式碼
    Module Module1  
        Public Const S_OK As Int64 = &H0  
        Public Const SIM_CAPSTYPE_ALL As Integer = &H3F  
        Public Const SIM_PBSTORAGE_SIM As Integer = &H10  
        Public Const SIM_SMSSTORAGE_SIM As Integer = &H2  
     
        <StructLayout(LayoutKind.Sequential, Size:=48)> _  
            Public Structure SIMPHONEBOOKENTRY  
            Public cbSize As UInteger  
            Public dwParams As UInteger  
            <MarshalAs(UnmanagedType.ByValTStr, SizeConst:=256)> _  
            Public lpszAddress As String 
            Public dwAddressType As UInteger  
            Public dwNumPlan As UInteger  
            <MarshalAs(UnmanagedType.ByValTStr, SizeConst:=256)> _  
            Public lpszText As String 
        End Structure 
     
        <DllImport("cellcore.dll")> _  
        Public Function SimInitialize(ByVal dwFlags As UInt32, ByVal lpfnCallBack As Integer, _  
                                       ByVal dwParam As UInt32, ByRef lphSim As IntegerAs Integer 
        End Function 
     
        <DllImport("cellcore.dll")> _  
        Public Function SimGetPhonebookStatus(ByVal hSim As IntegerByVal dwLocation As UInt32, _  
                                               ByRef lpdwUsed As UInt32, ByRef lpdwTotal As UInt32) As Integer 
        End Function 
     
        <DllImport("cellcore.dll")> _  
        Public Function SimReadPhonebookEntry(ByVal hSim As IntegerByVal dwLocation As UInt32, _  
                                               ByVal dwIndex As UInt32, ByRef entry As SIMPHONEBOOKENTRY) As Integer 
        End Function 
    End Module 

    呼叫範例
    Private Sub Button1_Click(ByVal sender As System.ObjectByVal e As System.EventArgs) Handles Button1.Click  
            Dim hSim As Integer = 0  
            Dim result As Integer = SimInitialize(0, 0, 0, hSim)  
            If (result <> 0) Then Throw New Exception("Failed to Open Call Log")  
            Dim uiUsed As UInt32 = 0  
            Dim uiTotal As UInt32 = 0  
            result = SimGetPhonebookStatus(hSim, SIM_PBSTORAGE_SIM, uiUsed, uiTotal)  
            Dim entry As SIMPHONEBOOKENTRY = New SIMPHONEBOOKENTRY  
            entry.cbSize = Marshal.SizeOf(entry.GetType)  
            For i As Integer = 1 To uiUsed  
                result = SimReadPhonebookEntry(hSim, SIM_PBSTORAGE_SIM, i, entry)  
                If result = 0 Then 
                    ListBox1.Items.Add(entry.lpszText & "," & entry.lpszAddress)  
                End If 
            Next 
        End Sub 

    態度決定一切 ! - blog : http://bauann-makeit.blogspot.com/
    • 已標示為解答 jcLove 2009年3月23日 下午 06:48
    2009年3月23日 下午 03:56
    版主

所有回覆

  • Dear Sir
    首先你提供的這個是一個警告訊息,程式應該還是可以正常編譯、執行的,通常這部分是提醒你一些注意的事情。
    另外,從訊息上來看,這跟你提供的程式碼沒有多大關係哩,應該是其他部分的程式碼造成的,單用你提供的程式碼我開新的專案去看是沒有一樣的錯誤訊息。
    態度決定一切 ! - blog : http://bauann-makeit.blogspot.com/
    2009年3月16日 上午 03:52
    版主
  • 單用上面的程式
    你那邊可以看到電話號碼嗎 ?
    所以
    這樣用沒有問題?

    謝謝


    2009年3月16日 上午 04:15
  • Hi,
    在我的機子上(Tytn II,WM6.1,.net cf 2.0)是可以抓到電話號碼的("我的資訊"那裏面要設定),是可以正常抓到電話號碼的。
    態度決定一切 ! - blog : http://bauann-makeit.blogspot.com/
    2009年3月16日 上午 06:49
    版主
  • 如果在我的資訊裡面設定是可以看到
    可是如果我換SIM卡後再抓
    抓到的是之前的號碼
    也就是說
    我還是不知道換上去的SIM的電話號碼

    能再給點建議嗎 ?
    Thanks a lot



    2009年3月16日 上午 07:44
  • 你的方向錯了,你要找找跟SIM有關的,上面的是抓跟系統相關的,不管你SIM怎麼換,系統裡面設定什麼就會抓到什麼。


    態度決定一切 ! - blog : http://bauann-makeit.blogspot.com/
    2009年3月16日 上午 08:53
    版主
  • 2009年3月16日 上午 10:13
    版主
  •  感謝
    我研究一下
    2009年3月16日 上午 10:19
  • 下面程式碼我把C# 改成VB
    一執行會發生:裝置連線已經遺失
    就結束執行
    請大家給點建議
    謝謝


     

    Imports System.Runtime.InteropServices 

    Public Class Form1

     

        Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click

            Dim simCaps As New SimWrap.SimCaps

            Dim hSim As Integer = 0

            Dim phoneUsed As UInteger = 0

            Dim phoneTotal As UInteger = 0

            Dim smsUsed As UInteger = 0

            Dim smsTotal As UInteger = 0

            Dim result As Long

            result = SimWrap.SimInitialize(SimWrap.SIM_INIT_SIMCARD_NOTIFICATIONS, 0, 0, hSim)  

     

            Dim usedLocations As UInteger = 0        'Number of locations used

            Dim totalCapicity As UInteger = 0       'Total number of locations

            result = SimWrap.SimGetPhonebookStatus(hSim, SimWrap.SIM_PBSTORAGE_SIM, usedLocations, totalCapicity)

            SimWrap.SimDeinitialize(hSim)

            result = SimWrap.SimInitialize(SimWrap.SIM_INIT_SIMCARD_NOTIFICATIONS, 0, 0, hSim)

            Dim entry As New SimWrap.SIMPHONEBOOKENTRY

            Dim index As UInteger = 1       'Index of the entry to read

     

            For index = 1 To 1 'totalCapicity

                result = SimWrap.SimReadPhonebookEntry(hSim, SimWrap.SIM_PBSTORAGE_SIM, index, entry)

                Dim newContact As New SimWrap.CONTACTINFO

                newContact.contactName = Marshal.PtrToStringUni(entry.lpszText)

                newContact.contactNumber = Marshal.PtrToStringUni(entry.lpszAddress)

                TextBox1.Text = TextBox1.Text & newContact.contactName

                TextBox2.Text = TextBox2.Text & newContact.contactNumber

            Next

     

            'End SIM Manager session

            SimWrap.SimDeinitialize(hSim)

        End Sub

    End Class

     

     

    2009年3月16日 下午 09:03
  • 首先, 先確定一個問題:你是想要取得 系統業者 所給手機的門號是嗎?

    就像那個 thread 裡面講到的, 這些 SIM API 只能 access SIM card 裡頭的 entry (像 phone book 這些), 但能不能取得 operator 所給的 subscriber number, 則是一個問號, 或許有些可以, 有些不行, 而假如是 CDMA 的系統, 因為沒有 SIM card,所以上面的方式,會拿不到手機的門號。

    下面所寫的,是以要拿到系統業者所提供的手機門號為原則:

    換個角度來思考, 系統總還是會知道自己的門號, 所以應該還是有很多其它方法可以用, 只是可能沒有 .net component 可以用, 而要直接 invoke API。
    而就 WM device 而言, 跟 modem or phone base band 溝通的就是 RIL driver, 所以可以用 RIL_GetSubscriberNumbers 這個在 RIL.DLL 裡的 API http://msdn.microsoft.com/en-us/library/aa921540.aspx, 然而使用 RIL API 前都要先做 RIL_Initialize http://msdn.microsoft.com/en-us/library/aa919106.aspx,而因為 RIL_GetSubscriberNumbers 是 async. mode API call, return value 也會從 call back function (透過 RIL_Initialize 註冊上去) 才能取得, 用起來不是那麼方便。

    RIL 再往上的 level, 就是 TAPI 這一層。
    其中跟門號有關的是 lineGetAddressCaps 在 coredll.dll http://msdn.microsoft.com/en-us/library/aa920138.aspx
    而也可以參考一下這篇 http://msdn.microsoft.com/en-us/library/bb158759.aspx 或 http://blogs.msdn.com/windowsmobile/archive/2004/11/28/271110.aspx
    此外假如是透過 TAPI 來做, 除了透過 RIL (Built In 的 modem), 假如是透過外部連線 (車機常是用 BT) 也可以取得。

    此外在 CellCore 的其它架構在 RIL 之上的 component,除了前面板主提到的 SIM 之外, 還有一個也很常用到的就是 Sms API。 其中 SmsGetPhoneNumber 在 sms.dll 中 http://msdn.microsoft.com/en-us/library/aa918608.aspx 是用來取得 目前用來發送 SMS 的門號, 不過通常這在大部份情況就是手機門號 (除非說 手機是雙門號 or 有連到外部 device, 然後是用外部 device 來發簡訊的特例), 所以也可以用這個 API 來做。 不過畢竟是湊合著用似乎也不太理想.

    而再往上就到了一些 Shell API 的 helper function, 這邊有一個 undocument 但其實還是滿多人在用的 API SHGetPhoneNumber, 可以看一下 http://social.msdn.microsoft.com/Search/en-US/?query=shgetphonenumber&ac=8 or google 一下就會有. 不過特別注意, SHGetPhoneNumber 這個 API 其實並不存在而只是 SHReadLineAddressCaps 在 ccoreutl.dll 的 wrapper, 以下把 prototype 貼出來比較清楚

    HRESULT SHReadLineAddressCaps(LPTSTR szNumber, PDWORD pdwCallFwdModes, UINT nLineNumber);
    #define SHGetPhoneNumber(sz, n) SHReadLineAddressCaps(sz, NULL, n)  
     

    總之, 還是可以繼續用 SIM api 來試看看, 但就算解決了目前的問題, 或許可以或許還是拿到不到手機門號.
    而比較保證沒問題的方法, 可能還是要回歸到 RIL, TAPI 等這些 API 直接從 base band 取得。
    而選擇從最低階的 RIL_GetSubscriberNumbers (RIL.DLL) 或是 TAPI 層的 lineGetAddressCaps (coredll.dll) (這應該是最理想, 也給予最多彈性空間的 API), 或是利用給 application level API (參數通常較簡單) Sms level 的 SmsGetPhoneNumber (sms.dll) 或是 Shell API (undocument API 以後很可能會無預警的消失) 的 SHGetPhoneNumber (其實並不存在 只是 SHReadLineAddressCaps 的 wrapper) and SHReadLineAddressCaps (ccoreutl.dll)  都是可以選擇的方向.
    不過..., 這些都不是 .net component, 所以都只能裡用 P/Invoke 方式來做,或是要看看有沒有人把它們包裝成 .net wrapper class。
    • 已編輯 JocoboNY 2009年3月17日 下午 12:18
    2009年3月17日 上午 04:54
  • 我是想知道手機號碼跟SIM卡上的聯絡人
    所以
    我post得程式碼希望可以得知聯絡人
    感謝你的大力幫忙
    我會再試試
    謝謝

         
    2009年3月17日 上午 06:58
  • SimInitialize http://msdn.microsoft.com/en-us/library/aa923150.aspx 第二個 參數Callback function, 不過要配合第一個參數用。所以 Callback fn 跟 SIM_INIT_SIMCARD_NOTIFICATIONS 兩個是要一起出現。

    上面的 code 有 SIM_INIT_SIMCARD_NOTIFICATIONS 卻沒有 CB fn ,看看是不是把 第一個 parameter dwFlags 改成 0 試試。
    • 已提議為解答 JocoboNY 2009年3月17日 下午 06:06
    2009年3月17日 下午 06:05
  • 如果我用下面的程式
    並不會發生裝置連接遺失
    也可以知道我現在有幾封簡訊

    可是之前我post的程式碼想要獨聯絡人回來
    卻不能正常動作
    開始跟結束方法都相同
    我是覺得 SimReadPhonebookEntry這各API我是不是使用有問題 ?

    我還是希望先用SIM API來做出一個結果
    請大家再給些建議
    非常感謝



    Private
    Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click

            Dim simCaps As New SimWrap.SimCaps

            Dim hSim As Integer = 0

            Dim phoneUsed As UInteger = 0

            Dim phoneTotal As UInteger = 0

            Dim smsUsed As UInteger = 0

            Dim smsTotal As UInteger = 0

            ' Start SIM Manager session (get handle)

            SimWrap.SimInitialize(0, 0, 0, hSim)

            ' Get Messages (SMS) status (used, total)

            SimWrap.SimGetSmsStorageStatus(hSim, SimWrap.SIM_SMSSTORAGE_SIM, smsUsed, smsTotal)

            TextBox1.Text = smsTotal.ToString()

            TextBox2.Text = smsUsed.ToString()

            'End SIM Manager session

            SimWrap.SimDeinitialize(hSim)

    End Sub

    2009年3月17日 下午 11:34
  • 應該是你的 SIMPHONEBOOKENTRY::cbSize 沒有被 initialize
    entry.cbSize = sizeof(SIMPHONEBOOKENTRY);
    或 search 一下 應該會有不少 sample 例: http://social.msdn.microsoft.com/Forums/en-US/vssmartdevicesvbcs/thread/b9db04b7-236c-4588-b00e-ea930ad4f113/
    2009年3月18日 上午 05:57
  • 我把 cbsize設成1000

    c=SimReadPhonebookEntry(0,16,1,entry)
    上面這一行傳回值 0
    不就代表使用成功?
    這樣是否代表SIM卡內容的起始點已經記在entry這各結構中?


    我把這結構中代表姓名跟電話的內容讀回來
    結果都是六個數字
    又很奇怪

    請大家給點建議吧
    謝謝

    2009年3月18日 上午 08:59
  • 而 SimReadPhonebookEntry 的第一個 parameter 應該是 hSIM (透過 SimInitialize get 到的) 而不是 0 ...
    然後 在 執行 SimReadPhonebookEntry 後可以 檢查 一下 那個 entry.dwParams 看看是有那些 field 是有效的。
    2009年3月18日 上午 11:08
  • c= SimReadPhonebookEntry(hsim,16,0,entry)
    c 看到的值為 0
    這樣應該代表OK !

    之後看entry結構下的內容如下
    entry.dwParams=15 ... 代表全部都有效

    Q1:
    entry.lpszText.ToString=3670073
    entry.dwAddressType=3539000
    卻都看不到姓名跟電話號碼

    Q2:
    entry.cbsize=CInt(Marshal.SizeOf(SIMPHONEBOOKENTRY))
    SIMPHONEBOOKENTRY是結構,可是錯誤清單又顯示錯誤 ,

    請大家給點建議
    謝謝

    2009年3月18日 下午 12:25
  • 以下引用 http://social.msdn.microsoft.com/Forums/en-US/vssmartdevicesvbcs/thread/b9db04b7-236c-4588-b00e-ea930ad4f113/ (之前給你的URL)

    ---------------------------------------------------------------------------------------------------------------------------------------------
    Hi Jeevanand.R,
    Sim contacts index is from 1, not from 0, you should change the following code:

    Code Snippet
    result = SimReadPhonebookEntry(hSim, SIM_PBSTORAGE_SIM, 0, ref entry)

     To:

    Code Snippetresult = SimReadPhonebookEntry(hSim, SIM_PBSTORAGE_SIM, 1, ref entry);
    Or other index, you will get sim contacts data.
    I have tried it , it works fine in my local.
    Best regards,
    Guang-Ming Bian - MSFT
    -------------------------------------------------------------------------------------------------------------------------------------------------------


     

    2009年3月19日 下午 05:41
  • 感謝你的大力幫忙

    基本上
    那些連結中的內容
    我看很多次了
    index我們是從1開始

    index : 我們從1到5 去抓entry.dwaddress的內容回來看
    發現都是7位數數字
    還有發現
    在index=4之後的數字都一樣了
    可是聯絡人沒有那麼少

    請大家給點建議
    謝謝


                       
    2009年3月19日 下午 09:46
  • 下面是我目前的程式碼
    就是讀不回姓名與號碼
    但是
    dwparams=15又代表field是有效的
    請大家幫忙一下
    謝謝

    ---------------code---------------------------

    Imports System
    Imports System.Runtime.InteropServices
    Imports System.Drawing
    Imports System.Collections
    Imports System.Windows.Forms
    Imports System.Data

    Module Module1
      
        Sub main()
            Dim simCaps As New SimWrap.SimCaps
            Dim hSim As Integer = 0
            Dim phoneUsed As UInteger = 0
            Dim phoneTotal As UInteger = 0
            Dim smsUsed As UInteger = 0
            Dim smsTotal As UInteger = 0
            Dim a As Integer
            Dim b As String
            Dim entry As SimWrap.SIMPHONEBOOKENTRY
            Dim index As Integer = 1
            SimWrap.SimInitialize(0, 0, 0, hSim)
            SimWrap.SimGetPhonebookStatus(hSim, SimWrap.SIM_PBSTORAGE_SIM, phoneUsed, phoneTotal)
            a = phoneTotal
            SimWrap.SimGetDevCaps(hSim, SimWrap.SIM_CAPSTYPE_ALL, simCaps)
            SimWrap.SimGetSmsStorageStatus(hSim, SimWrap.SIM_SMSSTORAGE_SIM, smsUsed, smsTotal)
            entry.cbSize = 1000
            b = SimWrap.SimReadPhonebookEntry(hSim, 16, index, entry)
            Dim newContact As New SimWrap.CONTACTINFO
            'newContact.contactName = Marshal.PtrToStringUni(entry.lpszText)
            b = entry.lpszAddress
            MsgBox(b)
            'MsgBox(newContact.contactNumber)
            SimWrap.SimDeinitialize(hSim)
        End Sub

        Public Class SimWrap
            Public Const SIM_CAPSTYPE_ALL As Integer = 63 '0x3F
            Public Const SIM_PBSTORAGE_SIM As Integer = 16 '0x10
            Public Const SIM_SMSSTORAGE_SIM As Integer = 2
            Public Const S_OK As Long = 0 '0x00000000
            Public Const SIM_INIT_SIMCARD_NOTIFICATIONS As Integer = 0
            <StructLayout(LayoutKind.Sequential)> _
            Public Structure SimLockingPwdLength
                Public dwFacility As UInteger
                Public dwPasswordLength As UInteger
            End Structure
            <StructLayout(LayoutKind.Sequential)> _
            Public Structure SimCaps
                Public cbSize As UInteger
                Public dwParams As UInteger
                Public dwPBStorages As UInteger
                Public dwMinPBIndex As UInteger
                Public dwMaxPBIndex As UInteger
                Public dwMaxPBEAddressLength As UInteger
                Public dwMaxPBETextLength As UInteger
                Public dwLockFacilities As UInteger
                Public dwReadMsgStorages As UInteger
                Public dwWriteMsgStorages As UInteger
                Public dwNumLockingPwdLengths As UInteger
                Public rgLockingPwdLengths0 As SimLockingPwdLength
                Public rgLockingPwdLengths1 As SimLockingPwdLength
                Public rgLockingPwdLengths2 As SimLockingPwdLength
                Public rgLockingPwdLengths3 As SimLockingPwdLength
                Public rgLockingPwdLengths4 As SimLockingPwdLength
                Public rgLockingPwdLengths5 As SimLockingPwdLength
                Public rgLockingPwdLengths6 As SimLockingPwdLength
                Public rgLockingPwdLengths7 As SimLockingPwdLength
                Public rgLockingPwdLengths8 As SimLockingPwdLength
                Public rgLockingPwdLengths9 As SimLockingPwdLength
            End Structure
            <StructLayout(LayoutKind.Sequential, CharSet:=CharSet.Auto)> _
            Public Structure SIMPHONEBOOKENTRY
                Public cbSize As UInteger
                Public dwParams As UInteger
                Public lpszAddress As IntPtr
                Public dwAddressType As UInteger
                Public dwNumPlan As UInteger
                Public lpszText As IntPtr
            End Structure
            Public Structure CONTACTINFO
                Public contactName As String
                Public contactNumber As String
            End Structure
            <DllImport("cellcore.dll")> _
            Public Shared Function SimInitialize(ByVal dwFlags As UInteger, ByVal lpfnCallBack As Integer, ByVal dwParam As UInteger, ByRef lphSim As Integer) As Integer
            End Function
            <DllImport("cellcore.dll")> _
            Public Shared Function SimDeinitialize(ByVal hSim As Integer) As Integer
            End Function
            <DllImport("cellcore.dll")> _
            Public Shared Function SimGetPhonebookStatus(ByVal hSim As Integer, ByVal dwLocation As UInteger, ByRef lpdwUsed As UInteger, ByRef lpdwTotal As UInteger) As Integer
            End Function
            <DllImport("cellcore.dll")> _
            Public Shared Function SimGetDevCaps(ByVal hSim As Integer, ByVal dwCapsType As UInteger, ByRef lpSimCaps As SimCaps) As Integer
            End Function
            <DllImport("cellcore.dll")> _
            Public Shared Function SimGetSmsStorageStatus(ByVal hSim As Integer, ByVal dwStorage As UInteger, ByRef lpdwUsed As UInteger, ByRef lpdwTotal As UInteger) As Integer
            End Function
            <DllImport("cellcore.dll")> _
            Public Shared Function SimReadPhonebookEntry(ByVal hSim As Integer, ByVal dwLocation As UInteger, ByVal index As UInteger, ByRef entry As SIMPHONEBOOKENTRY) As Integer
            End Function
        End Class

    End Module
    2009年3月20日 上午 07:09
  • 目前測試抓取SIM卡連絡人的姓名跟電話號碼,看起來是沒問題,也是拼拼湊湊測試出來的,沒詳細測試,程式碼如下,參考看看

    模組的程式碼
    Module Module1  
        Public Const S_OK As Int64 = &H0  
        Public Const SIM_CAPSTYPE_ALL As Integer = &H3F  
        Public Const SIM_PBSTORAGE_SIM As Integer = &H10  
        Public Const SIM_SMSSTORAGE_SIM As Integer = &H2  
     
        <StructLayout(LayoutKind.Sequential, Size:=48)> _  
            Public Structure SIMPHONEBOOKENTRY  
            Public cbSize As UInteger  
            Public dwParams As UInteger  
            <MarshalAs(UnmanagedType.ByValTStr, SizeConst:=256)> _  
            Public lpszAddress As String 
            Public dwAddressType As UInteger  
            Public dwNumPlan As UInteger  
            <MarshalAs(UnmanagedType.ByValTStr, SizeConst:=256)> _  
            Public lpszText As String 
        End Structure 
     
        <DllImport("cellcore.dll")> _  
        Public Function SimInitialize(ByVal dwFlags As UInt32, ByVal lpfnCallBack As Integer, _  
                                       ByVal dwParam As UInt32, ByRef lphSim As IntegerAs Integer 
        End Function 
     
        <DllImport("cellcore.dll")> _  
        Public Function SimGetPhonebookStatus(ByVal hSim As IntegerByVal dwLocation As UInt32, _  
                                               ByRef lpdwUsed As UInt32, ByRef lpdwTotal As UInt32) As Integer 
        End Function 
     
        <DllImport("cellcore.dll")> _  
        Public Function SimReadPhonebookEntry(ByVal hSim As IntegerByVal dwLocation As UInt32, _  
                                               ByVal dwIndex As UInt32, ByRef entry As SIMPHONEBOOKENTRY) As Integer 
        End Function 
    End Module 

    呼叫範例
    Private Sub Button1_Click(ByVal sender As System.ObjectByVal e As System.EventArgs) Handles Button1.Click  
            Dim hSim As Integer = 0  
            Dim result As Integer = SimInitialize(0, 0, 0, hSim)  
            If (result <> 0) Then Throw New Exception("Failed to Open Call Log")  
            Dim uiUsed As UInt32 = 0  
            Dim uiTotal As UInt32 = 0  
            result = SimGetPhonebookStatus(hSim, SIM_PBSTORAGE_SIM, uiUsed, uiTotal)  
            Dim entry As SIMPHONEBOOKENTRY = New SIMPHONEBOOKENTRY  
            entry.cbSize = Marshal.SizeOf(entry.GetType)  
            For i As Integer = 1 To uiUsed  
                result = SimReadPhonebookEntry(hSim, SIM_PBSTORAGE_SIM, i, entry)  
                If result = 0 Then 
                    ListBox1.Items.Add(entry.lpszText & "," & entry.lpszAddress)  
                End If 
            Next 
        End Sub 

    態度決定一切 ! - blog : http://bauann-makeit.blogspot.com/
    • 已標示為解答 jcLove 2009年3月23日 下午 06:48
    2009年3月23日 下午 03:56
    版主
  • 感謝版主
    真的可以抓到聯絡簿中的聯絡人了

    感謝大家的幫忙

    2009年3月23日 下午 06:47