Saturday, April 21, 2007

AutoRun with Opening Specific File

許多市面上的光碟,只要一放入光碟機,就會啟動光碟上的程式,或是做一些預先設定好的動作,這個功能稱為AutoRun。它最大的好處,就是可以讓使用這片光碟的人,不用做額外的動作,就能知道光碟裡面大致上有什麼內容,是個相當方便且重要的功能!假如自己做的光碟也想要有類似的功能,只要研究本身有AutoRun功能的光碟,自然也能有相同的功能。但常見的光碟,啟動的內容多半是可執行檔(.exe),倘若今天想要讓使用者看到的是文件、影像或圖片,並且使用系統預設的程式,就像我們對檔案點兩下打開的動作一樣,那又該怎麼做呢?由於這樣的範例並不常見於市面上的光碟,本篇文章的重心會放在這裡。

Autorun功能依賴以下兩個部分:一是系統有啟動Autorun功能,若系統未啟動此功能,即使光碟上有Autorun.inf,都不會自動顯示出來;另一個是光碟根目錄要有Autorun.inf,這樣Windows才知道要開哪些檔案、程式,或者是要換成哪個圖示。

在繼續探討之前,我們先來瞭解一下,能夠啟動可執行檔的Autorun.inf長什麼樣子:

[autorun]
OPEN=SETUP.EXE
ICON=D2X.ICO

理解能力較好的讀者,應該能猜出openicon這兩行的用途吧!顧名思義,open就是光碟一放進去,Windows該執行什麼指令;icon則是光碟片的小圖示該由哪個檔案來替換。這兩行的意思,就是要Windows啟動光碟片上面的setup.exe,並且把光碟機的小圖示替換成D2x.ico。

問題來了,如果今天不是要啟動可執行檔,而是要開啟特定的文件,例如1.txt,是只要把setup.exe替換成1.txt就好了嗎?這樣做的話會得到下面的結果。


Fig: Failed to open specific file.


Oops! 顯然這樣是不行的。在網路上找到了二種可行的辦法:第一種是把原先的1.txt改成start 1.txt,這在某些情況下是可以運作的,不過在開啟檔案之前,會先出現一下像DOS視窗的東西,然後才會開啟你設定的檔案,感覺和一般的操作習慣略有不同。而另一種是把open換成shellexecute,然後在=號的後面,直接加上想要開啟的檔名就可以了,但此方法並無法在Windows 98下使用。

為了瞭解這兩種方法在特定環境下的運作情形,筆者以此兩方法,分別在Windows 98, 2000, XP三套作業系統進行測試。

方法一:使用open

[autorun]
open=start 1.txt
ICON=D2X.ICO

方法二:使用shellexecute

[autorun]
shellexecute=1.txt
ICON=D2X.ICO


在Windows 98下:
方法一:正常運作
方法二:直接開啟光碟根目錄,並未執行其它指令

在Windows 2000下:
方法一:剛放進光碟時,會顯示錯誤訊息框:「存取的檔案或裝置被拒絕」。若在光碟機圖示按滑鼠右鍵並選擇自動播放,則出現「Windows找不到start.exe」
方法二:正常運作

在Windows XP下:
方法一:無反應。另一台也是裝Windows XP的電腦,則是詢問要用哪個程式來開啟光碟機的根目錄。
方法二:正常運作

總合以上測試的結果,若不考慮Windows 98的相容性,方法二是較好的選擇。最後您只需把上面方法二的內容,完整的存成Autorun.inf,並修改shellexecute後的檔名,改成想自動開啟的檔案名稱,最後再放在光碟的根目錄中,燒錄完成後就能享受此功能帶來的好處!

註:若要執行的檔案,其路徑或檔名中包含空白,其結果將無法預知!在筆者的XP能正常使用,但在另一台卻說找不到檔案,解決辦法可用修改檔名,或以_來取代空白。


參考資料:
CD/DVD AutoRun basics
AutoRun編寫【基礎篇】 ICON圖檔製作

1 comment:

Anonymous said...

GOOD! 推到版上囉^^