WINCE7.0 获取CPU,MEMORY等硬件和系统信息


PC环境:WIN7(32)

开发板:TCC8925+WINCE7.0

       在开发板上做应用程序时,需要获取CPU,内存,系统等信息,首先想到GetSystemInfo函数,但是信息明显不够具体。于是打开开发板控制面板,再打开System面板,有很详细的设备系统信息,正好可以参考一下。


但是,对WINCE源码目录不够清楚,不知道这些代码在哪里,怎么办?

1.找到目标应用程序

打开VS中的远程工具,进程查看器,


找到了,就是这个CTLPNL.EXE了。

2.查找应用程序源码

老办法,直接在WINCE安装目录查找CTLPNL,很傻很有用。很快就找到了源码目录。


为了方便,直接用史上最牛逼的代码查看工具SOURCE INSIGHT将整个APP目录添加进去,以后还可以找别的代码用。

3.查找目标文件

直接无脑搜索,SOURCE INSIGHT同步完成后,直接在项目中搜索应用程序中,也就是图片上的关键字,如Processor Type


第一个结果就可以明显的看出,正是我们要找的东西,和程序面板上完全吻合。

到了这里,估计我们需要的代码,就在Cplmain.cpp中了。

打开这个结果,查看具体信息。


这个已经够明显了,连对话框,包含的控件,显示的文字,全部都有,例如显示CPU信息的CSTATIC控件为IDC_STATIC_PROCESSOR。

4.查找关键代码

直接用IDC_STATIC_PROCESSOR来查找,肯定能找到所有获取并设置CPU信息的代码,也就是我们最终的目标代码。


很明显,前面我猜测的目标代码在Cplmain.cpp中,完全错误,伤心。

打开关键文件System.cpp就可以看到关键代码了,搞定。

OSVERSIONINFO osvi;
		    TCHAR szTemp[190];

			osvi.dwOSVersionInfoSize = sizeof(osvi);
			GetVersionEx(&osvi);

			if (osvi.dwBuildNumber > 0) {
	 			StringCbPrintf(szTemp, sizeof(szTemp), CELOADSZ(IDS_SYSTEM_VER_WITH_BUILD), 
							osvi.dwMajorVersion, osvi.dwMinorVersion, osvi.dwBuildNumber);
			} else {
	 			StringCbPrintf(szTemp, sizeof(szTemp), CELOADSZ(IDS_SYSTEM_VER_WITHOUT_BUILD), 
								osvi.dwMajorVersion, osvi.dwMinorVersion);
			}
			SetDlgItemText(hDlg, IDC_STATIC_VER_SYS, szTemp);
			
			// set Processor type
			SYSTEM_INFO sys_info;
			ZEROMEM(&sys_info);
			GetSystemInfo(&sys_info);

			PROCESSOR_INFO pro; 
			DWORD count;
			KernelIoControl(IOCTL_PROCESSOR_INFORMATION, NULL, 0, &pro, sizeof(PROCESSOR_INFO), &count);
			lstrcpy(szTemp, pro.szVendor);
			if(pro.szVendor[0] != NULL && (pro.szProcessCore[0] != NULL || pro.szProcessorName[0] != NULL)) {
				lstrcat(szTemp, TEXT(", "));
			}
			lstrcat(szTemp, pro.szProcessCore);
			if(pro.szProcessCore[0] != NULL && pro.szProcessorName[0] != NULL){
				lstrcat(szTemp, TEXT("-"));
			}
			lstrcat(szTemp, pro.szProcessorName);

			SetDlgItemText(hDlg, IDC_STATIC_PROCESSOR, szTemp);
			PostMessage(GetDlgItem(hDlg, IDC_STATIC_PROCESSOR), EM_SETSEL, 0, 0);

			// set RAM size
			DWORD PageSize, TotPages, StoreUsed, RamUsed, StorePages;
			GetMemoryInfo(PageSize, TotPages, StoreUsed, RamUsed, StorePages);
			StringCbPrintf(szTemp, sizeof(szTemp), CELOADSZ(IDS_SYSTEM_RAMSIZE), TotPages*PageSize);
			SetDlgItemText(hDlg, IDC_STATIC_RAM, szTemp);

			// set PNP card info
			ShowPNPInfo(hDlg);

			// set User & Company do this on WM_PAINT as it can change
			OWNER_PROFILE OwnerProfile;
			GetOwnerInfo(&OwnerProfile, NULL);

			// Truncate the strings and append ellipses is they are too long
			SetTextWithEllipsis(DI(IDC_STATIC_USER), OwnerProfile.szName);
			HWND hUserCompany = DI(IDC_STATIC_USER_COMPANY);
			if (hUserCompany)
				SetTextWithEllipsis(hUserCompany, OwnerProfile.szCompany);

			// Create the tooltip window for long strings
			g_hToolTip = CreateWindowEx(WS_EX_TOPMOST, TOOLTIPS_CLASS, NULL,
			                            WS_POPUP | TTS_NOPREFIX | TTS_ALWAYSTIP,
			                            CW_USEDEFAULT, CW_USEDEFAULT,
			                            CW_USEDEFAULT, CW_USEDEFAULT,
			                            hDlg, NULL, g_hInst, NULL);

			if (g_hToolTip)
			{
				TOOLINFO ti = {0};
				ti.cbSize = sizeof(ti);
				ti.uFlags = TTF_IDISHWND | TTF_SUBCLASS | TTF_TRANSPARENT;
				ti.hwnd = hDlg;
				ti.lpszText = LPSTR_TEXTCALLBACK;
				ti.uId = (UINT) GetDlgItem(hDlg, IDC_STATIC_PROCESSOR);
				SendMessage(g_hToolTip, TTM_ADDTOOL, NULL, (LPARAM) &ti);

				g_wndProcTT = (WNDPROC) SetWindowLong(g_hToolTip, GWL_WNDPROC,
				                                      (LONG) SYS_ToolTipProc);
				ASSERT(g_wndProcTT);
				SetWindowLong(g_hToolTip, GWL_USERDATA, (LONG) hDlg);
			}

            AygInitDialog( hDlg, SHIDIF_SIPDOWN );

			SetFocus(GetDlgItem(hDlg, IDC_EXPANSION_CMB));

