今天讓我們來一個輕鬆一點的話題:大家看到一個有趣的程序時有沒有想過它是用什麼工具開發出來的?如果是開源的倒也罷了,如果不開源呢?有沒有什麼辦法查看。答案當然是有的,除了一些加密的程序大多數程序其實都不會刻意去隱藏自己的信息。只要通過一些常用的方法就能知道。這些方法是很多的,今天我們通過給著名的播放器軟體 PotPlayer 加上兩個按鈕的過程來看一個程序的某些功能的設計思想。
其實不用分析,我就知道 PotPlayer 是用 vc++ 寫的,因為多年前我就看過它作者的訪談,知道他原來是 kmplayer 的作者。後來因為與原公司有問題,轉到另外一個公司繼續開發播放器,但是開發工具由 delphi 換成了 vc。原因他沒說,不過接觸過視頻處理的同學一定知道,那多半是因為 ffmpeg 的緣故 -- 為什麼是 ffmpeg?初學者會問 -- 那是因為這世上的播放器很少有不是基於 ffmpeg 的。當然了這其實不是什麼丟人的事,有了 ffmpeg 也不是那麼容易的。 PotPlayer/kmplayer 對播放的優化都是遠遠超過原始 ffmpeg 的,簡單來說應該說是 ffmpeg 教會了大家怎麼做,具體怎麼優化就靠大家自己了。這是個很容易證實的問題,一般正規有責任心的軟體都會在"關於"對話框中寫上自己的依賴庫,比如下圖:
當然了這在我們那個年代還是有很多人不自覺的,當初就有很轟動的業內人士譴責各個播放器不註明的依賴庫的情況,涉及的播放器除了 kmplayer 還有很多國內的播放器,比如 ... 作為一個不願得罪人的老好人,你覺得我會寫出來嗎 :)
總之現在大家都註明了那就好啦 ... ...
好了,我們再證實一下 PotPlayer 是 vc 寫的吧!看好了,這可是很有用的操作!
首先打開 vc ,我直接用的手頭上的 vc2010 其他版本應該類似(至少 vc6 應該可以,其實我以前一般是用 vc6 打開的)。然後如下圖,選擇菜單"文件"->"打開"->"文件...":
在彈出的對話框中選擇 "x:\Program Files (x86)\DAUM\PotPlayer\PotPlayerMini.exe" ,選中後先不要打開 ... 手太快已經打開的同學請重複以上步驟。這時,在"打開"對話框中選擇"打開方式",如下圖:
然後再在彈出的對話框中選擇"資源編輯器",如下圖:
好了。以上就是使用 vc 查看一個程序資源的方法。大家可以在裡面查看到程序的圖標、程序的菜單、程序用的提示信息等等,當然了如果這個程序不是 vc 開發的話,那多半看不到程序的菜單。其實不但能查看,有特定的 vc 版本和特定的 windows 版本下,您還能修改它的菜單上的顯示文字 ... 很神奇吧,當初我偶然發現這個功能時就把我很討厭的 vc6 的默認字體給改了 ... 當然了,做過漢化的老手們應該都另外有工具。這個就是所謂的資源修改了,也是漢化軟體的一個重要方法。
不過遺憾的是 PotPlayer 的菜單並不在這裡,而是在 dll 中,這也是現在開發一個比較常用的方法:程序的主要功能其實不在主 exe 中,而是某個 dll 內。對於這個 PotPlayer ,對應的 dll 就是 PotPlayer.dll 。用前面打開 exe 的方法可以很容易的再打開這個 dll 文件的資源信息。如果大家看這篇文章前學過一點 vc 的話,一定可以很輕鬆地在裡面查看到 PotPlayer 的各個菜單。如下圖:
在圖中,我們可以看到右邊的屬性編輯器部分實際上還可以直接修改 PotPlayer 的菜單內容!一般來說,有這種長串菜單資源的程序通常都是 vc 開發的。
具體我們就不展開了。不展開的一個原因是象 PotPlayer 這麼新的程序是不會在資源中實現多語言支持或者是皮膚的。而我們要加按鈕就要找到它的實現方法。現在的實現方法普遍是 xml 格式或者是鍵值對的文本文件再加上具體的圖片,而且一般就放在程序的目錄下。現在是 windows10 時代,因為權限的原因,很多程序也放在用戶目錄中。幸運的是 PotPlayer 的就在程序目錄下,這樣就不用去找囉嗦的 win10 用戶目錄了。給 PotPlayer 換過膚的同學都知道皮膚文件就是 dsf 文件,我要說的是這些配置就在 dsf 文件中,而 dsf 不過是 zip 文件的改名而已,這裡就不解釋了,以後再細說用什麼辦法可以知道。以 WindowFrame.dsf 為例子,複製出來改名為 zip 再解壓就可以看到 PotPlayer 的全部配置文件了。要細說皮膚的製作那就太囉嗦了。我們就先簡單說一下 PotPlayer 是怎樣實現多語言的就好了。
vc開發的程序,傳統的多語言是用多語言的 dll 來實現的,不過這種方法從它出來時我就不以為然,很多程式設計師們的想法顯然也和我差不多,所以現在多是 xml 的(從上圖中可以看到 PotPlayer 的菜單是韓文的,而且只有韓文,說明它的多語言實現並不是通過切換不同語言的資源dll實現的 ),而 PotPlayer 的語言包就在 Language 目錄中的 ini 鍵值對配置文件中,而播放器的主要操作按鈕則是在皮膚文件中的 BottomAudio.txt 文件中(指 WindowFrame.dsf ,不同皮膚是不同的)。這種將配置文件壓縮成 zip 再改名的做法,現在非常的普遍,大家以後看到類似的情況都可以試試,一定會有驚喜(友情提示下,java 的 jar、蘋果的 ipa 文件也是這樣的情況)。好了,這個文件就是 xml 格式,學過一點 xml 的同學很容易就可以加上自己喜歡的按鈕了。瞧,會編程是件多麼幸福的事!
好了,希望以上內容對大家有用。