青青草原综合久久大伊人导航_色综合久久天天综合_日日噜噜夜夜狠狠久久丁香五月_热久久这里只有精品

Code Knight

Programming is so cool
隨筆 - 52, 文章 - 0, 評(píng)論 - 14, 引用 - 0
數(shù)據(jù)加載中……

total commader插件編寫

      休息了將近十天左右,代碼的東西一點(diǎn)都沒(méi)摸,完全脫離出代碼的世界,有時(shí)覺(jué)得程序員不應(yīng)該總沉浸于自己的代碼世界,這段時(shí)間走走看看,把腦子打開(kāi)去體會(huì)更多的東西,感受到以前自?shī)首詷?lè)的那種渺小,人應(yīng)該有張有弛的,什么事情都不能過(guò)度,該做什么的時(shí)候絕對(duì)不要想著不該去想的東西,活在當(dāng)下,才是幸福。
      新的一年,要開(kāi)始工作了,今天看看自己的電腦,感覺(jué)好亂,想把所有的資料全扔進(jìn)Total commander里,也想寫一些插件來(lái)做一些額外的工作,比如把電影音樂(lè)打上tag或?qū)懮显u(píng)論待以后方便查看等,先存一篇文章,以后有空的時(shí)候動(dòng)手做這些事情的時(shí)候也許有用。

/////////////////////////////////////////////////////////////////////////////////////////////////////////////華麗分割線
      應(yīng)nevermind版主之約,寫了插件開(kāi)發(fā)的一個(gè)Guild,簡(jiǎn)單介紹了如何為TC開(kāi)發(fā)一個(gè)插件以及插件的基本工作過(guò)程,僅僅是一個(gè)入門介紹,詳細(xì)的編程細(xì)節(jié)需要從網(wǎng)上下載幫助,下面文章中都給出了下載地址。

首先聲明,本文撰寫背景是TC 6.03a,6.5會(huì)加入新的插件內(nèi)容,但估計(jì)向下兼容應(yīng)該是沒(méi)有問(wèn)題的。
眾所周知,TC的插件現(xiàn)在分為3類,Lister插件(.wlx)、FileSystem插件(.wfx)和Packer插件(.wcx)(另外還有傳說(shuō)中6.5新加的Content插件(.wdx),現(xiàn)在還不見(jiàn)廬山真面目,先按下不表)。盡管擴(kuò)展名穿上了不同的馬甲,但其本質(zhì)都是一樣的,都是Windows的DLL動(dòng)態(tài)鏈接庫(kù),我們需要做的僅僅是按照TC的規(guī)范,實(shí)現(xiàn)其給定的DLL接口函數(shù),最后把 dll擴(kuò)展名改成相應(yīng)擴(kuò)展名就萬(wàn)事大吉了(使用不同的擴(kuò)展名,只不過(guò)使其容易區(qū)分而已)。

1. 開(kāi)發(fā)方法、環(huán)境和工具
如前所述,TC插件本質(zhì)上都是Windows的DLL動(dòng)態(tài)鏈接庫(kù),其開(kāi)發(fā)方法和普通的DLL程序開(kāi)發(fā)并沒(méi)有什么不同,任何一個(gè)可用來(lái)開(kāi)發(fā)DLL的環(huán)境和工具都可以用來(lái)開(kāi)發(fā)TC插件
因此,寫TC插件首先得熟悉DLL的編寫,更高一點(diǎn)的要求是熟悉一些常用的Windows API,對(duì)于一個(gè)程序員老手來(lái)說(shuō)應(yīng)該是很容易的事情,而用什么開(kāi)發(fā)環(huán)境和工具都是次要的。但是對(duì)于新手,筆者推薦使用VC或者Delphi來(lái)編寫,一方面的原因是TC作者提供的函數(shù)頭文件聲明只有C/C++和Pascal,可以省卻改寫成別的語(yǔ)言的麻煩;另一方面原因是TC作者給的幫助、例子,甚至網(wǎng)上公開(kāi)源碼的插件大都是基于此兩種環(huán)境的,而有一個(gè)可參考的源碼例子能在很大程度上提供編寫幫助。另外由于TC作者提供的例子(VC環(huán)境下)已經(jīng)搭建起了 插件的整個(gè)框架,我們甚至可以直接在此例子上修改開(kāi)發(fā)。

