




已阅读5页,还剩10页未读, 继续免费阅读
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
wince自动启动程序设置修改注册表HKEY_LOCAL_MACHINEinit“Launch80=”app.exe”“Depend80=hex:14,00,1e,00这个是设定启动顺序,launch后面的数字越大的越是后启动,Depend80后面的指定依赖项,为16进制,上面的语句表明依赖项为launch20定义的device.exe和launch30中定义的gwes.exe,注意Launch后面的数字范围为0到99如何让应用程序随wince操作系统自启动如何让应用程序随wince操作系统自启动呢?我搜索了一下,网上有不少方法,但有时也会有疏漏的地方,通常一点小小的错误也会导致整个环节不能进行下去。在此,我想跟大家共同探讨一下,欢迎大家指正。首先,假设你的应用程序为:MyApp.exe。方法一:主要思想:将应用程序及其快捷方式也添加到映像里,再将快捷方式添加到StartUp目录下,这样当系统运行后应用程序就能自动运行。步骤:1先保证原工程文件是可以编译成功的。假设编译好的nk.bin文件所在文件夹为xxx_Relase。2创建快捷方式文件MyApp.lnk,文件内容如下:10#”WindowsMyApp.exe”(注意引号)3在pb中修改project.bib文件,在FILES Section添加:MyApp.exe $(_FLATRELEASEDIR)MyApp.exe NK HMyApp.lnk $(_FLATRELEASEDIR)MyApp.lnk NK H(注:$(_FLATRELEASEDIR)表示xxx_Relase文件夹;NK后面的H表明加入到nk.bin中的文件为隐藏属性)4把快捷方式添加到StartUp目录下,具体为:修改工程的project.dat文件,添加如下内容:Directory(WindowsStartup):-File(MyApp.lnk,WindowsMyApp.lnk)5从道理上讲,如果这时把MyApp.exe和MyApp.lnk拷贝到xxx_Relase文件夹下,然后Build-MakeImag的话就会把你的应用程序添加到NK里,但实际情况并非如此,经我实验,先要把工程文件全部rebuild一下,我这儿是sysgen了一下,如果你设置了在编译完后MakeImage的话,会有错误提示你未在你的磁盘上找到MyApp.exe。不用管它。把MyApp.exe和MyApp.lnk文件拷贝到xxx_Relase文件夹下,然后MakeImage一下(记住此时千万不能再rebuild了,否则会前功尽弃),把生成的NK.bin烧写到flash里,这样就可以看到你的应用程序MyApp.exe自启动了.方法二:主要思想:将应用程序添加到映像里,然后用你的应用程序直接替换Wince的桌面程序。步骤:1.像方法一一样把你的应用程序添加到映象里。提示:要查看添加映象是否成功,可以在操作系统启动后,看一下windows目录下是否有你的应用程序MyApp.exe(先要设置为可以查看系统文件和隐藏文件)。2.修改shell.reg(若在pb里找不到,可以到xxx_Relase文件夹下找):HKEY_LOCAL_MACHINEinitLaunch50=explorer.exeDepend50=hex:14,00, 1e,00把这个explorer.exe改成你的应用程序(比如:MyApp.exe)。3. MakeImage一下(还是记住不能再build了),把生成的NK.bin烧写到flash里,这样就可以看到你的应用程序MyApp.exe自启动了.这样做的好处是启动的时候wince的桌面程序都不会启动了,坏处是当你把应用程序关闭的时候由于原wince桌面程序的丢失而会使机器死机。方法三:主要思想:将应用程序添加到映像里,然后修改注册表,让应用程序自启动。这回不替换wince的桌面程序,而是让wince像加载桌面一样加载你的应用程序,效果跟方法一是一样的。步骤跟方法二是一样的,只是第二步稍有不同:在shell.reg文件中HKEY_LOCAL_MACHINEinit之下添加如下语句:Launch80=MyApp.exeDepend80=hex:1E,00说明:Depend80=hex:1E,00用来设置启动顺序和依赖程序,若你的应用程序不依赖于其它程序,这句可以不加。另外,应用程序也不一定就要加载到映象文件里,可以直接从u盘,硬盘,sd卡等加载,但是要先保证你的应用程序自启动时系统已能正确识别挂接的u盘,硬盘,sd卡等。有两个地方启动程序:1. 在注册表HKLMInit上加入键值:Launch99=你的程序名(可以是绝对路径),如果你的程序要依赖别的程序,还要加入:Depend99=依赖程序的启动序号(可以看看Init下其它程序的启动顺序)2.好像是在HKLM下有个WBT,里面有个地方也可以加入启动程序,每次注销都会重新启动一遍,而Init只有在重新开机时才启动。你要启动的程序,可以放在你的flash卡上(Init需要加入绝对路径),或者加入bib文件,编译进内核。WinCE应用程序开机自启动方法近日在开发过程中遇到WinCE应用程序开机自动运行的问题,在网上找了找,发现大概有以下三种方法:1、将应用程序和应用程序快捷方式添加到映像里,再将快捷方式添加到StartUp目录下,这样当系统运行后应用程序就能自动运行;2、直接替换Wince的SHELL,即修改注册表:HKEY_LOCAL_MACHINEinitLaunch50=explorer.exeDepend50=hex:14,00, 1e,00把这个explorer.exe改成你的应用程序(比如:MyApp.exe);3、把应用程序加入到映像,修改注册表:HKEY_LOCAL_MACHINEinitLaunch80=MyApp.exeDepend80=hex:1E,00可以设置启动顺序和依赖程序;以上方法都可行,但是都存在一个问题,就是应用程序是集成到NK里面的,也就是说每次升级应用程序都要重新编译下载内核,很麻烦,尤其在程序调试阶段,大家都希望把应用程序放在SD卡上,这样更新起来比较容易;据说通过第三种方法可以实现,即修改Launch80=MyApp.exe为Launch80=STDCardMyApp.exe( STDCard为SD卡目录),但是我试了一下没有成功,因为Launch80运行时SD卡的文件驱动还没有加载,找不到MyApp.exe文件。同样,采用快捷方式加载SD卡里的应用程序也不可行。所以我采用了另一种方法,自己编了一个小程序,比如叫ShellExe.exe,将此程序加入到映像里,通过StartUp快捷方式调用ShellExe,ShellExe再去调用SD卡里的应用程序,具体实现步骤如下:1、在eVC下编译如下代码:int WINAPI WinMain(HINSTANCE hInstance,HINSTANCE hPrevInstance,LPTSTRlpCmdLine,intnCmdShow)WIN32_FIND_DATA fd;HANDLE hd=INVALID_HANDLE_VALUE;int iCount = 20;while(iCount-)hd=:FindFirstFile(lpCmdLine,&fd);Sleep(500);if(INVALID_HANDLE_VALUE!=hd) break;if(0=iCount) return 0;FindClose(hd);SHELLEXECUTEINFO ShExeInfo=0;ShExeInfo.cbSize=sizeof(SHELLEXECUTEINFO);ShExeInfo.fMask=SEE_MASK_NOCLOSEPROCESS;ShExeInfo.hwnd=NULL;ShExeInfo.lpVerb=NULL;ShExeInfo.lpFile=lpCmdLine;ShExeInfo.lpParameters=L;ShExeInfo.lpDirectory=NULL;ShExeInfo.nShow=SW_SHOW;ShExeInfo.hInstApp=NULL;ShellExecuteEx(&ShExeInfo);return 0;生成ShellExe.exe的可执行文件,此段代码主要功能是查找指定的应用程序,然后执行;下面这段代码可以保证在SD卡文件系统正确加载后才去执行应用程序;while(iCount-)hd=:FindFirstFile(lpCmdLine,&fd);Sleep(500);if(INVALID_HANDLE_VALUE!=hd) break;文件的名称和路径由命令行参数指定:ShExeInfo.lpFile=lpCmdLine;2、新建一个快捷方式,如Autorun.lnk,按如下方式编辑其内容:21#windowsshellexe.exe stdcardMyApp.exe其中stdcardMyApp.exe应用程序的绝对路径;3、将MyApp.exe和Autorun.lnk添加到NK里,方法是在project.bib文件内加入如下内容:ShellExe.exe f:WINCE420PBWORKSPACESLioetEnTerRelDirShellExe.exe NK SAutorun.lnk f:WINCE420PBWORKSPACESLioetEnTerRelDirAutorun.lnk NK S注意:ShellExe.exe的属性不能带H(隐藏).4、在project.dat里加入如下内容:Directory(WindowsStartup):-File(Autorun.lnk,WindowsAutorun.lnk)5、选择Make Image生成映像(当然Build也可以,就是慢点儿),烧到FLASH里,开机运行,可以看到SD卡里的MyApp.exe被正确执行。总结这种方法用起来比较方便,ShellExe.exe不用每次都重新编译,只要根据应用程序路径修改Autorun.lnk即可,可以加载Flash、U盘、SD卡里的应用程序。调试及升级应用程序就不用重新烧写内核了。WinCE自启动Shell的问题WinCE开机即运行定制的Shell是很多系统的基本要求,有时还需要屏蔽WinCE自带的Shell。WinCE中程序的自启动,一般有两个实现方法,修改注册表和添加自启动快捷方式。修改注册表比较方便,如下:HKEY_LOCAL_MACHINEinitLaunch70=MyApp.exeDepend70=hex:14,00,1e,00只要将MyApp.exe打包到NK,并在platform.reg中加入上面的注册表信息,这样WinCE启动时便会自动运行该程序。但这时WinCE自带的Shell总是先出来,然后才运行MyApp.exe,为了避免这种情况,我们可以将注册表设置修改如下:HKEY_LOCAL_MACHINEinitLaunch50=MyApp.exeDepend50=hex:14,00,1e,00即将原来启动explorer.exe的值换为MyApp.exe。这样WinCE启动时直接进入定制的Shell,而不启动explorer.exe。但这时有可能引入了新问题,如果定制的Shell是基于MFC编写的,并且其中用到了如CFileDialog等类库时,就会出现意想不到的情况,如下图所示:上图是在不启动Explorer.exe时,尝试导入注册表文件出现的状况截图,而在启动explorer.exe时是没有问题的。这说明CFileDialog在某种程度上依赖于explorer.exe,具体细节没研究。但说明不启动explorer.exe,基于MFC的Shell运行时就可能会出问题。所以explorer.exe必须启动,但又不能出现WinCE界面。要解决这个问题自然就想到修改explorer.exe了。WinCE5.0和WinCE6.0中,这一部分的代码都是公开的,在WinCE6.0中Shell的相关代码在C:WINCE600PUBLICSHELLOAKHPCEXPLORERMAIN目录下。大致看了一下这一部分的代码,发现只需修改如下两个文件,就应该能实现需求。C:WINCE600PUBLICSHELLOAKHPCEXPLORERMAINdesktop.cpp+ expand sourceview plaincopy to clipboardprint?102030405060708090100110120130140150bool CDesktopWnd:Create()IShellFolder*pSHF;FOLDERSETTINGS fs;RECT rc;HRESULT hr = E_FAIL;/ Get a shell folder for the desktophr = SHGetDesktopFolder(&pSHF);if(hr | !pSHF)goto Cleanup;/ create a shell view for ithr = pSHF-CreateViewObject(NULL, IID_IShellView, (LPVOID *)&_psv);if(hr | !_psv)goto Cleanup;fs.ViewMode = FVM_ICON;fs.fFlags = FWF_DESKTOP | FWF_ALIGNLEFT | FWF_NOSCROLL;/+changed by hjb/将Desktop的窗口大小设为0/SetRect(&rc, 0, 0, GetSystemMetrics(SM_CXVIRTUALSCREEN), GetSystemMetrics(SM_CYVIRTUALSCREEN);SetRect(&rc, 0, 0, 0, 0);/-changed by hjb/ create the desktops view window (no need to AddRef since CreateViewWindow does it)hr = _psv-CreateViewWindow(NULL,&fs, (IShellBrowser *)this, &rc, &_hWnd);if(hr | !_hWnd)Release();goto Cleanup;RegisterDesktop(_hWnd);Cleanup:if(pSHF)pSHF-Release();return (hr = S_OK);bool CDesktopWnd:Create()IShellFolder*pSHF;FOLDERSETTINGS fs;RECT rc;HRESULT hr = E_FAIL;/ Get a shell folder for the desktophr = SHGetDesktopFolder(&pSHF);if(hr | !pSHF)goto Cleanup;/ create a shell view for ithr = pSHF-CreateViewObject(NULL, IID_IShellView, (LPVOID *)&_psv);if(hr | !_psv)goto Cleanup;fs.ViewMode = FVM_ICON;fs.fFlags = FWF_DESKTOP | FWF_ALIGNLEFT | FWF_NOSCROLL;/+changed by hjb/将Desktop的窗口大小设为0/SetRect(&rc, 0, 0, GetSystemMetrics(SM_CXVIRTUALSCREEN), GetSystemMetrics(SM_CYVIRTUALSCREEN);SetRect(&rc, 0, 0, 0, 0);/-changed by hjb/ create the desktops view window (no need to AddRef since CreateViewWindow does it)hr = _psv-CreateViewWindow(NULL,&fs, (IShellBrowser *)this, &rc, &_hWnd);if(hr | !_hWnd)Release();goto Cleanup;RegisterDesktop(_hWnd);Cleanup:if(pSHF)pSHF-Release();return (hr = S_OK);C:WINCE600PUBLICSHELLOAKHPCEXPLORERMAINexplorer.cpp+ expand sourceview plaincopy to clipboardprint?102030405060708090100110120130140150DWORD WINAPI CreateTaskBar(LPVOID pEvent)HANDLE hSyncEvent = *(HANDLE *) pEvent);CTaskBar *pTaskBar = NULL;HWND hwndTB = NULL;pTaskBar = new CTaskBar;/+added by hjb/在创建任务栏时强制终止if(pTaskBar)delete pTaskBar;SetEvent(hSyncEvent);return 0;/-added by hjbif(!pTaskBar)SetEvent(hSyncEvent);return 0;g_TaskBar = pTaskBar;if(!pTaskBar-Register(g_hInstance)g_TaskBar = NULL;delete pTaskBar;SetEvent(hSyncEvent);return 0;RegisterTaskBar(pTaskBar-GetWindow();SetEvent(hSyncEvent);DWORD dwRet = pTaskBar-MessageLoop();delete pTaskBar;return dwRet;DWORD WINAPI CreateTaskBar(LPVOID pEvent)HANDLE hSyncEvent = *(HANDLE *) pEvent);CTaskBar *pTaskBar = NULL;HWND hwndTB = NULL;pTaskBar = new CTaskBar;/+added by hjb/在创建任务栏时强制终止if(pTaskBar)delete pTaskBar;SetEvent(hSyncEvent);return 0;/-added by hjbif(!pTaskBar)SetEvent(hSyncEvent);return 0;g_TaskBar = pTaskBar;if(!pTaskBar-Register(g_hInstance)g_TaskBar = NULL;delete pTaskBar;SetEvent(hSyncEvent);return 0;RegisterTaskBar(pTaskBar-GetWindow();SetEvent(hSyncEvent);DWORD dwRet = pTaskBar-MessageLoop();delete pTaskBar;return dwRet;修改完这两处后,先编译该目录,然后再重新编译整个系统(执行Sysgen)应该就可以了。Explorer.exe依然启动,依然可以听到WinCE启动的声音,但WinCE的界面已经屏蔽掉了。此时,基于MFC的Shell也能正常工作,如下图所示:在实际操作时,我没有通过修改源代码编译来完成这个测试。因为在编译C:WINCE600PUBLICSHELLOAKHPCEXPLORERMAIN目录时,发现它只生成了explorer.lib。考虑到重新编译整个系统的时间太长,所以直接修改了工程目录下的explorer.exe的文件,MakeImg后测试的。这里应该有快速编译的方法,但目前不知怎么弄。修改后,在WinCE6.0的模拟器中测试,达到了预想的效果。这样就大概解决了基于MFC的Shell和Explorer.exe之间的矛盾,是不是有隐患还不清楚,目前看来没问题。另外需要注意,修改public和private目录下的文件时,一定先做好备份,以免后患。修改后的WinCE6.0的explorer.exe及演示视频的下载地址:/we-hjb/WinCE_Shell.rar引用网址:/we-hjb/archive/2008/12/28/1364070.htmlHKEY_LOCAL_MACHINEinitLaunch80=nandflashem9161_xwj.exePB操作使用技巧WinCE下直接启动应用程序的方法其实让一个程序在wince里启动和windows里差不多,直接设置其为启动项,这个有几个方法。一个就是制作一个快捷方式,指向我们的应用程序如app.exe,然后将快捷方式放到windowsstartup下面。步骤如下:(假设app.exe已经拷贝到windows下面)1在pb中创建一个文件,文件类型选txt,然后命名为.lnk后缀,假设名字为test.lnk2编辑其内容为: 16#windowsapp.exe。备注:前面的16是#后面所有字符的总和,包括空格。Wince的帮助文档上说这么定义就行,但是我尝试后,最后down到目标机上面时提示找不到文件,在wince里查看这么创建的test.lnk的属性,发现其指向windowsapp.exe后面还有两个方框,因此不对,我的解决方法是修改test.lnk的内容为16#Windowsapp.exe3编辑好lnk文件内容后在pb中修改project.bib。在files段后面添加下面一行:(和添加别的文件到image中类似,见我的WinCE中如何向image中添加文件,也要在pb的flatform菜单的setting下添加build语句,不再赘述)test.lnk $(_FLATRELEASEDIR)test.lnk NK S在project.dat中增加下面一行:Directory(Windowsstartup):-File(test.lnk,Windowstest.lnk)这样后系统启动后就会自动启动我们的程序了。另外一种方法是编辑注册表:在p
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 2025年度企业职工文体活动中心使用权转让合同
- 2025年SAP应用部署及云资源优化管理合同
- 2025年城市轨道交通电气设备采购与维护合作协议
- 2025年新型车棚钢结构研发、生产、安装及售后保障合同
- 2025年老旧小区改造合同涉及水电改造及室内外装饰装修
- 2025年度高端酒店特色美食供应与配送合同范本
- 2025年大型吊装设备租赁与保养维修全面合作协议
- 2025年艺术类高考考前专业培训及考试备考辅导服务协议
- 2025年高端商务用车驾驶与定期维护保养服务协议
- 2025年绿色物流企业智能仓储信息化建设合作协议
- 加油、加气、充电综合站项目可行性研究报告
- 2025保密协议范本:物流行业货物信息保密
- 塔机拆卸合同范本
- 2024-2025学年广东省深圳市南山区四年级(下)期末数学试卷
- 《煤矿安全规程(2025版)》知识培训
- 2025秋数学(新)人教五年级(上)第1课时 小数乘整数
- 半导体行业面试问题及答案解析
- 《数字技术应用基础模块》技工中职全套教学课件
- 房屋拆除专项施工方案(3篇)
- AutoCAD电气工程制图 课件 项目1 低压配电柜的绘制与识图
- 2025至2030年中国绿色船舶行业发展前景预测及投资方向研究报告
评论
0/150
提交评论