SMS.cpp[WinCE]

  1. // SMS.cpp : 定义应用程序的入口点。    
  2. //    
  3.    
  4. #include "stdafx.h"    
  5. #include "SMS.h"    
  6. #include <windows.h>    
  7. #include <commctrl.h>    
  8.    
  9. #define MAX_LOADSTRING 100    
  10.    
  11. // 全局变量:    
  12. HINSTANCE            g_hInst;             // 当前实例    
  13. HWND                 g_hWndMenuBar;       // 菜单栏句柄    
  14.    
  15. // 此代码模块中包含的函数的前向声明:    
  16. ATOM             MyRegisterClass( HINSTANCELPTSTR );   
  17. BOOL             InitInstance( HINSTANCEint );   
  18. LRESULT  CALLBACK    WndProc( HWNDUINTWPARAMLPARAM );   
  19. INT_PTR  CALLBACK    About( HWNDUINTWPARAMLPARAM );   
  20.    
  21. HRESULT  GetSMSMsgStore( ICEMAPISession * fpSession, IMsgStore * * fppMsgStore );   
  22. HRESULT  GetMMSMsgStore( ICEMAPISession * fpSession, IMsgStore * * fppMsgStore );   
  23. HRESULT  GetSMSInboxFolder( IMsgStore * fpMsgStore, IMAPIFolder * * fppInboxFolder );   
  24.    
  25. HRESULT  CreateSMS( IMAPIFolder * fpInboxFolder, IMessage * * fppMsg );   
  26. HRESULT  CreateMMS( IMAPIFolder * fpInboxFolder, IMessage * * fppMsg );   
  27. HRESULT  SetRecipient( IMessage * fpMsg );   
  28.    
  29. HRESULT  WriteShotRMessageInBox();   
  30. HRESULT  WriteMMessageInBox();   
  31.    
  32. int  WINAPI WinMain( HINSTANCE  hInstance,   
  33.                    HINSTANCE  hPrevInstance,   
  34.                    LPTSTR     lpCmdLine,   
  35.                    int        nCmdShow)   
  36. {   
  37.     HRESULT  hr = S_OK;   
  38.    
  39.     WriteShotRMessageInBox();   
  40.     WriteMMessageInBox();   
  41.    
  42.     return  hr == S_OK ? TRUE : FALSE ;   
  43.    
  44. }   
  45.    
  46. //    
  47. //  函数: MyRegisterClass()    
  48. //    
  49. //  目的: 注册窗口类。    
  50. //    
  51. //  注释:    
  52. //    
  53. ATOM  MyRegisterClass( HINSTANCE  hInstance,  LPTSTR  szWindowClass)   
  54. {   
  55.     WNDCLASS wc;   
  56.    
  57.     wc.style         = CS_HREDRAW | CS_VREDRAW;   
  58.     wc.lpfnWndProc   = WndProc;   
  59.     wc.cbClsExtra    = 0;   
  60.     wc.cbWndExtra    = 0;   
  61.     wc.hInstance     = hInstance;   
  62.     wc.hIcon         = LoadIcon(hInstance, MAKEINTRESOURCE(IDI_SMS));   
  63.     wc.hCursor       = 0;   
  64.     wc.hbrBackground = (HBRUSH ) GetStockObject(WHITE_BRUSH);   
  65.     wc.lpszMenuName  = 0;   
  66.     wc.lpszClassName = szWindowClass;   
  67.    
  68.     return  RegisterClass(&wc);   
  69. }   
  70.    
  71. //    
  72. //   函数: InitInstance(HINSTANCE, int)    
  73. //    
  74. //   目的: 保存实例句柄并创建主窗口    
  75. //    
  76. //   注释:    
  77. //    
  78. //        在此函数中,我们在全局变量中保存实例句柄并    
  79. //        创建和显示主程序窗口。    
  80. //    
  81. BOOL  InitInstance( HINSTANCE  hInstance,  int  nCmdShow)   
  82. {   
  83.     HWND  hWnd;   
  84.     TCHAR  szTitle[MAX_LOADSTRING];       // 标题栏文本    
  85.     TCHAR  szWindowClass[MAX_LOADSTRING];     // 主窗口类名    
  86.    
  87.     g_hInst = hInstance; // 将实例句柄存储在全局变量中    
  88.    
  89.     // 在应用程序初始化期间,应调用一次 SHInitExtraControls 以初始化    
  90.     // 所有设备特定控件,例如,CAPEDIT 和 SIPPREF。    
  91.     SHInitExtraControls();   
  92.    
  93.     LoadString(hInstance, IDS_APP_TITLE, szTitle, MAX_LOADSTRING);    
  94.     LoadString(hInstance, IDC_SMS, szWindowClass, MAX_LOADSTRING);   
  95.    
  96.     //如果它已经在运行,则将焦点置于窗口上,然后退出    
  97.     hWnd = FindWindow(szWindowClass, szTitle);     
  98.     if  (hWnd)    
  99.     {   
  100.         // 将焦点置于最前面的子窗口    
  101.         // “| 0x00000001”用于将所有附属窗口置于前台并    
  102.         // 激活这些窗口。    
  103.         SetForegroundWindow((HWND )(( ULONG ) hWnd | 0x00000001));   
  104.         return  0;   
  105.     }    
  106.    
  107.     if  (!MyRegisterClass(hInstance, szWindowClass))   
  108.     {   
  109.         return  FALSE;   
  110.     }   
  111.    
  112.     hWnd = CreateWindow(szWindowClass, szTitle, WS_VISIBLE,   
  113.         CW_USEDEFAULT, CW_USEDEFAULT, CW_USEDEFAULT, CW_USEDEFAULT, NULL, NULL, hInstance, NULL);   
  114.    
  115.     if  (!hWnd)   
  116.     {   
  117.         return  FALSE;   
  118.     }   
  119.    
  120.     // 使用 CW_USEDEFAULT 创建主窗口时,将不会考虑菜单栏的高度(如果创建了一个    
  121.     // 菜单栏)。因此,我们要在创建窗口后调整其大小    
  122.     // 如果菜单栏存在    
  123.     if  (g_hWndMenuBar)   
  124.     {   
  125.         RECT rc;   
  126.         RECT rcMenuBar;   
  127.    
  128.         GetWindowRect(hWnd, &rc);   
  129.         GetWindowRect(g_hWndMenuBar, &rcMenuBar);   
  130.         rc.bottom -= (rcMenuBar.bottom - rcMenuBar.top);   
  131.            
  132.         MoveWindow(hWnd, rc.left, rc.top, rc.right-rc.left, rc.bottom-rc.top, FALSE);   
  133.     }   
  134.    
  135.     ShowWindow(hWnd, nCmdShow);   
  136.     UpdateWindow(hWnd);   
  137.    
  138.    
  139.     return  TRUE;   
  140. }   
  141.    
  142. //    
  143. //  函数: WndProc(HWND, UINT, WPARAM, LPARAM)    
  144. //    
  145. //  目的: 处理主窗口的消息。    
  146. //    
  147. //  WM_COMMAND  - 处理应用程序菜单    
  148. //  WM_PAINT    - 绘制主窗口    
  149. //  WM_DESTROY  - 发送退出消息并返回    
  150. //    
  151. //    
  152. LRESULT  CALLBACK WndProc( HWND  hWnd,  UINT  message,  WPARAM  wParam,  LPARAM  lParam)   
  153. {   
  154.     int  wmId, wmEvent;   
  155.     PAINTSTRUCT ps;   
  156.     HDC  hdc;   
  157.    
  158.     static  SHACTIVATEINFO s_sai;   
  159.        
  160.     switch  (message)    
  161.     {   
  162.         case  WM_COMMAND:   
  163.             wmId    = LOWORD(wParam);    
  164.             wmEvent = HIWORD(wParam);    
  165.             // 分析菜单选择:    
  166.             switch  (wmId)   
  167.             {   
  168.                 case  IDM_HELP_ABOUT:   
  169.                     DialogBox(g_hInst, (LPCTSTR )IDD_ABOUTBOX, hWnd, About);   
  170.                     break ;   
  171.                 case  IDM_OK:   
  172.                     SendMessage (hWnd, WM_CLOSE, 0, 0);                
  173.                     break ;   
  174.                 default :   
  175.                     return  DefWindowProc(hWnd, message, wParam, lParam);   
  176.             }   
  177.             break ;   
  178.         case  WM_CREATE:   
  179.             SHMENUBARINFO mbi;   
  180.    
  181.             memset(&mbi, 0, sizeof (SHMENUBARINFO));   
  182.             mbi.cbSize     = sizeof (SHMENUBARINFO);   
  183.             mbi.hwndParent = hWnd;   
  184.             mbi.nToolBarId = IDR_MENU;   
  185.             mbi.hInstRes   = g_hInst;   
  186.    
  187.             if  (!SHCreateMenuBar(&mbi))    
  188.             {   
  189.                 g_hWndMenuBar = NULL;   
  190.             }   
  191.             else    
  192.             {   
  193.                 g_hWndMenuBar = mbi.hwndMB;   
  194.             }   
  195.    
  196.             // 初始化外壳程序激活信息结构    
  197.             memset(&s_sai, 0, sizeof  (s_sai));   
  198.             s_sai.cbSize = sizeof  (s_sai);   
  199.             break ;   
  200.         case  WM_PAINT:   
  201.             hdc = BeginPaint(hWnd, &ps);   
  202.                
  203.             // TODO: 在此添加任意绘图代码...    
  204.                
  205.             EndPaint(hWnd, &ps);   
  206.             break ;   
  207.         case  WM_DESTROY:   
  208.             CommandBar_Destroy(g_hWndMenuBar);   
  209.             PostQuitMessage(0);   
  210.             break ;   
  211.    
  212.         case  WM_ACTIVATE:   
  213.             // 向外壳程序通知我们的激活消息    
  214.             SHHandleWMActivate(hWnd, wParam, lParam, &s_sai, FALSE);   
  215.             break ;   
  216.         case  WM_SETTINGCHANGE:   
  217.             SHHandleWMSettingChange(hWnd, wParam, lParam, &s_sai);   
  218.             break ;   
  219.    
  220.         default :   
  221.             return  DefWindowProc(hWnd, message, wParam, lParam);   
  222.     }   
  223.     return  0;   
  224. }   
  225.    
  226. // “关于”框的消息处理程序。    
  227. INT_PTR  CALLBACK About( HWND  hDlg,  UINT  message,  WPARAM  wParam,  LPARAM  lParam)   
  228. {   
  229.     switch  (message)   
  230.     {   
  231.         case  WM_INITDIALOG:   
  232.             {   
  233.                 // 创建一个“完成”按钮并调整其大小。    
  234.                 SHINITDLGINFO shidi;   
  235.                 shidi.dwMask = SHIDIM_FLAGS;   
  236.                 shidi.dwFlags = SHIDIF_DONEBUTTON | SHIDIF_SIPDOWN | SHIDIF_SIZEDLGFULLSCREEN | SHIDIF_EMPTYMENU;   
  237.                 shidi.hDlg = hDlg;   
  238.                 SHInitDialog(&shidi);   
  239.             }   
  240.             return  ( INT_PTR )TRUE;   
  241.    
  242.         case  WM_COMMAND:   
  243.             if  (LOWORD(wParam) == IDOK)   
  244.             {   
  245.                 EndDialog(hDlg, LOWORD(wParam));   
  246.                 return  TRUE;   
  247.             }   
  248.             break ;   
  249.    
  250.         case  WM_CLOSE:   
  251.             EndDialog(hDlg, message);   
  252.             return  TRUE;   
  253.    
  254.     }   
  255.     return  ( INT_PTR )FALSE;   
  256. }   
  257.    
  258. HRESULT  GetMMSMsgStore( ICEMAPISession * fpSession, IMsgStore * * fppMsgStore )   
  259. {   
  260.     ASSERT( fpSession && fppMsgStore );   
  261.    
  262.     HRESULT  hr = E_FAIL;   
  263.     IMAPITable* pMAPITable = NULL;   
  264.     SRowSet *pRows = NULL;   
  265.     ULONG  ulMessageType = 0;   
  266.    
  267.     fpSession->GetMsgStoresTable(NULL,&pMAPITable);   
  268.    
  269.     if (NULL == pMAPITable)   
  270.     {   
  271.         goto  TheEnd;   
  272.     }   
  273.     else    
  274.     {   
  275.         const   ULONG  ulNumCols = 2;   
  276.    
  277.         SizedSPropTagArray(ulNumCols,Columns)={    
  278.             ulNumCols ,     
  279.             PR_ENTRYID,   
  280.             PR_DISPLAY_NAME   
  281.         };   
  282.    
  283.         if  ( FAILED( pMAPITable-> SetColumns((LPSPropTagArray)&Columns, 0) ) )    
  284.         {    
  285.             goto  TheEnd;   
  286.         }   
  287.    
  288.         BOOL  bFindStore = FALSE;   
  289.         while (SUCCEEDED(pMAPITable-> QueryRows(1, 0, &pRows)) && bFindStore == FALSE )    
  290.         {    
  291.             if  (NULL == pRows || pRows-> cRows != 1)    
  292.             {    
  293.                 goto  TheEnd;    
  294.             }   
  295.    
  296.             if  (_tcsicmp(pRows->aRow[0].lpProps[1].Value.lpszW, TEXT( "MMS" )) == 0)   
  297.             {   
  298.                 ULONG  ulMesageType;   
  299.    
  300.                 fpSession->OpenEntry(pRows->aRow[0].lpProps[0].Value.bin.cb,   
  301.                     (LPENTRYID)pRows->aRow[0].lpProps[0].Value.bin.lpb,   
  302.                     NULL,    
  303.                     MAPI_BEST_ACCESS,    
  304.                     &ulMesageType,   
  305.                     (LPUNKNOWN*)fppMsgStore);   
  306.    
  307.                 bFindStore = TRUE;   
  308.    
  309.             }   
  310.             FreeProws( pRows );   
  311.             pRows = NULL;   
  312.    
  313.         }   
  314.    
  315.         delete  pMAPITable;   
  316.         pMAPITable = NULL;   
  317.     }   
  318.    
  319.     if ( *fppMsgStore == NULL )   
  320.         goto  TheEnd;   
  321.    
  322.     hr = S_OK;   
  323.    
  324. TheEnd:   
  325.     if (pRows)   
  326.     {   
  327.         FreeProws(pRows);   
  328.         pRows = NULL;   
  329.     }   
  330.     if (pMAPITable)   
  331.     {   
  332.         delete  pMAPITable;   
  333.         pMAPITable = NULL;   
  334.     }   
  335.    
  336.     return  hr;   
  337. }   
  338. HRESULT  GetSMSMsgStore( ICEMAPISession * fpSession, IMsgStore * * fppMsgStore )   
  339. {   
  340.     ASSERT( fpSession && fppMsgStore );   
  341.    
  342.     HRESULT  hr = E_FAIL;   
  343.     IMAPITable* pMAPITable = NULL;   
  344.     SRowSet *pRows = NULL;   
  345.     ULONG  ulMessageType = 0;   
  346.    
  347.     fpSession->GetMsgStoresTable(NULL,&pMAPITable);   
  348.    
  349.     if (NULL == pMAPITable)   
  350.     {   
  351.         goto  TheEnd;   
  352.     }   
  353.     else    
  354.     {   
  355.         const   ULONG  ulNumCols = 2;   
  356.    
  357.         SizedSPropTagArray(ulNumCols,Columns)={    
  358.             ulNumCols ,     
  359.             PR_ENTRYID,   
  360.             PR_DISPLAY_NAME   
  361.         };   
  362.    
  363.         if  ( FAILED( pMAPITable-> SetColumns((LPSPropTagArray)&Columns, 0) ) )    
  364.         {    
  365.             goto  TheEnd;   
  366.         }   
  367.    
  368.         BOOL  bFindStore = FALSE;   
  369.         while (SUCCEEDED(pMAPITable-> QueryRows(1, 0, &pRows)) && bFindStore == FALSE )    
  370.         {    
  371.             if  (NULL == pRows || pRows-> cRows != 1)    
  372.             {    
  373.                 goto  TheEnd;    
  374.             }   
  375.    
  376.             if  (_tcsicmp(pRows->aRow[0].lpProps[1].Value.lpszW, TEXT( "SMS" )) == 0)   
  377.             {   
  378.                 ULONG  ulMesageType;   
  379.    
  380.                 fpSession->OpenEntry(pRows->aRow[0].lpProps[0].Value.bin.cb,   
  381.                     (LPENTRYID)pRows->aRow[0].lpProps[0].Value.bin.lpb,   
  382.                     NULL,    
  383.                     MAPI_BEST_ACCESS,    
  384.                     &ulMesageType,   
  385.                     (LPUNKNOWN*)fppMsgStore);   
  386.    
  387.                 bFindStore = TRUE;   
  388.    
  389.             }   
  390.             FreeProws( pRows );   
  391.             pRows = NULL;   
  392.    
  393.         }   
  394.    
  395.         delete  pMAPITable;   
  396.         pMAPITable = NULL;   
  397.     }   
  398.    
  399.     if ( *fppMsgStore == NULL )   
  400.         goto  TheEnd;   
  401.    
  402.     hr = S_OK;   
  403.    
  404. TheEnd:   
  405.     if (pRows)   
  406.     {   
  407.         FreeProws(pRows);   
  408.         pRows = NULL;   
  409.     }   
  410.     if (pMAPITable)   
  411.     {   
  412.         delete  pMAPITable;   
  413.         pMAPITable = NULL;   
  414.     }   
  415.    
  416.     return  hr;   
  417. }   
  418.    
  419. HRESULT  GetSMSInboxFolder( IMsgStore * fpMsgStore, IMAPIFolder * * fppInboxFolder )   
  420. {   
  421.     ASSERT( fpMsgStore && fppInboxFolder );   
  422.    
  423.     HRESULT  hr = S_OK;   
  424.     LPSPropValue rgprops = NULL;   
  425.     ULONG  ulValues = 0;   
  426.     ULONG  rgTags[] = {1,PR_CE_IPM_INBOX_ENTRYID};   
  427.    
  428.     if (FAILED(fpMsgStore-> GetProps((LPSPropTagArray)rgTags,MAPI_UNICODE,&ulValues,&rgprops)))   
  429.     {   
  430.         hr = E_FAIL;   
  431.         goto  TheEnd;   
  432.     }   
  433.        
  434.     if (FAILED(fpMsgStore-> OpenEntry(rgprops[0].Value.bin.cb,(LPENTRYID)rgprops[0].Value.bin.lpb,NULL,MAPI_MODIFY,NULL,(LPUNKNOWN*)fppInboxFolder)))   
  435.     {   
  436.         hr = E_FAIL;   
  437.         goto  TheEnd;   
  438.     }   
  439.    
  440. TheEnd:   
  441.     if (rgprops)   
  442.     {   
  443.         MAPIFreeBuffer(rgprops);   
  444.     }   
  445.     return  hr;   
  446. }   
  447.    
  448. HRESULT  CreateSMS ( IMAPIFolder * fpInboxFolder, IMessage * * fppMsg )   
  449. {   
  450.     ASSERT( fpInboxFolder && fppMsg );   
  451.     HRESULT  hr = S_OK;   
  452.     SYSTEMTIME st;   
  453.     ADRLIST adlst = {0};   
  454.    
  455.     SPropValue lpPropVal[5];   
  456.    
  457.     ZeroMemory(&lpPropVal,sizeof (lpPropVal));   
  458.    
  459.     //短信的内容(邮件的内容是放在 PR_BODY 里的,由于短信没有主题,而且可以在短信列表中显示出来,所以内容放在了这个字段)    
  460.     lpPropVal[0].ulPropTag = PR_SUBJECT;    
  461.     lpPropVal[0].Value.lpszW = L"你好" ; //This is a SMS Message    
  462.    
  463.     lpPropVal[1].ulPropTag = PR_SENDER_EMAIL_ADDRESS; // 发件人地址    
  464.     lpPropVal[1].Value.lpszW = L"15868847603" ;      
  465.    
  466.     lpPropVal[2].ulPropTag = PR_MESSAGE_CLASS; // 消息类型,邮件为(LPWSTR)L"IPM.Note"    
  467.     lpPropVal[2].Value.lpszW = (LPWSTR )L "IPM.SMStext" ;   
  468.    
  469.     lpPropVal[3].ulPropTag = PR_MESSAGE_DELIVERY_TIME;// 发送时间 这里 应该和 PR_LAST_MODIFICATION_TIME 区别一下    
  470.     GetSystemTime(&st);   
  471.     SystemTimeToFileTime(&st, &(lpPropVal[3].Value.ft));   
  472.    
  473.     lpPropVal[4].ulPropTag = PR_MESSAGE_FLAGS;   
  474.     lpPropVal[4].Value.ul = 0; //MSGFLAG_FROMME, MSGFLAG_READ, MSGFLAG_UNSENT 如果设置为 MSGFLAG_READ 为已读    
  475.    
  476.     if ( FAILED( fpInboxFolder->CreateMessage(NULL,0,fppMsg) ) )   
  477.     {   
  478.         hr = E_FAIL;   
  479.         goto  TheEnd;   
  480.     }   
  481.    
  482.     if ( FAILED( ( *fppMsg )->SetProps(5,lpPropVal,NULL) ) )   
  483.     {   
  484.         hr = E_FAIL;   
  485.         goto  TheEnd;   
  486.     }   
  487.    
  488. TheEnd:   
  489.     return  hr;   
  490. }   
  491. HRESULT  CreateMMS ( IMAPIFolder * fpInboxFolder, IMessage * * fppMsg )   
  492. {   
  493.     ASSERT( fpInboxFolder && fppMsg );   
  494.     HRESULT  hr = S_OK;   
  495.     SYSTEMTIME st;   
  496.     ADRLIST adlst = {0};   
  497.    
  498.     SPropValue lpPropVal[6];   
  499.    
  500.     ZeroMemory(&lpPropVal,sizeof (lpPropVal));   
  501.    
  502.    
  503.     //彩信的内容    
  504.    // lpPropVal[0].ulPropTag = PR_MSG_STATUS;    
  505.    // lpPropVal[0].Value.ul = MSGSTATUS_RECTYPE_SMTP;    
  506.    
  507.     lpPropVal[0].ulPropTag = PR_SERVICE_NAME ;   
  508.     lpPropVal[0].Value.lpszW = L"MMS" ;   
  509.    
  510.    
  511.     lpPropVal[1].ulPropTag = PR_SUBJECT;    
  512.     lpPropVal[1].Value.lpszW = L"照片" ; //This is a SMS Message    
  513.    
  514.     lpPropVal[2].ulPropTag = PR_SENDER_EMAIL_ADDRESS; // 发件人地址    
  515.     lpPropVal[2].Value.lpszW = L"15868847604" ;      
  516.    
  517.     lpPropVal[3].ulPropTag = PR_MESSAGE_CLASS; // 消息类型,邮件为(LPWSTR)L"IPM.Note"    
  518.     lpPropVal[3].Value.lpszW = (LPWSTR )L "IPM.MMS" ; //IPM.SMStext,IPM.Note    
  519.    
  520.     lpPropVal[4].ulPropTag = PR_MESSAGE_DELIVERY_TIME;// 发送时间 这里 应该和 PR_LAST_MODIFICATION_TIME 区别一下    
  521.     GetSystemTime(&st);   
  522.     SystemTimeToFileTime(&st, &(lpPropVal[4].Value.ft));   
  523.    
  524.     lpPropVal[5].ulPropTag = PR_MESSAGE_FLAGS;   
  525.     lpPropVal[5].Value.ul = 0; //MSGFLAG_FROMME, MSGFLAG_READ, MSGFLAG_UNSENT 如果设置为 MSGFLAG_READ 为已读    
  526.    
  527.     if ( FAILED( fpInboxFolder->CreateMessage(NULL,0,fppMsg) ) )   
  528.     {   
  529.         hr = E_FAIL;   
  530.         goto  TheEnd;   
  531.     }   
  532.    
  533.     if ( FAILED( ( *fppMsg )->SetProps(6,lpPropVal,NULL) ) )   
  534.     {   
  535.         hr = E_FAIL;   
  536.         goto  TheEnd;   
  537.     }   
  538.    
  539. TheEnd:   
  540.     return  hr;   
  541. }   
  542.    
  543. HRESULT  SetRecipient(IMessage * fpMsg)   
  544. {   
  545.     ASSERT( fpMsg );   
  546.     HRESULT  hr = S_OK;   
  547.    
  548.     ULONG           cRecipients = 1;                      // Send a message to one recipient.    
  549.     LPWSTR                pszTo = L "13912345678" ;         // 收件人地址    
  550.     ULONG  cRecipientProperties = 3;                      // Set three properties for the recipient.    
  551.     LPADRLIST   pRecipientList = NULL;   
  552.     ULONG       cbRecipientList = 0;   
  553.     int  cbRecipientProperties = 0;   
  554.    
  555.     cbRecipientList = sizeof (ADRLIST) +    
  556.         cRecipients * (sizeof (ADRENTRY) +    
  557.         cRecipientProperties * (sizeof (SPropValue) +    
  558.         (wcslen(pszTo)+3) * sizeof ( WCHAR )));   
  559.    
  560.     hr = MAPIAllocateBuffer(cbRecipientList, (LPVOID  FAR *)&pRecipientList);   
  561.    
  562.     if  ( S_OK != hr )    
  563.     {   
  564.         goto  TheEnd;   
  565.     }   
  566.    
  567.     memset(pRecipientList, 0, cbRecipientList);   
  568.    
  569.     pRecipientList->cEntries = cRecipients;   
  570.     pRecipientList->aEntries[0].cValues = cRecipientProperties;   
  571.     cbRecipientProperties = cRecipientProperties * sizeof (SPropValue);   
  572.    
  573.     hr = MAPIAllocateBuffer(cbRecipientProperties, (LPVOID  FAR *)&pRecipientList->aEntries[0].rgPropVals);   
  574.     if  ( S_OK != hr )    
  575.     {   
  576.         goto  TheEnd;   
  577.     }   
  578.    
  579.     memset(pRecipientList->aEntries[0].rgPropVals, 0, sizeof (SPropValue) * 3);   
  580.        
  581.     pRecipientList->aEntries[0].rgPropVals[0].ulPropTag = PR_RECIPIENT_TYPE;   
  582.     pRecipientList->aEntries[0].rgPropVals[0].Value.ul  = MAPI_TO;//收件人类型 为 TO, 与此区别的还有 CC,BCC    
  583.    
  584.     pRecipientList->aEntries[0].rgPropVals[1].ulPropTag   = PR_ADDRTYPE;//这个只有这一个唯一的值    
  585.     pRecipientList->aEntries[0].rgPropVals[1].Value.lpszW = L"SMTP" ;   
  586.    
  587.     pRecipientList->aEntries[0].rgPropVals[2].ulPropTag   = PR_EMAIL_ADDRESS;//收件人地址(如果邮件是自己收到的,就是自己的地址)    
  588.     pRecipientList->aEntries[0].rgPropVals[2].Value.lpszW = pszTo;   
  589.    
  590.     hr = fpMsg->ModifyRecipients(MODRECIP_ADD, pRecipientList);   
  591.     if  ( S_OK != hr )    
  592.     {   
  593.         goto  TheEnd;   
  594.     }   
  595.    
  596. TheEnd:   
  597.    
  598.     if (pRecipientList->aEntries[0].rgPropVals)   
  599.     {   
  600.         MAPIFreeBuffer(pRecipientList->aEntries[0].rgPropVals);   
  601.     }   
  602.    
  603.     if (pRecipientList)   
  604.     {   
  605.         MAPIFreeBuffer(pRecipientList);   
  606.     }   
  607.    
  608.     return  hr;   
  609. }   
  610.    
  611. /*   
  612.     把消息写入短信收件箱   
  613. */    
  614. HRESULT  WriteShotRMessageInBox()   
  615. {   
  616.         HRESULT  hr = S_OK;   
  617.    
  618.         ICEMAPISession * pSession = NULL;   
  619.         IMsgStore * pMsgStore = NULL;   
  620.         IMAPIFolder * pInboxFolder = NULL;   
  621.         LPMESSAGE pMsg = NULL;   
  622.    
  623.         CoInitializeEx(NULL, COINIT_MULTITHREADED);     
  624.         MAPIInitialize(NULL);   
  625.    
  626.         hr = MAPILogonEx(NULL, NULL, NULL, NULL, (LPMAPISESSION *)&pSession);   
  627.         if ( S_OK != hr )   
  628.         {   
  629.             hr = E_FAIL;   
  630.             goto  TheEnd;   
  631.         }   
  632.         //获取存储空间    
  633.         hr = GetSMSMsgStore( pSession, &pMsgStore );   
  634.         if ( S_OK != hr )   
  635.         {   
  636.             hr = E_FAIL;   
  637.             goto  TheEnd;   
  638.         }   
  639.         //获取存储文件夹    
  640.         hr = GetSMSInboxFolder( pMsgStore, &pInboxFolder );   
  641.         if ( S_OK != hr )   
  642.         {   
  643.             hr = E_FAIL;   
  644.             goto  TheEnd;   
  645.         }   
  646.         //在文件夹下创建新信息    
  647.         hr = CreateSMS( pInboxFolder, &pMsg );   
  648.         if ( S_OK != hr )   
  649.         {   
  650.             hr = E_FAIL;   
  651.             goto  TheEnd;   
  652.         }   
  653.    
  654.         /*hr = SetRecipient( pMsg );   
  655.         if( S_OK != hr )   
  656.         {   
  657.             hr = E_FAIL;   
  658.             goto TheEnd;   
  659.         }*/    
  660.    
  661.     TheEnd:   
  662.         if (NULL != pSession)   
  663.         {   
  664.             pSession->Logoff(0, 0, 0);     
  665.             pSession->Release();   
  666.             pSession = NULL;   
  667.         }   
  668.         MAPIUninitialize();   
  669.         CoUninitialize();   
  670.    
  671.         return  hr == S_OK ? TRUE : FALSE ;   
  672. }   
  673.    
  674. HRESULT  WriteMMessageInBox()   
  675. {   
  676.         HRESULT  hr = S_OK;   
  677.    
  678.         ICEMAPISession * pSession = NULL;   
  679.         IMsgStore * pMsgStore = NULL;   
  680.         IMAPIFolder * pInboxFolder = NULL;   
  681.         LPMESSAGE pMsg = NULL;   
  682.    
  683.         CoInitializeEx(NULL, COINIT_MULTITHREADED);     
  684.         MAPIInitialize(NULL);   
  685.    
  686.         hr = MAPILogonEx(NULL, NULL, NULL, NULL, (LPMAPISESSION *)&pSession);   
  687.         if ( S_OK != hr )   
  688.         {   
  689.             hr = E_FAIL;   
  690.             goto  TheEnd;   
  691.         }   
  692.         //获取存储空间    
  693.         //hr = GetSMSMsgStore( pSession, &pMsgStore );    
  694.         hr =GetMMSMsgStore( pSession, &pMsgStore );   
  695.         if ( S_OK != hr )   
  696.         {   
  697.             hr = E_FAIL;   
  698.             goto  TheEnd;   
  699.         }   
  700.         //获取存储文件夹    
  701.         hr = GetSMSInboxFolder( pMsgStore, &pInboxFolder );   
  702.         if ( S_OK != hr )   
  703.         {   
  704.             hr = E_FAIL;   
  705.             goto  TheEnd;   
  706.         }   
  707.         //在文件夹下创建新信息    
  708.         //hr = CreateSMS( pInboxFolder, &pMsg );    
  709.          hr = CreateMMS( pInboxFolder, &pMsg );   
  710.         if ( S_OK != hr )   
  711.         {   
  712.             hr = E_FAIL;   
  713.             goto  TheEnd;   
  714.         }   
  715.    
  716.         /*hr = SetRecipient( pMsg );   
  717.         if( S_OK != hr )   
  718.         {   
  719.             hr = E_FAIL;   
  720.             goto TheEnd;   
  721.         }*/    
  722.    
  723.     TheEnd:   
  724.         if (NULL != pSession)   
  725.         {   
  726.             pSession->Logoff(0, 0, 0);     
  727.             pSession->Release();   
  728.             pSession = NULL;   
  729.         }   
  730.         MAPIUninitialize();   
  731.         CoUninitialize();   
  732.    
  733.         return  hr == S_OK ? TRUE : FALSE ;   
  734. }   
  735. </commctrl.h></windows.h> 
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值