• <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

            靜以修身,儉以養(yǎng)德,非澹薄無(wú)以明志,非寧?kù)o無(wú)以致遠(yuǎn)。
            隨筆 - 397, 文章 - 0, 評(píng)論 - 196, 引用 - 0
            數(shù)據(jù)加載中……

            Windows Mobile中如何更改來(lái)電鈴聲

            來(lái)電鈴聲的設(shè)置在注冊(cè)表中的HKEY_CURRENT_USER\\ControlPanel\\Sounds\\RingTone0\\Script下的值,就是所要播放的鈴聲文件。查看Windows Mobile下的注冊(cè)表,用VS2005中Visual Studio Remote Tools->Remote Registry Editor工具就可以,不須其他的軟件。
            我們可以在電話來(lái)了后根據(jù)號(hào)碼播放不同的鈴聲,然后在通話結(jié)束再將鈴聲恢復(fù)。下面是通過(guò)MAPI來(lái)實(shí)現(xiàn)
            1.判斷來(lái)電號(hào)碼
            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  ---- 呼入的電話號(hào)碼
                 //char strPhoneNumber[30 + 1] = {0};
               //在這里根據(jù)號(hào)碼來(lái)設(shè)置鈴聲
               
                             
            }
              break;
             case LINE_LINEDEVSTATE:
              break;
             case LINE_APPNEWCALL:  //有呼叫進(jìn)來(lái)23L
              break;
             case LINE_REPLY:
              break;
             case LINE_CALLSTATE:  //呼叫狀態(tài)2
              {
              case LINECALLSTATE_DISCONNECTED://掛機(jī)
               {
                     RedoReg();
               }
               break;
              }
              break;
             }
            }
            DWORD InitializeTAPI(void)
            {
             ReadReg();//讀系統(tǒng)中默認(rèn)的鈴聲設(shè)置
                 //在啟動(dòng)中加入初始化
             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,讀取并保存系統(tǒng)鈴聲
            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)//打開(kāi)注冊(cè)表失敗
              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,更改鈴聲設(shè)置
            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.通話結(jié)束,釋放資源并恢復(fù)系統(tǒng)鈴聲
            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)//打開(kāi)注冊(cè)表失敗
              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 );

            }

            注意包含頭文件的順序,否則會(huì)出現(xiàn)很多編譯錯(cuò)誤;在EVC上表現(xiàn)的比較明顯

            posted on 2009-02-22 21:12 Benjamin 閱讀(2757) 評(píng)論(7)  編輯 收藏 引用 所屬分類(lèi): PDA/PPC開(kāi)發(fā)

            評(píng)論

            # re: Windows Mobile中如何更改來(lái)電鈴聲  回復(fù)  更多評(píng)論   

            你好:你的根據(jù)來(lái)電號(hào)碼改變鈴聲的方案,我嘗試過(guò)了。有個(gè)問(wèn)題,mobile手機(jī)會(huì)首先想起鈴聲,然后我們才能夠在LineCallback這個(gè)回調(diào)中捕獲來(lái)電號(hào)碼,這時(shí)作出處理已經(jīng)晚了,不知有何方法能夠防止這種現(xiàn)象發(fā)生?
            2009-12-12 22:03 | tank

            # re: Windows Mobile中如何更改來(lái)電鈴聲  回復(fù)  更多評(píng)論   

            可以先不放鈴聲,待號(hào)碼出來(lái)后再放。自己放,用戶應(yīng)答或是超時(shí)未應(yīng)答,停止放音。也可以自己做來(lái)電顯示,把系統(tǒng)的屏蔽掉
            2009-12-13 17:35 | Benjamin

            # re: Windows Mobile中如何更改來(lái)電鈴聲  回復(fù)  更多評(píng)論   

            case LINE_CALLSTATE: //呼叫狀態(tài)2
            {
            case LINECALLSTATE_DISCONNECTED://掛機(jī)
            {
            RedoReg();
            }
            break;
            }
            break;


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

            # re: Windows Mobile中如何更改來(lái)電鈴聲  回復(fù)  更多評(píng)論   

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

            # re: Windows Mobile中如何更改來(lái)電鈴聲  回復(fù)  更多評(píng)論   

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

            # re: Windows Mobile中如何更改來(lái)電鈴聲  回復(fù)  更多評(píng)論   

            @Benjamin
            先不放鈴聲,待號(hào)碼出來(lái)后再放,那時(shí)我們?cè)傩薷囊魳?lè)已經(jīng)晚了,不能控制來(lái)電時(shí)的播放器,自己開(kāi)一個(gè)播放器放不出聲音,怎么辦?
            2010-07-07 22:16 | 8yanghao

            # re: Windows Mobile中如何更改來(lái)電鈴聲  回復(fù)  更多評(píng)論   

            不是不放,是在電話剛進(jìn)來(lái)的時(shí)候,首先修改鈴聲,待通話完畢再改回去,這樣播放的就是我們修改的鈴聲了
            2010-07-07 22:48 | Benjamin
            97精品国产97久久久久久免费| 一本久久综合亚洲鲁鲁五月天亚洲欧美一区二区 | 亚洲综合精品香蕉久久网| 欧美一区二区精品久久| 波多野结衣中文字幕久久| 奇米影视7777久久精品| 亚洲狠狠婷婷综合久久蜜芽| 久久无码国产专区精品| 久久乐国产综合亚洲精品| 国产一区二区久久久| 99久久做夜夜爱天天做精品| 久久亚洲精品无码VA大香大香| 伊人色综合久久天天网| 精品国产日韩久久亚洲| 色综合久久无码中文字幕| 久久精品国产清高在天天线| av午夜福利一片免费看久久| 99热成人精品热久久669| 亚洲国产精品久久| 久久精品国产亚洲Aⅴ香蕉 | 久久国产色av免费看| 久久99久国产麻精品66| 欧美一区二区三区久久综合 | 久久天天躁狠狠躁夜夜2020老熟妇 | 国产精品九九久久免费视频 | 国产美女久久精品香蕉69| 国产成人久久精品区一区二区| 2021久久国自产拍精品| 国产精品狼人久久久久影院| 久久亚洲精品无码观看不卡| 久久久久久精品久久久久| 国产Av激情久久无码天堂| 国产成人综合久久久久久| 亚洲精品国产第一综合99久久| 新狼窝色AV性久久久久久| 日本久久久久久中文字幕| 理论片午午伦夜理片久久 | 精品综合久久久久久88小说 | 香蕉久久一区二区不卡无毒影院 | 久久久久久亚洲精品成人| 精品久久人人妻人人做精品|