Lister插件的官方源碼例子:http://ghisler.fileburst.com/lsplugins/listplugsample.zip。
FS插件的官方源碼例子:http://ghisler.fileburst.com/fsplugins/sampleplugin.zip。
其它第3方插件的源碼例子可以從以下各個(gè)插件站點(diǎn)找到:
http://www.ghisler.com/plugins.htm
http://www.totalcmd.net
http://clubtotal.free.fr

2. Lister 插件
首先說(shuō)明一下Lister插件的工作過(guò)程:默認(rèn)快捷鍵情況下,當(dāng)在TC中對(duì)一個(gè)文件按下F3或者Ctrl+Q的時(shí)候,TC會(huì)檢查wincmd.ini中[ListerPlugins]一節(jié),以下是個(gè)例子:
[ListerPlugins]
0=%COMMANDER_PATH%\plugins\Imagine\Imagine.wlx
0_detect="MULTIMEDIA"
1=%COMMANDER_PATH%\plugins\FlashView\FlashView.wlx
1_detect="([0]="F" & [1]="W" & [2]="S")|([0]="C" & [1]="W" & [2]="S")"

TC會(huì)順序檢查該節(jié)中每個(gè)插件對(duì)應(yīng)的x_detect字段,該字段實(shí)際上是一個(gè)邏輯判斷表達(dá)式,如果此表達(dá)式結(jié)果為真,TC就會(huì)Load該插件并調(diào)用其ListLoad函數(shù),否則檢查下一個(gè)插件。如果插件對(duì)應(yīng)的x_detect字段根本就不存在,TC會(huì)調(diào) 用插件的ListGetDetectString函數(shù),如果此函數(shù)存在,TC會(huì)將函數(shù)的返回結(jié)果保存在x_detect字段中再檢查,如果此函數(shù)仍然不存在,則TC就直接調(diào)用插件的ListLoad函數(shù)。最后,如果調(diào)用了ListLoad函數(shù),還要判斷該 函數(shù)的返回值,如果該值是一個(gè)Windows句柄,則插件調(diào)用成功;若返回值為0(NULL),則調(diào)用失敗,繼續(xù)檢查下一個(gè)插件

Lister插件的詳細(xì)接口函數(shù)介紹可以從網(wǎng)上下到:http://ghisler.fileburst.com/lsplugins/listplughelp1.2.zip。

實(shí)際上,Lister插件必需的函數(shù)只有ListLoad一個(gè),它是插件的核心實(shí)現(xiàn)函數(shù)。插件必須在此函數(shù)中讀入文件內(nèi)容,創(chuàng)建一個(gè)窗口并顯示文件內(nèi)容,最后返回這個(gè)窗口的句柄,Lister會(huì)獲得并Subclass該句柄,并在Lister內(nèi)顯示。

其余的接口函數(shù)都是可選函數(shù),但其中有兩個(gè)比較重要的函數(shù):ListGetDetectString和ListCloseWindow,這兩個(gè)函數(shù)與ListLoad一起構(gòu)成了插件的主干部分。

ListGetDetectString雖然是可選函數(shù),但是我強(qiáng)烈建議實(shí)現(xiàn)這個(gè)函數(shù),這對(duì)Lister的效率有很大的影響。從Lister工作過(guò)程可以看出,這個(gè)函數(shù)僅僅是在插件第一次被調(diào)用時(shí)才被調(diào)用,功能是返回一個(gè)檢測(cè)字符串以填寫x_detec t字段,在此之后,Lister都將只檢查此字段以決定是否調(diào)用插件。因此,一個(gè)好的檢測(cè)字符串可以讓Lister迅速判斷插件是否適用于顯示文件,如果沒(méi)有這個(gè),Lister每次顯示文件都將不得不把插件一個(gè)個(gè)都Load進(jìn)來(lái)、分配空間、調(diào)用ListL oad,直到找到一個(gè)合適的,這個(gè)速度可是偏離了Lister快速查看的本意。例如:檢測(cè)字符串是“ext="HTM" | ext="HTML"”,這時(shí)TC只需要根據(jù)文件擴(kuò)展名是否是htm或html就可以直接判斷該插件是否適合,而無(wú)需讀入任何文件,這就是為什么在插件眾多的時(shí)候,Lister仍然能很快顯示的原因。當(dāng)然,在某些情況下,確實(shí)難以給出一個(gè)合適的檢測(cè)字符串,這就要求ListL oad函數(shù)在文件類型判斷上的速度應(yīng)該盡可能快。

