一. wince中,如何根据进程名称获得该进程ID DWORD GetProcessID(CString name) { HANDLE procSnap = CreateToolhelp32Snapshot(TH32CS_SNAPPROCESS, 0); if(procSnap == INVALID_HANDLE_VALUE) { printf("CreateToolhelp32Snapshot failed, %d ",GetLastError()); return NULL; } // DWORDprocessid = NULL; PROCESSENTRY32 procEntry = { 0 }; procEntry.dwSize = sizeof(PROCESSENTRY32); BOOL bRet = Process32First(procSnap,&procEntry); while(bRet) { if(name.Compare(procEntry.szExeFile)==0) //这里做比较就可以了 { processid = procEntry.th32ProcessID; break; } bRet = Process32Next(procSnap, &procEntry); } CloseHandle(procSnap);
return processid; }
加载toolhelp.dll和link里面写入toolhelp.lib,包含头文件 <tlhelp32.h>
二.关闭进程 // 获取进程ID DWORD dwProcessId = GetProcessID(_T("explorer.exe"));; // 从进程ID打开进程句柄 if(dwProcessId==NULL) return; HANDLE handle=OpenProcess(0,FALSE,dwProcessId); if(handle==NULL) { LPVOID lpMsgBuf; FormatMessage( FORMAT_MESSAGE_ALLOCATE_BUFFER | FORMAT_MESSAGE_FROM_SYSTEM | FORMAT_MESSAGE_IGNORE_INSERTS, NULL, GetLastError(), 0, // Default language (LPTSTR) &lpMsgBuf, 0, NULL); // Process any inserts in lpMsgBuf. // ... // Display the string. ::MessageBox( NULL, (LPCTSTR)lpMsgBuf, L"Error", MB_OK | MB_ICONINFORMATION ); // Free the buffer. LocalFree( lpMsgBuf ); return; } // 强制终止进程 if(handle!=NULL) TerminateProcess(handle,0); 三.显示关闭任务栏 1.显示 void ShowTaskBar() 四.打开和关闭资源浏览器explorer.exe 1.打开explorer.exe,有以下2种方法 ①CreateProcess LPCTSTR strPath = _T("\\windows\\explorer.exe"); PROCESS_INFORMATION processInfo; if(!CreateProcess(strPath,NULL,NULL,NULL,NULL, CREATE_NEW_CONSOLE,NULL,NULL,NULL, &processInfo)) { return FALSE; } CloseHandle(processInfo.hThread); CloseHandle(processInfo.hProcess); ②ShellExecuteEx SHELLEXECUTEINFO shinfo; memset(&shinfo, 0, sizeof(SHELLEXECUTEINFO)); shinfo.fMask = SEE_MASK_NOCLOSEPROCESS | SEE_MASK_FLAG_NO_UI; shinfo.cbSize = sizeof(SHELLEXECUTEINFO); shinfo.lpVerb = _T("Open"); shinfo.hwnd = NULL; shinfo.lpFile = _T("\\windows\\explorer.exe"); shinfo.lpParameters = _T(""); shinfo.nShow = SW_SHOW; BOOL bRet = ShellExecuteEx(&shinfo); return bRet; 2.关闭explorer.exe // 获取进程ID HANDLE handle=OpenProcess(PROCESS_ALL_ACCESS,FALSE,dwProcessId); // 强制终止进程
五.启动微软输入法啊 //#include <Sipapi.h> void CDialog::OnSetfocusEditmsg() { SipShowIM(SIPF_ON); //当焦点在编辑框时触发软键盘启动
} 1. 枚举输入法 int SipEnumIM( IMENUMPROC pEnumIMProc); int SipEnumIMProc( IMENUMINFO *pIMInfo);
struct_IMENUMINFO{ TCHAR szName[MAX_PATH]; CLSID clsid; }IMENUMINFO; 2. 设置当前输入法 BOOL SipSetCurrentIM(CLSID *pClsid);
六.WinCE中添加微软拼音输入法 MSPY3 1.添加相应组件
·
·
2.注册表 在Platform.reg中加入 ; Simplified Chinese Intelligent IME (MSPY3) [HKEY_CURRENT_USER/Keyboard Layout/Preload/1]
3.重新编译后即加入微软简体中文输入法3.0 MSPY3
七.字符型转换成整型 wcstoi,wcstof, wcstol和wcstod 八.移动系统软键盘位置 SIPINFO SipInfo; memset(&SipInfo,0,sizeof(SIPINFO)); SipInfo.cbSize = sizeof( SipInfo ); BOOL bResult = SipGetInfo(&SipInfo); if(bResult) { CRect rc; GetDlgItem(IDC_PILEID)->GetWindowRect(rc); CRect rc0(SipInfo.rcSipRect); SipInfo.rcSipRect.left = rc.left; SipInfo.rcSipRect.right = rc.left+rc0.Width(); SipInfo.rcSipRect.top = rc.bottom; SipInfo.rcSipRect.bottom = rc.bottom+rc0.Height(); bResult = SipSetInfo(&SipInfo); }
九.让程序在Windows CE系统启动时自动运行 ①.让程序在Windows CE系统启动时自动运行(方法一) 1.假定Windows CE.NET目标工程目录为E:/ SMDK2440,并且工程已经Build成功, 假定Windows CE.NET的应用程序为MyApp.exe并存放在本地硬盘 E 盘下; 2.修改MyWinCE工程的project.bib文件,在MODULES添加如下内容: MyApp.exe E:/MyApp.exe NK H 3.创建快捷方式文件MyApp.lnk,文件内容如下: 10#/Windows/MyApp.exe MyApp.lnk文件也放入E:/目录下; 4.修改MyWinCE工程的project.bib文件,在FILES 添加如下内容: MyApp.lnk E:/MyApp.lnk NK H 5.修改MyWinCE工程的project.dat文件,添加如下内容: Directory("/Windows/Startup"):-File("MyApp.lnk","/Windows/MyApp.lnk") 8. Platform Builder IDE:【Build】->【Make Image】(记得千万不要Build或者Rebuild) 9.成功后,得到的NK.bin(或NK.nb0)就包含了应用程序MyApp.exe和MyApp.lnk,当把相应的内核烧入开发板MyApp程序就会在系统启动时自动运行。 ②关于系统程序的启动顺序(自启动方法二) 采用这种方法的前提是你要启动的应用程序已经编译进了NK.nb0或者NK.bin中了。具体方法及说明如下:
platform.reg或者common.reg,在[HKEY_LOCAL_MACHINE/init]段添加如下类似内容:
"DependXX"=hex:YY,ZZ,... 其中XX是十进制的数字,表示<你的程序>的启动顺序标识;YY,ZZ是Least Significant的十六进制数字,表示<你的程序>所依赖(先于<你的程序>运行)的程序的启动顺序标识。 来看两个系统的例子: [HKEY_LOCAL_MACHINE/init] ; @CESYSGEN IF CE_MODULES_SHELL "Launch10"="shell.exe" ; @CESYSGEN ENDIF IF IMGTINY ! ; @CESYSGEN IF CE_MODULES_DEVICE "Launch20"="device.exe" ; @CESYSGEN ENDIF ; @CESYSGEN IF CE_MODULES_GWES IF NOGUI ! "Launch30"="gwes.exe" "Depend30"=hex:14,00 ENDIF Launch10、Launch20、Launch30表示了系统在启动时会先加载“shell.exe”,然后再加载“device.exe”和”gwes.exe”,而且可以看到”gwes.exe”的启动还有依赖“device.exe”,即只有在“device.exe”完全启动后“gwes.exe”才能启动。如果我们要在系统启动时候也启动自己的程序可以像如下设置: 例如: "Launch80"="MyApp.exe" "Depend80"=hex:1E,00 语意为程序MyApp.exe的启动顺序标识是80,它依赖标识为30(即001E)的程序。 如果<你的程序>不依赖其他程序,那么不需要添加"DependXX"=hex:YY,zz,...指示; 如果<你的程序>依赖多个程序,那么在"DependXX"指示中指明; eg. "Launch80"="MyApp.exe" "Depend80"=hex:0A,00,1E,00 语意为MyApp.exe程序的启动依赖标识为10和30的程序。注意Launch后面的数值不能和系统默认的某个程序的值一样,不然在编译的时候就会报错。 修改完后只要 PlatformBuilder IDE->Build->MakeImage,生成新的NK.bin就可以了,不用重新编译。 ③去掉系统启动 explorer项 Windows CE.NET的桌面确实漂亮,但是如果我们的嵌入式系统使用微软的桌面,总让我感觉不伦不类。因此,要想个办法,让我们的程序开机启动,把微软的那个桌面给替换掉。其中使用startup的快捷方式再加上隐藏任务栏的方法,效果非常的好,但是每次启动的时候,总是微软的桌面先出来,再启动我们的程序,感觉还是不爽。 有一种方法如下: 1)首先新建工程,把你的应用程序放到内核里面去(前面介绍了如何做); 2)编译平台; 3)修改E:/SMDK2440/RelDir/SAMSUNG_SMDK2440_ARMV4IRelease/shell.reg的文件 : 在文件中有这样一行: [HKEY_LOCAL_MACHINE/init] "Launch50"="explorer.exe" "Depend50"=hex:14,00, 1e,00 把这个explorer.exe改成你的应用程序(比如:MyApp.exe)就可以了; 4) Platform Builder IDE:【Build】->【Make Image】(记得千万不要Build或者Rebuild)否则就前功尽弃了。 5)成功后,得到的NK.bin(或NK.nb0)就包含了应用程序MyApp.exe和MyApp.lnk,当把相应的内核烧入开发板MyApp程序就会在系统启动时自动运行。
至此,随心所欲的让自己的程序在Windows CE系统启动时自动运行了。 原理说明: 1.将自定义的文件打包进NK.bin中的方法有两种 一种是编辑project.bib文件。 在FILES Section描述文件的名称,源文件的路径,文件在目标系统中的属性。在上面, MyApp.exe $(_FLATRELEASEDIR)/MyApp.exe NK H 表示将你所建工程如:E:/SMDK2440/RelDir/SAMSUNG_SMDK2440_ARMV4IRelease目录下的文件MyApp.exe文件打包进NK.bin,并且此文件将处在Kernel内存区,文件属性类型为隐藏。 第二种方法是添加User Feature。 PlatformBuilder IDE->FeatureView->在"MyWinCE Features"上Right Click鼠标->Insert User Feature->指向想打包的文件。 无论采用哪种打包方法,在启动的Windows CE系统中,文件都在/Windows目录下。下一步就是根据需要重新组织文件系统的目录结构。 2.组织文件系统的目录结构的途径在于修改project.dat文件 添加文件目录结构的描述。描述的语法如下: root:-Directory("<目录名>") 表示在root目录(/)下创建目录 Directory("/<目录名>"):-Directory("<子目录名>") 表示在指定目录下创建子目录 Directory("/("<目录名>/<子目录名>"):-File("<文件名>.<扩展名>","/Windows/<文件名>.<扩展名>") 表示在指定目录下创建/Windows目录下文件的拷贝,显示名称是<文件名>.<扩展名>。 3.应用程序并不一定需要打包进NK.bin 假定程序在硬盘的某个位置,如/硬盘/MyApp/MyApp.exe,那么只需创建快捷方式文件,链接指向/硬盘/MyApp/MyApp.exe就是了。 整个过程简单来说就是,想清楚应用程序将会出现在哪个目录下,创建正确的快捷方式文件,修改目标系统目录组织配置,最后将应用程序和相应的快捷方式文件打包进NK.bin。
十.freepCE--移植的winCE下的中文输入法源代码http://blog.csdn.net/backstrokefish/archive/2006/11/04/1365873.aspx
一.下载地址:
二安装及调试说明
十一.CEdit编辑框中输入中文不弹出中文输入面板 设置CEdit的属性Multiline。 关闭explorer.exe浏览器软件。 十二. WinCE设备盘符的修改 HKEY_LOCAL_MACHINE/System/StorageManager/Profiles
十三.Sysgen出错 wzctool.lib(wzctool.obj) : error LNK2019: unresolved external symbol _WZCDeleteIntfObjEx referenced in function
"void __cdecl DoQueryCache(unsigned short *)" (?DoQueryCache@@YAXPAG@Z)
去掉Wireless的组件即可。
十四、Makeimg Error with E32 type Images 把编译出错的文件从project.bib的MODULES段移到FILES段即可解决该问题。 FILES ; Name Path Memory Type ; -------------- --------------------------------------------- -----------
十五、去除explorer界面WINCE LOGO下有行WINCE版本信息 修改如下: 在文件C:/WINCE500/PUBLIC/SHELL/OAK/HPC/CESHELL/UI/desktopview.cpp中屏蔽以下这些代码 /* #ifndef SHIP_BUILD WCHAR wszVersion[256]; OSVERSIONINFO VerInfo; VerInfo.dwOSVersionInfoSize = sizeof(OSVERSIONINFO);
::GetVersionEx(&VerInfo); ::wsprintf(wszVersion, L"Microsoft Windows CE v%d.%02d (Build %d on %s) ", VerInfo.dwMajorVersion, VerInfo.dwMinorVersion, VerInfo.dwBuildNumber, TEXT(__DATE__)); if (m_hbmpDesktop && !fTileBackgroundImage) { rc.top = rcBlt.bottom + 5; } else { rc.top = rc.top + (rc.bottom - rc.top) / 2 - 8; } ::DrawText(hdc, wszVersion, -1, &rc, DT_SINGLELINE | DT_CENTER | DT_TOP); #endif*/
十六、PB5.0试用期过期的破解方法 "在PB安装目录下有个C:/Program Files/Windows CE Platform Builder/5.00/etkremov.inf,试用期是以此文件的创建日期来计算的。将其删除,然后在其他目录新建一个文件,再重命名为etkremov.inf,再拷贝过来,不要直接新建这个文件,否则由于filesystem tunnel,会导致新建的文件总是沿用老文件的创建时间。
十七、“无法显示microsoft文档资源管理器,因为指定的帮助集合“ms-help://ms.msdnqtr.v90.chs”无效” 不是因为msdn出现问题,而是因为系统关于帮助文件.chm文件出现错误,windows中打开chm文件的程序是”hh.exe“,但是负责建立帮助文件全文检索的是以下几个组件,只要重新注册这几个组件,就可以使用msdn了。其他的一切关于注册表的说法都不管用。解决方法:在开始菜单-->运行里运行: regsvr32 hhctrl.ocx regsvr32 itss.dll regsvr32 itircl.dll
十八、VS2005编译动态库失败,去掉预处理器定义宏_USRDLL即可 1>mfcs80u.lib(dllmodul.obj) : error LNK2005: _DllMain已经在Keyboard.obj中定义 1>mfcs80u.lib(oleexp.obj) : error LNK2005: _DllGetClassObject已经在Keyboard.obj中定义 1> mfcs80u.lib(oleexp.obj) : error LNK2005: _DllCanUnloadNow已经在Keyboard.obj中定义
十九、关于如何在WIN7下运行PB5 做一个bat
批处理 start cepb.exe exit @ehco 并放到\Windows CE Platform Builder\5.00\CEPB\BIN\下,双击来运行PB5
二十、“无法显示microsoft文档资源管理器,因为指定的帮助集合“ms-help://ms.msdnqtr.v90.chs”无效” 不是因为msdn出现问题,而是因为系统关于帮助文件.chm文件出现错误,windows中打开chm文件的程序是”hh.exe“,但是负责建立帮助文件全文检索的是以下几个组件,只要重新注册这几个组件,就可以使用msdn了。其他的一切关于注册表的说法都不管用。解决方法:在开始菜单-->运行里运行: regsvr32 hhctrl.ocx regsvr32 itss.dll regsvr32 itircl.dll
二十一、使用Visul Studio 2005开发VC++智能设备应用程序,如果你的浏览器是IE7.0,如果发生无法创建VC++智能设备项目,解决方法如下:
二十二、在VS2005中创建或打开“智能设备”项目时,提示以下错误: “从用户数据存储中检索信息时出错。系统未找到指定的对象。” 和 “由于数据存储中不存在项目引用的设备平台,因此无法打开项目。”
二十三、IP地址设置 [HKEY_LOCAL_MACHINE\Comm\PCI\R60401\Parms\TcpIp] "EnableDHCP"=dword:0 "DefaultGateway"="192.168.0.1" "UseZeroBroadcast"=dword:0 "IpAddress"="192.168.0.178" "Subnetmask"="255.255.255.0"
二十四、FAT32的U盘识别速度慢 WinCE5补丁网站: http://www.microsoft.com/windowsembedded/en-us/downloads/download-windows-embedded-ce-5.aspx
二十五、禁止WZC(wireless zero configuration)零配置窗口自动弹出 [HKEY_LOCAL_MACHINE\Drivers\BuiltIn\Ethman\Popup] "Popup"=dword:0
|
|