一、怎樣將已安裝好的應用程序卸載:
用unload.exe,
szUninstallBuf這個參數(shù)必須和注冊表 HLM\SOFTWARE\APPS\下的對應應用的名稱一致。
有個前提,使用這個必須是在cab中沒有指定 nouninstall這個參數(shù)
PROCESS_INFORMATION stProgressInfo;
if ( CreateProcess(_T("\\Windows\\unload.exe"), szUninstallBuf, NULL, NULL, NULL, 0, NULL, NULL, NULL, &stProgressInfo) )
二、屏蔽talk鍵(打電話的那個鍵):向窗口發(fā)送SHCMBM_OVERRIDEKEY消息,在WM_HOTKEY中進行處理。
參考SDK自帶的Sample,位于“Windows Mobile 6 SDK\Samples\Common\CPP\Win32\FullScreen”目錄。該例子演示了如何在Windows Mobile上隱藏taskbar和softkey,進行全屏顯示。其中,退出全屏的功能,采用softkey按鈕來實現(xiàn)。而具體的方式,就是向窗口發(fā)送SHCMBM_OVERRIDEKEY消息,在WM_HOTKEY中,加入用戶自己的應用。以該工程為例,我們進行修改,加入“按Talk按鍵退出全屏”這個功能,而不彈出撥號界面。
1.在SetSoftkeyBarForFullScreen函數(shù)中,加入消息發(fā)送函數(shù):
// Override/Undo softkeys for key press notifications, so we can
// display taskbar & softkeys on SK1/SK2 press in full screen.
DWORD dwBits;
dwBits = bFullScreen
? SHMBOF_NODEFAULT | SHMBOF_NOTIFY
: 0;
SendMessage(hwndSoftKeyBar,
SHCMBM_OVERRIDEKEY,
VK_TSOFT1,
MAKELPARAM(SHMBOF_NODEFAULT | SHMBOF_NOTIFY, dwBits));
SendMessage(hwndSoftKeyBar,
SHCMBM_OVERRIDEKEY,
VK_TSOFT2,
MAKELPARAM(SHMBOF_NODEFAULT | SHMBOF_NOTIFY, dwBits));
//加入的消息發(fā)送函數(shù)
SendMessage(hwndSoftKeyBar,
SHCMBM_OVERRIDEKEY,
VK_TTALK,
MAKELPARAM(SHMBOF_NODEFAULT | SHMBOF_NOTIFY, dwBits));
2.在CALLBACK DialogProc(…)函數(shù)的WM_HOTKEY中,加入VK_TTALK鍵的處理:
caseVK_TTALK:
{
// if we are in full screen mode we want to exit
// when the user presses a softkey.
if(g_bFullScreen)
{
SendMessage(GetDlgItem(hWnd,IDC_EDIT), WM_SETTEXT, 0, (LPARAM)L"[TALKkey] Exiting Full Screen");
FullScreen(hWnd, FALSE);
}
}
break;
有關參考如下:
WM_HOTKEY:http://msdn.microsoft.com/en-us/library/aa453868.aspx
SHCMBM_OVERRIDEKEY:http://msdn.microsoft.com/en-us/library/aa454997.aspx
三、Windows Mobile上的無線網(wǎng)絡接入點掃描:codeproject上有個Wifi AP掃描程序,稱為:Wifi scanner + custom MFC controls。用它能夠掃描當前的無線環(huán)境,發(fā)現(xiàn)周圍的AP接入點,顯示他們的名字、MAC地址、信號強度(RSSI)、Wifi信道以及是否需要密碼等信息。
源碼的運行設備是Pocket PC 2003se,要運行在window mobile平臺,要在編譯選項中Configuration Manger中選中wm設備,Active solution platform
選NEW,在彈出的窗口中,將new platform選擇為windows mobile 的sdk,最后在Project->Properties中,選擇Linker中的Command Line,在Additional Option中,將“machine:ARM”改為“machine:THUBM”。運行效果圖如下:
Download demo project - 97.6 Kb Download source - 90.8 Kb 四、短信相關的AT指令:
AT+CMGC:發(fā)出一條短消息
AT+CMGD:刪除SIM卡內(nèi)存的短消息
AT+CMGF:選擇短消息信息格式:0-PDU;1-文本
AT+CMGL:列出SIM卡中的短消息PDU/text: 0/"REC UNREAD"-未讀,1/"REC READ"-已讀,2/"STO UNSENT"-待發(fā),3/"STO SENT"-已發(fā),
4/"ALL"-全部的
AT+CMGR:讀短消息
AT+CMGS:發(fā)送短消息
AT+CMGW :向SIM內(nèi)存中寫入待發(fā)的短消息
AT+CMSS:從SIM卡內(nèi)存中發(fā)送短消息
AT+CNMI:顯示新收到的短消息
AT+CPMS:選擇短消息內(nèi)存
AT+CSCA:短消息中心地址
AT+CSCB :選擇蜂窩廣播消息
AT+CSMP:設置短消息文本模式參數(shù)
AT+CSMS:選擇短消息服務
相關代碼:
初始化短信模式設置的時候,可以使用:
//set AT+CMGF=1+回車換行
m_serialPort2.Write(new char[] { 'A', 'T', '+', 'C', 'M', 'G', 'F', '=', '1' }, 0, 9);
m_serialPort2.Write(new byte[] { 0x0D }, 0, 1);
m_serialPort2.Write(new byte[] { 0x0A }, 0, 1);
短信內(nèi)容發(fā)送完畢必須以十六進制數(shù)0x1A結束,例如,發(fā)送短信時,先發(fā)送對方號碼,然后發(fā)送數(shù)據(jù):
//發(fā)送text中輸入的對方手機號碼
stATCommand = "AT+CMGS=+86" + textBoxPhoneNumber.Text;
btATCommand = stATCommand.ToCharArray();
m_serialPort2.Write(btATCommand, 0, 22);
m_serialPort2.Write(new byte[] { 0x0D }, 0, 1);
m_serialPort2.Write(new byte[] { 0x0A }, 0, 1);
Thread.Sleep(15);
m_serialPort2.Write(new char[] { 'H', 'e', 'l', 'l', 'o'}, 0, 5);
//set SMS end symbol
m_serialPort2.Write(new byte[] { 0x1A }, 0, 1);
//發(fā)送text中輸入的對方手機號碼
stATCommand = "AT+CMGS=+86" + textBoxPhoneNumber.Text;
btATCommand = stATCommand.ToCharArray();
m_serialPort2.Write(btATCommand, 0, 22);
m_serialPort2.Write(new byte[] { 0x0D }, 0, 1);
m_serialPort2.Write(new byte[] { 0x0A }, 0, 1);
Thread.Sleep(15);
m_serialPort2.Write(new char[] { 'H', 'e', 'l', 'l', 'o'}, 0, 5);
//set SMS end symbol
m_serialPort2.Write(new byte[] { 0x1A }, 0, 1);
五、怎樣通過CMPP短信網(wǎng)關下發(fā)wap push ,相對于下發(fā)普通短信,有兩個地方不同。
1、CMPP_SUBMIT消息包的部分參數(shù)值改變。具體是:
Msg_Fmt = 4(表示消息內(nèi)容是二進制),
TP_pid = 0;
TP_udhi = 1;
2、字段Msg_Content的內(nèi)容是二進制數(shù)字,有特定的組合方式。格式解析起來,就是所謂的
“壓縮后的XML“,即WBXML,一共有7個部分,把每個部分的二進制碼按順序組合起來填入
Msg_Content字段,當做普通短信下發(fā)即可。代碼大概如下:
char szWapPushHeader1[12] = {0x0B, 0x05, 0x04, 0x0B, 0x84, 0x23, 0xF0, 0x00, 0x03,
0x03, 0x01, 0x01};
char szWapPushHeader2[9] = {0x29, 0x06, 0x06, 0x03, 0xAE, 0x81, 0xEA, 0x8D, 0xCA};
char szWapPushIndicator[8] = {0x02, 0x05, 0x6A, 0x00, 0x45, 0xC6,0x0C, 0x03};
char szWapPushDisplayTextHeader[3] = {0x00, 0x01, 0x03};
char szEndOfWapPush[3] = {0x00, 0x01, 0x01};
//以上數(shù)字串是什么意思,估計有幾個說明可以參考下, 又是前人經(jīng)驗:
//0B WAP PUSH頭部的總長度
//05040B8423F0表示接下來是一個WAP PUSH
//00 表示是Concatenated Short Messages
//03 長度
//03 reference number
//01 表示分成1個短信發(fā)送
//01 當前包的序號
//這個并不不影響功能的樣子。好象只需要知道分幾條短信和
//序號發(fā)就可以了。以上每個部分,也有其他可以通過測試的不同的串值,目前只測了這種
//常見的值。
//以下兩個字串就是需要自己填寫的了:
//szWapPushUrl:wap push的目的鏈接,費盡心機不就是想把這個發(fā)出去嘛。要求是"去除了
//http://前綴的UTF8編碼的Url地址"的二進制編碼。現(xiàn)在是小測試,直接寫上值吧,否則應
//該是經(jīng)過編碼轉(zhuǎn)化的。以下url內(nèi)容是"wap.sina.com.cn"
char szWapPushUrl[12] = {0x77,0x61,0x70,0x2E,0x73,0x69,0x6e,0x61,0x2e,0x63,0x6f,0x6d};
//這個,就是想在手機上顯示的關于這個URL的文字說明了,在我的手機上顯示成該wap push
//的標題.也同樣是"UTF8編碼的二進制"內(nèi)容是"好好學習"
char szMsg[12] = {0xE5,0xA5,0xBD,0xE5,0xA5,0xBD,0xE5,0xAD,0xA6,0xE4,0xB9,0xA0};
具體的實現(xiàn)代碼如下:
char szHex[1024];
int iUrllen,iMsgLen,iLen;
iUrllen = 12;
iMsgLen = 12;
memset(szHex, 0, sizeof(szHex));
iLen = 0;
memcpy(szHex, szWapPushHeader1, 12);
iLen += 12;
memcpy(szHex+iLen, szWapPushHeader2, 9);
iLen += 9;
memcpy(szHex+iLen, szWapPushIndicator, 8);
iLen += 8;
memcpy(szHex+iLen, szWapPushUrl, iUrllen);
iLen += iUrllen;
memcpy(szHex+iLen, szWapPushDisplayTextHeader, 3);
iLen += 3;
memcpy(szHex+iLen, szMsg, iMsgLen);
iLen += iMsgLen;
memcpy(szHex+iLen, szEndOfWapPush, 3);
iLen += 3;
Msg_Length = iLen;
memcpy((char*)Msg_Content, szHex, Msg_Length);
//把Msg_Content當普通短信下發(fā)就可以了。對于push很多地方是被運營商給屏蔽了。
六、Cookie文件格式,默認位置:默認位置是Windows\Profiles\Guest\Cookies,持久性cookie,有一個截止日期,都存儲在HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\Explorer\Shell Folders的注冊表項中指定的位置;
如果沒有到期日,會話cookie都存儲在內(nèi)存中,并且只提供給創(chuàng)建它們的進程使用。
所以,要設置一個多個進程都可以使用的cookie,必須設置好到期日。
格式如下:
cnt_uid_www
fa565c5abe27b0eb1f0497
csdn.net/
1536
560450176
29956594
2009325664
29943116
*
其中
第1行為Cookie名稱;
第2行是Cookie的值;
第3行是Cookie所屬站點的地址;
第4行是個標記值;
第5行為超時時間的低位(Cardinal/DWORD);
第6行為超時時間的高位;
第7行為創(chuàng)建時間的低位;
第8行為創(chuàng)建時間的高位;
第9行固定為 * ,表示一節(jié)的結束。
一個文件可能包含有多個節(jié),按上面的格式循環(huán)即可。
也可以用程序來寫cookie,當打開相關網(wǎng)頁時,網(wǎng)頁可自動識別,雖然這樣的實際應用并不是很常見。
InternetSetCookie(L"csdn.net/", L"cnt_uid_www", L"fa565c5abe27b0eb1f0497;expires=Sat,10-Jul-2010 00:00:00 GMT");
如上,“expires=Sat,10-Jul-2010 00:00:00 GMT”指定了cookie的有效期限。
注冊表位置:HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\Explorer \Shell Folders,下面的
Cache、Cookies、History三個子鍵路徑中的“Windows\”全部換成“Storage Card\”即可。系統(tǒng)會自動在SD卡上創(chuàng)建自己的路徑。
再將Windows目錄下的profiles整個文件夾刪掉,文件目錄已經(jīng)建立到SD卡上的 \Storage Card\profiles了,