在大多數(shù)應(yīng)用中都要知道從頁面打開的Word或WPS文件是否已經(jīng)關(guān)閉,通常的方法有以下幾種:
方法一:
由于當(dāng)前打開的文件是獨占模式打開的,所以可以使用移動文件的方法進(jìn)行判斷,如:
將文件從當(dāng)前文件夾移動到當(dāng)前文件夾如果出錯則改文件在使用,判斷結(jié)果為當(dāng)前文件沒有關(guān)閉,但是這種方法的判斷不一定正確,如果有一個WORD或WPS進(jìn)行在后臺運行,而且它也在用這個文件那么這種方法無疑是會有問題的。
方法二:
使用系統(tǒng)函數(shù)進(jìn)行判斷用windowsAPI進(jìn)行判斷,具體思路可以獲取當(dāng)前打開窗口的句柄,判斷這個句柄是否存在來進(jìn)行判斷,但是這種方法也會有一定的缺陷。
方法三:
使用這種方式的思路是不直接對文件進(jìn)行判斷而是采用間接的方式進(jìn)行判斷,使用WORD或WPS插件開發(fā)方式,開發(fā)一個關(guān)閉狀態(tài)寫入插件。該插件的功能是如果當(dāng)前關(guān)閉的文件是要進(jìn)行判斷的文件則在關(guān)閉文件的時候?qū)⒃摖顟B(tài)寫入到一個XML狀態(tài)文件中如:
改文件的信息可以如下:
<?xml version="1.0" encoding="UTF-8"?>
<FileInfo>
<File>
<FileName>C:/Documents and Settings/Administrator/桌面test1.doc</FileName>
<IsClose>false</IsClose>
<IsSaveAs>false</IsSaveAs>
</File>
<File>
<FileName>C:/Documents and Settings/Administrator/桌面/test2.wps</FileName>
<IsClose>True</IsClose>
<IsSaveAs>false</IsSaveAs>
</File>
</FileInfo>
其中紅色部分為當(dāng)前文件是否關(guān)閉的狀態(tài)值,在控件調(diào)用部分可以使用一個計時器進(jìn)行讀取這個狀態(tài),直到關(guān)閉。
其中WPS或WORD插件的主要功能就是在關(guān)閉的時候通過Application.FullName和當(dāng)前XML狀態(tài)文件中的FileName進(jìn)行對比如果文件名和路徑相同則將改對應(yīng)的IsClose屬性設(shè)置為True.這時候控件部分在讀取這個值的時候就會判斷到這個文件已經(jīng)關(guān)閉了從而進(jìn)行下一步的處理。
在這個狀態(tài)文件中大家可能看到文件名FileName的寫入使用的是絕對路徑,因為如果只是寫入文件名判斷會出錯:如,我們要判斷的是C:/1.wps文件是否已經(jīng)關(guān)閉而現(xiàn)在又打開D:/1.wps
,很明顯在只有文件名記錄的情況下,這種上述這種情況會出錯,所以采用了絕對路徑和文件名的判斷這樣判斷會更準(zhǔn)確一些。
我個人還是比較看好第三種方法,原因是這種方式將需要判斷的文件和判斷方法進(jìn)行分離,使用插件效果會較好。
新聞熱點
疑難解答
圖片精選