ListColseWindow是在用戶關(guān)閉Lister或在Lister中顯示另一個(gè)文件時(shí)被調(diào)用,如果此函數(shù)不存在,Lister將直接調(diào)用DestroyWindow()關(guān)閉插件窗口。通常情況下,我們需要在這里做窗口關(guān)閉時(shí)的善后工作,包括釋放 資源等等。

除以上3個(gè)函數(shù)外,其它的幾個(gè)可選函數(shù)都涉及一些具體的附加功能,取決于具體需求。

2. FileSystem插件
與Lister插件不同,當(dāng)用戶安裝一個(gè)FS插件時(shí),該插件就會(huì)被第一次Load進(jìn)來(lái),并調(diào)用FsGetDefRootName以獲得插件名稱,也是該FS根目錄的名字,如果這個(gè)函數(shù)不存在,TC會(huì)直接使用wfx文件的名字做插件名稱(去掉文件擴(kuò)展名) ,該名稱會(huì)保存在wincmd.ini文件[FileSystemPlugins]一節(jié),下面是個(gè)例子:
[FileSystemPlugins]
Linux-drives=%COMMANDER_PATH%\plugins\ex2fs\ex2fs.wfx
Calendar=%COMMANDER_PATH%\plugins\calendar\calendar.wfx
Shared files=%COMMANDER_PATH%\plugins\netmon\NetMon.wfx
這樣,當(dāng)用戶進(jìn)入網(wǎng)上鄰居時(shí),TC不需要Load插件就可以把所有插件列出來(lái),插件只有在用戶試圖進(jìn)入FS插件目錄時(shí)才真正被Load進(jìn)來(lái)。

大致結(jié)構(gòu)上,F(xiàn)S插件需要提供的接口函數(shù)與一個(gè)真正文件系統(tǒng)的基本函數(shù)有些類似。其必需的函數(shù)有4個(gè):FsInit、FsFindFirst、FsFindNext和 FsFindClose,是不是看了很眼熟,就和平時(shí)列舉一個(gè)目錄下所有文件所用的函數(shù) 結(jié)構(gòu)一樣。顧名思義,F(xiàn)sInit是用于插件初始化的函數(shù),同時(shí)TC會(huì)傳給插件3個(gè)TC提供給FS插件調(diào)用的callback函數(shù)地址(下面會(huì)介紹);FsFindFirst和FsFindNext用于列舉一個(gè)目錄下所有的文件;FsFindClose用 于終止FsFindFirst/FsFindNext的文件列舉。有了這4個(gè)函數(shù),就構(gòu)成了最小的FS插件,就可以瀏覽FS插件的各個(gè)目錄了。

有了文件目錄結(jié)構(gòu)后,就到了根據(jù)需要提供各種文件功能的時(shí)候了,包括刪除文件FsDeleteFile;刪除目錄FsRemoveDir;建立目錄 FsMkDir;執(zhí)行文件FsExecuteFile;設(shè)置文件屬性FsSetAttr;設(shè)置文件時(shí)間Fs SetTime;拷貝文件FsGetFile/FsPutFile/FsRenMovFile。大致上都和普通文件操作功能差不多,需要說(shuō)明的是拷貝文件,由于FS插件的特殊性,拷貝文件分成了3種情況:FsGetFile是從FS中往本地硬盤拷貝;FsPutFile是從本地硬盤往FS拷貝;FsRenMovFile是 在FS內(nèi)部拷貝、移動(dòng)或重命名文件。

