日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

Wince下定制开机自启动程序

發布時間:2025/4/16 编程问答 29 豆豆
生活随笔 收集整理的這篇文章主要介紹了 Wince下定制开机自启动程序 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

Wince下定制開機自啟動程序

上網查了一下,發現相關的貼子還真是不少. 最近因公司的項目需要,我做了個簡單的程序則試該功能. 用網上的很多方法發現是行不通的, 估計最初應該是可以用的, 然后大家都是互相轉載, 轉來轉去有些東西漏了或轉錯了,因為很少有人真正去測試過,看到就直接轉. 我在這里根據自己的實際測試,整理出整個過程,并對一些步驟的原理做了解釋

假設應用程序為:

方法一:主要思想:將應用程序及其快捷方式也添加到映像里,再將快捷方式添加到StartUp目錄下,這樣當系統運行后應用程序就能自動運行。這種方法不能覆蓋wince的桌面, 只是開機的時候加載一個應用程序啟動.

步驟:

1先保證原工程文件是可以編譯成功的。 并且內核映像是可以運行的.

2創建快捷方式文件,文件內容如下: 10#”\Windows\”(注意引號一定要) 其中草藥10表示#后所有字符的個數,包括引號, 要根據自己的應用程序的名字修改. (試過這個數字即使不是#后的字符的個數也可以正常啟動, 這個我就搞不懂了)把該文件和復制到xxx_Relase所在的目錄(所在目錄).

3在pb中修改文件,在FILES Section添加(FILES區哉可以包含不是就地執行的可執行文件):?????? $(_FLATRELEASEDIR)\ NK H?????? $(_FLATRELEASEDIR)\? NK H (注:$(_FLATRELEASEDIR)表示xxx_Relase文件夾;NK后面的H表明加入到中的文件為隱藏屬性)

4 把快捷方式添加到StartUp目錄下,具體為:修改工程的文件,添加如下內容: Directory("\Windows\Startup"):-File("","\Windows\") 由于wince ROM 映像默認將所有文件放到windows目錄下, 某些文件在系統引導時必須被移動到特定的位置, .dat文件可以實現移動的功能. 比如上面就是把位于windows下的移動到windows\startup下面. Startup目錄決定了程序可以自啟動.

5進入build os 菜單, 選擇build and sysgen(clean before buiding要打勾),編譯完成,會有錯誤提示你未在你的磁盤上找到(因為我們在編譯的時候選擇了clean before building,原來放在xxx_Relase目錄下的文件都被clean了) . 這時把和文件重新拷貝到xxx_Relase文件夾下,然后MakeImage一下. 這樣就把應用程序寫進了內核(會在windows目錄下). 把生成的或燒寫到flash里,這樣就可以看到你的應用程序自啟動了. 到這里可能有人會問, 既然和編譯的時候會被clean掉,第二步不就可以不用先復制,而到第五步時再復制過來? 這個問題我也想過,但實際測試發現這樣的話并沒有把和兩個文件寫進內核(系統啟動后,windows下找不到). Bib文件和dat文件都是在make image階段在用到的,沒理由會出現這個問題. 這個問題一直想不通,希望高手解答.

方法二:將應用程序添加到映像里,然后用你的應用程序直接替換Wince的桌面程序,這種方法其實就是自己的應用程序做為wince的shell

步驟:

1. 首先執行方法一的1~3步把應用程序燒進內核.

2. 進入build os 菜單, 選擇build and sysgen(clean before buiding要打勾,這里不打勾有時會出現編譯的內核不能運行),編譯完成,會有錯誤提示你未在你的磁盤上找到(因為我們在編譯的時候選擇了clean before building,原來放在xxx_Relase目錄下的文件都被clean了) . 這時把和文件重新拷貝到xxx_Relase文件夾下, 然后修改(若在pb里找不到,可以到xxx_Relase文件夾下找):[HKEY_LOCAL_MACHINE\init]"Launch50"="""Depend50"=hex:14,00, 1e,00把這個改成你的應用程序(比如:)。當wince系統啟動時, 它會順序執行launchxx, xx是一個十進制數, dependxx指出在當前應用程序運行之前launch20(十六進制是14),lanuch30(十六進制是1e)必須先運行. 打開可以看到. Lanuch20對應的是, launch30對應的是. 我們自己的shell應該在這兩個進程加載完成之后才能正常運行. 另外,wince幫助文檔里有一段話: This function must be called by all applications that the kernel starts at startup through the HKEY_LOCAL_MACHINE\Init registry key.

看來我們的源程序里應該加上signalStarted函數了. 對于mfc的程序我們可以在initinstance的return 以前. 加上這行代碼SignalStarted(_wtol(GetCommandLine())); 其實如果一個應用程序要從init里加載,那么肯定有一個unicode字符串作為命令行參數,這個參數被轉化為整型后傳給signalStarted函數. 通過這種方式通知操作系統它本身運行完畢. 建議任何通過init啟動的應用程序都應該加上signalStarted函數.

3. MakeImage一下, 把生成的燒寫到flash里,這樣就可以看到你的應用程序自啟動了.? 而且wince的桌面程序都不會啟動了,你的程序就是wince的shell,但有個問題,就是當你把應用程序關閉的時候由于原wince桌面程序的丟失而會使機器死機。

方法三:主要思想:將應用程序添加到映像里,然后修改注冊表,讓應用程序自啟動。這回不替換wince的桌面程序,而是讓wince像加載桌面一樣加載你的應用程序,效果跟方法一是一樣的。

跟方法二是一樣的,稍有不同:在文件中[HKEY_LOCAL_MACHINE\init]之下添加如下語句:"Launch80"="" "Depend80"=hex:1E,00跟方法2的區別是沒有換掉.

當然,前面三個方法的前提肯定是你的這個程序,在當前的PB工程編譯的內核里有可以正常運行的. 這一句看起來是廢話,其實很重要. 我這在調試的時候,一度程序不能啟動, 我一直認為是注冊表或bib文件出錯了, 調了很久都不行. 最后才發現,我這個應用程序是在之前的SDK下編譯的, 在當前的系統一根本不能運行. 于是我又在可用的系統下重新編譯了一個新的SDK, 問題解決.

轉載于:https://www.cnblogs.com/xilentz/archive/2010/04/22/1717848.html

總結

以上是生活随笔為你收集整理的Wince下定制开机自启动程序的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。