設置--密碼 /Windows/ctlpnl.exe cplmain.cpl,1,0
http://www.my830.com/redirect.php?fid=87&tid=7156&goto=nextoldset
|
Windows Mobile 發送短信
Windows Mobile發送短信應用分爲兩種,一是調用WindowsMobile自有的發送短信窗口,將接收用戶的手機號碼傳遞給該窗口,完成短信發送(暫且稱爲窗口短信),另一種是通過調用API將文本發送給指定的號碼,這中發送方式對於用戶是無感知的(暫且稱爲無感知短信,下面對這兩種方式的實現分別介紹。
窗口短信:
窗口短信實現比較簡單,可以直接使用下面的啓動參數啓動系統的EXE文件即可,System.Diagnostics.Process.Start("tmail.exe", "-transport /"SMS/" -to/"" + 手機號碼 + "/" -body/"短信內容/"");但要注意的是,在發送完畢後,短信列表頁面會在你關閉發送信息窗口後呈現出來,可以在頁面的關閉事件中,使用FindWind方法,找到系統的【短信】窗口,將其關閉即可。
無感知短信
1.Windows Mobile 5.0及以上版本
無感知短信接口與Mobile操作系統的版本有關,如果是基於Windows Mobile5.0 的設備,完成短信發送比較容易,因爲微軟已經給你封裝好了底層的API,可以直接進行調用,引用Microsoft.WindowsMobile.PocketOutlook.dll後,使用SmsMessage smsSend = newSmsMessage(phon e, sms);smsSend.Send();方法便可以完成對一條短息的發送。
2.Windows Mobile 2003或Windows Mobile2003SE設備
在5.0以前的版本,雖然現在使用量比較小了,但是在2年前,在其上面發送短息可以說很是費勁,當時確實還讓我頭疼了一段時間,需要用戶自己封裝底層的API,然後進行調用,我這裏有一個,貼出來,以供大家參考
- using System;
- using System.Runtime.InteropServices;
- using System.Text;
- namespace SmartSMS
- {
- /// <summary>
- /// 短信發送程序
- /// </summary>
- public class SMS
- {
- public SMS()
- {
- //
- // TODO: 在此處添加構造函數邏輯
- //
- }
- private con st string SMS_MSGTYPE_TEXT = "Microsoft Text SMS Protocol";
- private con st int SMS_MODE_SEND = 2; // Open in send mode
- private con st int SMSDE_GSM = 2; // Use standard GSM encoding
- private con st int SMSAT_INTERNATIONAL = 1; // International number format
- private con st int PS_MESSAGE_OPTION_NON E = 0; // No message option s
- private con st int PS_MESSAGE_CLASS0 = 0; // Show but do not store
- private con st int PS_MESSAGE_CLASS1 = 1; // Store and show
- private con st int PSRO_NON E = 0; // No replacements
- private con st int SMS_OPTION_DELIVERY_NON E = 0; // No delivery option s
- private con st int SMS_MAX_ADDRESS_LENGTH = 256; // Max length of address
- [DllImport("sms.dll")]
- private static extern int SmsOpen(
- string ptsMessageProtocol,
- int dwMessageModes,
- ref IntPtr psmshHandle,
- int phMessageAvailableEvent);
- [DllImport("sms.dll")]
- private static extern int SmsSendMessage(
- IntPtr smshHandle,
- int psmsaSMSCAddress,
- IntPtr psmsaDestinationAddress,
- int pstValidityPeriod,
- IntPtr pbData,
- int dwDataSize,
- IntPtr pbProviderSpecificData,
- int dwProviderSpecificDataSize,
- int smsdeDataEncoding,
- int dwOption s,
- int psmsmidMessageID);
- [DllImport("sms.dll")]
- private static extern int SmsClose(IntPtr smshHandle);
- [DllImport("coredll.dll")]
- private static extern IntPtr LocalAlloc(uint uFlags, uint uBytes);
- [DllImport("coredll.dll")]
- internal static extern IntPtr LocalFree(IntPtr hMem);
- private static IntPtr AllocHGlobal(IntPtr cb)
- {
- IntPtr hmem;
- hmem = LocalAlloc(0x40, (uint) cb);
- return hmem;
- }
- private static void FreeHGlobal(IntPtr hglobal)
- {
- LocalFree(hglobal);
- }
- public static int SendSMS(string Number, string Message)
- {
- int returnValue = 0; //返回0則表示發送成功,否則發送失敗。
- IntPtr smsHandle = new IntPtr(0);
- // Set address structure
- byte[] smsatAddressType = BitConverter.GetBytes(SMSAT_INTERNATIONAL);
- byte[] ptsAddress = Encoding.Unicode.GetBytes(Number);
- byte[] smsAddressTag = new byte[smsatAddressType.Length + ptsAddress.Length];
- Array.Copy(smsatAddressType, 0, smsAddressTag, 0, smsatAddressType.Length);
- Array.Copy(ptsAddress, 0, smsAddressTag, smsatAddressType.Length, ptsAddress.Length);
- IntPtr smsAddress = AllocHGlobal((IntPtr)smsAddressTag.Length);
- Marshal.Copy(smsAddressTag, 0, smsAddress, smsAddressTag.Length);
- // Set provider data structure
- byte[] dwMessageOption s = BitConverter.GetBytes(PS_MESSAGE_OPTION_NO NE);
- byte[] psMessageClass = BitConverter.GetBytes(PS_MESSAGE_CLASS1);
- byte[] psReplaceOption = BitConverter.GetBytes(PSRO_NO NE);
- byte[] smsProviderDataTag = new byte[dwMessageOption s.Length +
- psMessageClass.Length + psReplaceOption.Length];
- Array.Copy(dwMessageOption s, 0, smsProviderDataTag, 0, dwMessageOption s.Length);
- Array.Copy(psMessageClass, 0, smsProviderDataTag, dwMessageOption s.Length,
- psMessageClass.Length);
- Array.Copy(psReplaceOption, 0, smsProviderDataTag, dwMessageOption s.Length +
- psMessageClass.Length, psReplaceOption.Length);
- IntPtr smsProviderData = AllocHGlobal((IntPtr) smsProviderDataTag.Length);
- Marshal.Copy(smsProviderDataTag, 0, smsProviderData, smsProviderDataTag.Length);
- // Set message
- // Encoding unicode = Encoding.Unicode;
- // Encoding utf8 = Encoding.ASCII;
- // byte[] smsMessageTag1 = Encoding.ASCII.GetBytes(Message);
- // byte[] smsMessageTag = Encoding.Convert(utf8,unicode,smsMessageTag1);
- byte[] smsMessageTag = Encoding.Unicode .GetBytes(Message);
- IntPtr smsMessage = AllocHGlobal((IntPtr)smsMessageTag.Length);
- Marshal.Copy(smsMessageTag, 0, smsMessage, smsMessageTag.Length);
- // Get handle
- if (0 != SmsOpen(SMS_MSGTYPE_TEXT, SMS_MODE_SEND, ref smsHandle, 0))
- returnValue = -1; // Could not open
- // Send message
- if (0 != SmsSendMessage(smsHandle, 0, smsAddress, 0,
- smsMessage, smsMessageTag.Length,
- smsProviderData, smsProviderDataTag.Length,
- SMSDE_GSM, SMS_OPTION_DELIVERY_NO NE, 0))
- returnValue = -2;
- FreeHGlobal(smsMessage);
- FreeHGlobal(smsProviderData);
- FreeHGlobal(smsAddress);
- // Release handle
- if (0 != SmsClose(smsHandle))
- returnValue = -3; // Could not close
- return returnValue;
- }
- }
- }