此外,根據(jù)FS插件的需要,TC還提供了3個(gè)callback函數(shù)以供其調(diào)用:
1) ProgressProc,用于顯示一個(gè)進(jìn)度條,例如拷貝文件時(shí)的進(jìn)度條。
2) LogProc,用于顯示FTP工具欄,插件可以在工具欄中顯示log信息,并寫入log文件。如果顯示了FTP工具欄,點(diǎn)擊“斷開(kāi)連接”按鈕時(shí)還將調(diào)用插件的FsDisconnect函數(shù)。
3) RequestProc,用于顯示一個(gè)輸入對(duì)話框,例如要求用戶輸入用戶名和密碼等等。

最后,F(xiàn)S插件還可以實(shí)現(xiàn)一個(gè)函數(shù)FsStatusInfo,如果這個(gè)函數(shù)被實(shí)現(xiàn),TC在調(diào)用插件的任何函數(shù)(除了FsInit和FsDisconnect)之前和之后都將調(diào)用此函數(shù),以方便插件釋放資源等等操作。

FS插件的詳細(xì)接口函數(shù)介紹可以從網(wǎng)上下載:http://ghisler.fileburst.com/fsplugins/fspluginhelp1.3.zip。

2. FileSystem插件
與Lister插件不同,當(dāng)用戶安裝一個(gè)FS插件時(shí),該插件就會(huì)被第一次Load進(jìn)來(lái),并調(diào)用FsGetDefRootName以獲得插件名稱,也是該FS根目錄的名字,如果這個(gè)函數(shù)不存在,TC會(huì)直接使用wfx文件的名字做插件名稱(去掉文件擴(kuò)展名) ,該名稱會(huì)保存在wincmd.ini文件[FileSystemPlugins]一節(jié),下面是個(gè)例子:
[FileSystemPlugins]
Linux-drives=%COMMANDER_PATH%\plugins\ex2fs\ex2fs.wfx
Calendar=%COMMANDER_PATH%\plugins\calendar\calendar.wfx
Shared files=%COMMANDER_PATH%\plugins\netmon\NetMon.wfx
這樣,當(dāng)用戶進(jìn)入網(wǎng)上鄰居時(shí),TC不需要Load插件就可以把所有插件列出來(lái),插件只有在用戶試圖進(jìn)入FS插件目錄時(shí)才真正被Load進(jìn)來(lái)。

大致結(jié)構(gòu)上,F(xiàn)S插件需要提供的接口函數(shù)與一個(gè)真正文件系統(tǒng)的基本函數(shù)有些類似。其必需的函數(shù)有4個(gè):FsInit、FsFindFirst、FsFindNext和 FsFindClose,是不是看了很眼熟,就和平時(shí)列舉一個(gè)目錄下所有文件所用的函數(shù) 結(jié)構(gòu)一樣。顧名思義,F(xiàn)sInit是用于插件初始化的函數(shù),同時(shí)TC會(huì)傳給插件3個(gè)TC提供給FS插件調(diào)用的callback函數(shù)地址(下面會(huì)介紹);FsFindFirst和FsFindNext用于列舉一個(gè)目錄下所有的文件;FsFindClose用 于終止FsFindFirst/FsFindNext的文件列舉。有了這4個(gè)函數(shù),就構(gòu)成了最小的FS插件,就可以瀏覽FS插件的各個(gè)目錄了。

有了文件目錄結(jié)構(gòu)后,就到了根據(jù)需要提供各種文件功能的時(shí)候了,包括刪除文件FsDeleteFile;刪除目錄FsRemoveDir;建立目錄 FsMkDir;執(zhí)行文件FsExecuteFile;設(shè)置文件屬性FsSetAttr;設(shè)置文件時(shí)間Fs SetTime;拷貝文件FsGetFile/FsPutFile/FsRenMovFile。大致上都和普通文件操作功能差不多,需要說(shuō)明的是拷貝文件,由于FS插件的特殊性,拷貝文件分成了3種情況:FsGetFile是從FS中往本地硬盤拷貝;FsPutFile是從本地硬盤往FS拷貝;FsRenMovFile是 在FS內(nèi)部拷貝、移動(dòng)或重命名文件。

