• <ins id="pjuwb"></ins>
    <blockquote id="pjuwb"><pre id="pjuwb"></pre></blockquote>
    <noscript id="pjuwb"></noscript>
          <sup id="pjuwb"><pre id="pjuwb"></pre></sup>
            <dd id="pjuwb"></dd>
            <abbr id="pjuwb"></abbr>

            Benjamin

            靜以修身,儉以養德,非澹薄無以明志,非寧靜無以致遠。
            隨筆 - 397, 文章 - 0, 評論 - 196, 引用 - 0
            數據加載中……

            Windows Mobile中如何更改來電鈴聲

            來電鈴聲的設置在注冊表中的HKEY_CURRENT_USER\\ControlPanel\\Sounds\\RingTone0\\Script下的值,就是所要播放的鈴聲文件。查看Windows Mobile下的注冊表,用VS2005中Visual Studio Remote Tools->Remote Registry Editor工具就可以,不須其他的軟件。
            我們可以在電話來了后根據號碼播放不同的鈴聲,然后在通話結束再將鈴聲恢復。下面是通過MAPI來實現
            1.判斷來電號碼
            VOID CALLBACK LineCallback(DWORD hDevice, DWORD dwMsg, DWORD dwCallbackInstance, DWORD dwParam1, DWORD dwParam2, DWORD dwParam3)
            {
             switch(dwMsg)
                {
                case LINE_CALLINFO://1L呼叫信息
              {
               switch(dwParam1)
               {
               case LINECALLINFOSTATE_CALLERID://0x00008000
                {
                 LINECALLINFO *lpCallInfo;
                 lpCallInfo = (LINECALLINFO *)malloc(sizeof(LINECALLINFO)+1000);
                 memset(lpCallInfo, 0, sizeof(LINECALLINFO)+1000);
                 lpCallInfo->dwTotalSize = sizeof(LINECALLINFO)+1000;
                 while (1)
                 {
                  lineGetCallInfo( (HCALL)hDevice, lpCallInfo);
                  if (lpCallInfo->dwTotalSize < lpCallInfo->dwNeededSize)
                   lpCallInfo = (LINECALLINFO *)realloc(lpCallInfo,lpCallInfo->dwNeededSize);
                  else
                   break;
                 }
                 
                 lstrcpy(szPhoneNumber,(LPTSTR)((LPSTR)((DWORD)lpCallInfo+(DWORD)lpCallInfo->dwCallerIDOffset)));
                 free(lpCallInfo);
                 // szPhoneNumber  ---- 呼入的電話號碼
                 //char strPhoneNumber[30 + 1] = {0};
               //在這里根據號碼來設置鈴聲
               
                             
            }
              break;
             case LINE_LINEDEVSTATE:
              break;
             case LINE_APPNEWCALL:  //有呼叫進來23L
              break;
             case LINE_REPLY:
              break;
             case LINE_CALLSTATE:  //呼叫狀態2
              {
              case LINECALLSTATE_DISCONNECTED://掛機
               {
                     RedoReg();
               }
               break;
              }
              break;
             }
            }
            DWORD InitializeTAPI(void)
            {
             ReadReg();//讀系統中默認的鈴聲設置
                 //在啟動中加入初始化
             if ( lineInitialize( &LineApp, g_hInst, (LINECALLBACK)LineCallback, g_szAppWndClass, &LineHandleCount) == 0)
             {
              LineHandles = new HLINE[LineHandleCount];
              for(DWORD i = 0; i < LineHandleCount; i++)
              {
               int rc;
               DWORD ver;
               LINEEXTENSIONID extensionID;
               
               if ( lineNegotiateAPIVersion( LineApp, i, 0x00010003, 0x00020000, &ver, &extensionID) == 0)
               {
                rc = lineOpen( LineApp,
                 i,
                 &LineHandles[i],
                 ver,
                 0,
                 (DWORD)0,
                 LINECALLPRIVILEGE_MONITOR|LINECALLPRIVILEGE_OWNER,
                 LINEMEDIAMODE_INTERACTIVEVOICE,
                 NULL);
                        }
                    }
             }
             
             return 0;
            }
            2,讀取并保存系統鈴聲
            void ReadReg(void)
            {
             HKEY hKey = NULL;
                HKEY hSubKey = NULL;
             LRESULT SS;
             SS = RegOpenKeyEx(HKEY_CURRENT_USER ,L"\\ControlPanel\\Sounds\\RingTone0", 0,0,&hKey);
             if(ERROR_SUCCESS != SS)//打開注冊表失敗
              RegCloseKey (hKey);


             DWORD    lpType = 1; 
             DWORD   lpcbData = 80;
             SS = RegQueryValueEx(hKey ,L"Script", (LPDWORD)NULL,NULL,(BYTE*)lpData,&lpcbData);
             DWORD Result = GetLastError();
             if(ERROR_SUCCESS != SS)//讀鍵值失敗
              RegCloseKey (hKey);
            }
            3,更改鈴聲設置
            void WriteReg(void)
            {
             LRESULT lr;
             HRESULT hr = E_FAIL;
             HKEY hKey = NULL;
             DWORD dwDisposition;
             TCHAR wszValue[60] = L"a";
             
             lr = RegCreateKeyEx(HKEY_CURRENT_USER, TEXT("\\ControlPanel\\Sounds\\RingTone0"),
              0, NULL, 0, 0, NULL,
              &hKey, &dwDisposition);
             if (lr != ERROR_SUCCESS)
              RegCloseKey(hKey);
             
             lr = RegSetValueEx(hKey, L"Script", 0, REG_SZ, (LPBYTE) wszValue, (lstrlen(wszValue) + 1) * sizeof(TCHAR));
             if (lr != ERROR_SUCCESS)
              RegCloseKey(hKey);
             
             RegCloseKey(hKey);
             hKey = NULL;
            }

            4.通話結束,釋放資源并恢復系統鈴聲
            void ReleaseLine(void)
            {
             RedoReg();

             for ( DWORD i=0; i<LineHandleCount; i++ )
             {
              lineClose( LineHandles[ i ] );
             }
            void ReadReg(void)
            {
             HKEY hKey = NULL;
                HKEY hSubKey = NULL;
             LRESULT SS;
             SS = RegOpenKeyEx(HKEY_CURRENT_USER ,L"\\ControlPanel\\Sounds\\RingTone0", 0,0,&hKey);
             if(ERROR_SUCCESS != SS)//打開注冊表失敗
              RegCloseKey (hKey);


             DWORD    lpType = 1; 
             DWORD   lpcbData = 80;
             SS = RegQueryValueEx(hKey ,L"Script", (LPDWORD)NULL,NULL,(BYTE*)lpData,&lpcbData);
             DWORD Result = GetLastError();
             if(ERROR_SUCCESS != SS)//讀鍵值失敗
              RegCloseKey (hKey);
            }
             delete[] LineHandles;
             lineShutdown( LineApp );

            }

            注意包含頭文件的順序,否則會出現很多編譯錯誤;在EVC上表現的比較明顯

            posted on 2009-02-22 21:12 Benjamin 閱讀(2758) 評論(7)  編輯 收藏 引用 所屬分類: PDA/PPC開發

            評論

            # re: Windows Mobile中如何更改來電鈴聲  回復  更多評論   

            你好:你的根據來電號碼改變鈴聲的方案,我嘗試過了。有個問題,mobile手機會首先想起鈴聲,然后我們才能夠在LineCallback這個回調中捕獲來電號碼,這時作出處理已經晚了,不知有何方法能夠防止這種現象發生?
            2009-12-12 22:03 | tank

            # re: Windows Mobile中如何更改來電鈴聲  回復  更多評論   

            可以先不放鈴聲,待號碼出來后再放。自己放,用戶應答或是超時未應答,停止放音。也可以自己做來電顯示,把系統的屏蔽掉
            2009-12-13 17:35 | Benjamin

            # re: Windows Mobile中如何更改來電鈴聲  回復  更多評論   

            case LINE_CALLSTATE: //呼叫狀態2
            {
            case LINECALLSTATE_DISCONNECTED://掛機
            {
            RedoReg();
            }
            break;
            }
            break;


            ??????????????????????
            2010-05-13 09:56 | lindix

            # re: Windows Mobile中如何更改來電鈴聲  回復  更多評論   

            how can the code work??
            2010-05-13 09:57 | lindix

            # re: Windows Mobile中如何更改來電鈴聲  回復  更多評論   

            RedoReg()是自定義的函數,功能是恢復注冊表的初始設置,恢復到原來的鈴聲設置。
            2010-05-13 20:37 | Benjamin

            # re: Windows Mobile中如何更改來電鈴聲  回復  更多評論   

            @Benjamin
            先不放鈴聲,待號碼出來后再放,那時我們再修改音樂已經晚了,不能控制來電時的播放器,自己開一個播放器放不出聲音,怎么辦?
            2010-07-07 22:16 | 8yanghao

            # re: Windows Mobile中如何更改來電鈴聲  回復  更多評論   

            不是不放,是在電話剛進來的時候,首先修改鈴聲,待通話完畢再改回去,這樣播放的就是我們修改的鈴聲了
            2010-07-07 22:48 | Benjamin
            久久无码专区国产精品发布| 欧洲人妻丰满av无码久久不卡| 国产精品美女久久久久久2018| 久久精品人人做人人爽97| 狠狠色丁香久久婷婷综合五月| 99麻豆久久久国产精品免费| 一本色道久久88加勒比—综合| 久久久久香蕉视频| 国产亚洲精久久久久久无码77777| 久久综合88熟人妻| 久久国产高清一区二区三区| 精品久久久久成人码免费动漫| 久久精品九九亚洲精品| 久久99久久99小草精品免视看| 久久精品国产色蜜蜜麻豆 | 狼狼综合久久久久综合网| 国产精品成人久久久久久久| 亚洲精品无码久久千人斩| 亚洲综合久久综合激情久久| 97精品国产97久久久久久免费| 久久精品国产亚洲综合色| 久久久久波多野结衣高潮| 99久久国产综合精品五月天喷水| 伊人久久大香线蕉综合影院首页| 久久亚洲精品无码观看不卡| 久久天堂AV综合合色蜜桃网| 怡红院日本一道日本久久| 亚洲午夜无码久久久久| 午夜视频久久久久一区| 久久午夜福利电影| 国产AV影片久久久久久| 亚洲国产精品热久久| 国产精品青草久久久久婷婷| 麻豆成人久久精品二区三区免费| 狠狠综合久久综合88亚洲| 伊色综合久久之综合久久| 成人综合久久精品色婷婷| 久久性精品| 日韩人妻无码一区二区三区久久99| 日韩精品无码久久一区二区三| 日日狠狠久久偷偷色综合免费|