5.编写应用程序

5.1有了参考代码,照抄就容易多了,突然发现上班也是件开心的事情了。

于是包含头文件#include <Pkfuncs.h>,复制粘贴编译。

居然出错了,找不到头文件#include <Pkfuncs.h>,看来SDK中没有加入这个头文件。于是很暴力的把整个D:\WINCE700\public\COMMON\oak\inc里的文件
到D:\Program Files\Windows CE Tools\wce600\magellan\Include\Armv4i目录下,头文件找到了,结果却出现了一堆其他文件找不到的错误。回想一下,问题就很明显了,我装的是WINCE7.0的平台,用的SDK不是自己导出来的,是官方给的基于WINCE6.0的。

5.2更换SDK

     打开系统工程,之前已经编译过WINCE7.0的系统了,所以直接添加个SDK,编译,安装,很快搞定。

    测试SDK,用新的WINCE7.0SDK新建一个智能设备工程,直接编译,居然报错'lstrlenW' : is not a member of 'ATL,查了一个,是WINCE7和6的ATL等库的差别导致的,于是安装补丁VisualStudioDeviceWindowsEmbeddedCompact7.msi,记得用管理员权限装哦。下载地址:http://support.microsoft.com/kb/2468183。重启机器,错误还在,再谷哥,发现还有个地方要设置,在应用程序中,手动加入新的ATL目录文件。工程属性->c/c++->general->additional include directories增加D:\Program Files\Microsoft Visual Studio 9.0\VC\ce7\include和D:\Program Files\Microsoft Visual Studio 9.0\VC\ce7\atlmfc\include。这两个目录都是安装ATL补丁后产生的。错误果然没有了,除了一大堆警告,直接无视。

6.程序运行

      到这里,问题都解决了,自己程序中,也能正常获取信息了,以后有类似的需求,还可以用同样的方法,从系统自带的应用中找解决办法。




ATHEROS The Licensed Software includes software developed by Atheros Communications, Inc. (“Atheros”). You must separately obtain rights beyond evaluation and demonstration in connection with the Licensed Software from Atheros. ARM The Licensed Software may include software developed by ARM, Ltd. The software may only be used with an ARM microprocessor, which includes the Freescale i.MX and MXC product lines. CODEC STANDARDS This software includes codec standards for encoding and decoding audio and visual content. You are not licensed for any implementation or distribution of the technology in any commercial product or service such as runtime images that you develop using this software. You are responsible for determining and securing these license rights. CSR The Licensed Software includes software and hardware developed by Cambridge Silicon Radio, Inc. (“CSR”). You must separately obtain rights beyond evaluation and demonstration in connection with the Licensed Software from CSR. AVC/H.264 VISUAL STANDARD. This software may include AVC/H.264 video decoding technology, MPEG LA, L.L.C. requires this notice: THIS PRODUCT IS LICENSED UNDER THE AVC/H.264 PATENT PORTFOLIO LICENSES FOR THE PERSONAL AND NON-COMMERCIAL USE OF A CONSUMER TO (A) ENCODE VIDEO IN COMPLIANCE WITH THE AVC/H.264 STANDARD (“AVC/H.264 VIDEO”) OR (B) DECODE AVC/H.264 VIDEO THAT WAS ENCODED BY A CONSUMER ENGAGED IN A PERSONAL AND NON-COMMERCIAL ACTIVITY AND/OR WAS OBTAINED FROM A VIDEO PROVIDER LICENSED TO PROVIDE AVC/H.264 VIDEO. NO LICENSE IS GRANTED OR WILL BE IMPLIED FOR ANY OTHER USE. If you have questions about the AVC/H.264 visual standard, please contact MPEG LA, L.L.C., 250 Steele Street, Suite 300, Denver, Colorado 80206; www.mpegla.com. MPEG-2 VISUAL STANDARD. This software includes MPEG-2 visual decoding technology. MPEG LA, L.L.C. requires this notice: USE OF THIS PRODUCT IN ANY MANNER THAT COMPLIES WITH THE MPEG 2 VISUAL STANDARD IS PROHIBITED, EXCEPT FOR USE DIRECTLY
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值