此外,根據(jù)FS插件的需要,TC還提供了3個(gè)callback函數(shù)以供其調(diào)用:
1) ProgressProc,用于顯示一個(gè)進(jìn)度條,例如拷貝文件時(shí)的進(jìn)度條。
2) LogProc,用于顯示FTP工具欄,插件可以在工具欄中顯示log信息,并寫入log文件。如果顯示了FTP工具欄,點(diǎn)擊“斷開(kāi)連接”按鈕時(shí)還將調(diào)用插件的FsDisconnect函數(shù)。
3) RequestProc,用于顯示一個(gè)輸入對(duì)話框,例如要求用戶輸入用戶名和密碼等等。

最后,F(xiàn)S插件還可以實(shí)現(xiàn)一個(gè)函數(shù)FsStatusInfo,如果這個(gè)函數(shù)被實(shí)現(xiàn),TC在調(diào)用插件的任何函數(shù)(除了FsInit和FsDisconnect)之前和之后都將調(diào)用此函數(shù),以方便插件釋放資源等等操作。

FS插件的詳細(xì)接口函數(shù)介紹可以從網(wǎng)上下載:http://ghisler.fileburst.com/fsplugins/fspluginhelp1.3.zip。

posted on 2010-02-19 14:53 Code Knight 閱讀(1368) 評(píng)論(0)  編輯 收藏 引用 所屬分類: C++與編程之道

青青草原综合久久大伊人导航_色综合久久天天综合_日日噜噜夜夜狠狠久久丁香五月_热久久这里只有精品
  • <ins id="pjuwb"></ins>
    <blockquote id="pjuwb"><pre id="pjuwb"></pre></blockquote>
    <noscript id="pjuwb"></noscript>
          <sup id="pjuwb"><pre id="pjuwb"></pre></sup>
            <dd id="pjuwb"></dd>
            <abbr id="pjuwb"></abbr>
            欧美调教视频| 一区二区三区欧美成人| 久久免费99精品久久久久久| 午夜精品国产精品大乳美女| 亚洲一区二区三区四区五区黄 | 国产日韩在线视频| 国产精品久久久一本精品| 国产精品久久久久久久久免费| 国产农村妇女毛片精品久久莱园子| 国产欧美另类| 亚洲高清不卡一区| 亚洲亚洲精品三区日韩精品在线视频| 亚洲欧美精品伊人久久| 久久精品视频播放| 亚洲国产精品一区制服丝袜| 欧美激情bt| 亚洲无吗在线| 久久综合中文字幕| 欧美视频一区二区三区| 黄色av成人| 亚洲视频一区二区免费在线观看| 亚洲欧美日韩一区二区三区在线| 欧美诱惑福利视频| 亚洲国产合集| 欧美一区二区视频97| 欧美精品在线看| 国模私拍一区二区三区| 一区二区高清在线| 蜜臀久久99精品久久久画质超高清| 夜夜精品视频一区二区| 久久女同精品一区二区| 国产精品毛片大码女人| 亚洲精品一区二区三区蜜桃久 | 亚洲欧美日韩精品在线| 夜久久久久久| 久久婷婷色综合| 一本大道久久a久久精品综合| 欧美一区影院| 国产精品视频一二三| 日韩视频亚洲视频| 美女成人午夜| 欧美在线视频一区二区| 国产精品欧美日韩久久| 9色国产精品| 免播放器亚洲| 欧美一区在线看| 国产欧美日韩在线视频| 一区二区三区国产在线观看| 欧美成人午夜激情在线| 久久大综合网| 国产麻豆精品在线观看| 亚洲欧美国产毛片在线| 91久久久久久国产精品| 女同一区二区| 亚洲精品女人| 亚洲激情在线视频| 欧美精品黄色| 亚洲视频观看| 制服诱惑一区二区| 国产精品久久久久久久久果冻传媒| 夜夜嗨av一区二区三区四季av| 亚洲国产欧美日韩精品| 欧美激情第一页xxx| 99精品欧美一区二区三区| 亚洲激情第一页| 欧美日韩国产小视频在线观看| 一级成人国产| 亚洲综合精品一区二区| 国产情人综合久久777777| 久久精品免视看| 久久久久久网站| 亚洲黄一区二区三区| 亚洲国产婷婷综合在线精品| 欧美日韩另类国产亚洲欧美一级| 一区二区三区四区国产| 亚洲性线免费观看视频成熟| 国产欧美一区二区三区在线老狼| 久久激五月天综合精品| 久久精品国产2020观看福利| 亚洲观看高清完整版在线观看| 91久久久精品| 国产日韩欧美综合| 欧美成人一区二区在线| 欧美破处大片在线视频| 欧美一区二区成人6969| 久久人人超碰| 亚洲特色特黄| 久久精品综合| 亚洲图片欧洲图片av| 欧美在线观看www| 99re国产精品| 欧美伊人久久大香线蕉综合69| 最新日韩在线视频| 亚洲伊人网站| 亚洲激情女人| 欧美中文字幕在线观看| 99国产精品久久久久久久成人热| 国产欧美一区二区视频| 午夜激情久久久| 欧美在线播放高清精品| 伊人蜜桃色噜噜激情综合| 亚洲青涩在线| 国产精品国产三级国产a| 久久久久久有精品国产| 欧美精品videossex性护士| 欧美在线视频播放| 欧美黄色影院| 久久精品久久综合| 欧美日韩国产另类不卡| 鲁大师成人一区二区三区| 国产精品xvideos88| 欧美国产另类| 国产午夜精品视频免费不卡69堂| 91久久亚洲| 亚洲春色另类小说| 午夜欧美精品久久久久久久| 9色porny自拍视频一区二区| 另类av导航| 久久人人爽爽爽人久久久| 国产精品久久久久99| 91久久精品一区二区三区| 在线精品亚洲一区二区| 欧美在线日韩| 欧美自拍偷拍| 国产精品久久精品日日| 亚洲激情精品| 91久久精品久久国产性色也91| 欧美一区二区在线观看| 先锋影音久久久| 国产精品激情av在线播放| 日韩亚洲欧美在线观看| 99精品欧美| 欧美日韩中文在线| 一本久久综合| 亚洲视频狠狠| 欧美日韩在线播放| 99精品久久久| 亚洲女人天堂av| 国产精品亚洲产品| 亚洲一区二区三区四区五区黄| 亚洲午夜一级| 国产精品国产三级国产普通话三级 | 亚洲欧洲一区二区三区在线观看 | 久久裸体视频| 久久综合成人精品亚洲另类欧美 | 欧美精品日韩一区| 亚洲欧洲一区二区三区久久| 在线视频观看日韩| 精品白丝av| 久久精品首页| 欧美大片18| 亚洲免费久久| 欧美日韩中文字幕日韩欧美| 一本色道久久综合亚洲91| 亚洲欧美在线免费| 国产日韩欧美精品在线| 久久久久九九九九| 亚洲韩国一区二区三区| 中文日韩欧美| 国产一区二区久久久| 蜜桃精品久久久久久久免费影院| 亚洲黄色在线| 久久国产精品99久久久久久老狼 | 久久成人国产精品| 欧美黄色免费网站| 亚洲欧美激情一区二区| 精品不卡一区二区三区| 欧美日韩精品一区视频| 欧美一级久久久久久久大片| 欧美高清在线观看| 亚洲欧美日韩一区二区| 亚洲国产精品专区久久| 国产精品久久久久天堂| 久久综合狠狠综合久久激情| 一本色道久久综合狠狠躁篇怎么玩| 久久久久久久一区二区| 99精品国产福利在线观看免费| 国产精品女主播在线观看 | 国产日韩欧美在线视频观看| 久久尤物视频| 亚洲欧美大片| 亚洲精品国产欧美| 久久综合色8888| 亚洲午夜电影网| 在线观看不卡av| 国产精品有限公司| 欧美人成在线视频| 久久性色av| 午夜久久福利| 中日韩美女免费视频网址在线观看 | 国产伦精品一区二区三区高清| 老司机午夜精品视频在线观看| 宅男噜噜噜66国产日韩在线观看| 模特精品在线| 久久精品综合一区| 性欧美video另类hd性玩具| 一本久久a久久免费精品不卡| 亚洲国产va精品久久久不卡综合| 国产一区二区三区四区老人| 国产精品久久久久一区二区|