VFP程序編譯為獨立可執行文件EXE時不顯示_SCREEN窗口的方法
看到壇上很多人問過這個問題,特貢獻本帖供大家參考。先解釋原理:VFP其實是一種解釋語言,不是編譯語言,即使其程序被編譯為EXE形式,其實也是需要被VFP解釋器解釋執行的,但這個解釋器在VFP語言包中,是作爲運行庫提供的,只要程序使用VFP語言,發出調用消息,操作系統就會啓動解釋器執行程序的代碼,所以,VFP中的_SCREEN窗口,其實也是一個用VFP寫成的窗體,是外掛的東西,我們完全可以不需要它就能執行程序。在Windows中,每個窗體基本上是一個進程,即所謂的頂部窗體(Top窗體,設置窗體屬性ShowWindow = 2),在這個窗體内部的子窗體,其窗體屬性是ShowWindow = 1。VFP設置了兩個頂部窗體,一個是語言包專用的_SCREEN窗體,它永遠是ShowWindow = 2的,如果要建立在這個窗體下的子窗體,一般是ShowWindow = 0,這是平常我們創建窗體時的默認值。因此,要創建獨立於_SCREEN窗體之外的頂部窗體,必須令此窗體的ShowWindow = 2,然後新創建的ShowWindow = 1的子窗體,才會在這個頂部窗體之下。
但是,因爲VFP有兩個頂部窗體,即使你程序中建立了自己的頂部窗體,也無法阻止_SCREEN窗體的啓動,因爲它的地位與你新建的ShowWindow = 2的窗體是一樣的,甚至有更高的優先權。禁止這個窗體啓動,是不可能在自己寫的程序中操作的,因爲在你這個程序啓動能夠起作用之前,_SCREEN窗體已經搶先啓動了,除非你調用Windows系統消息命令對方關閉,否則你無法控制別人的行動。這就是很多人繌是說,即使寫了_SCREEN.Visible = .F.,_SCREEN窗體仍然存在的原因,在Windows的任務欄會看到兩隻狐狸頭。VFP有自己的解決辦法,程序外部的問題必須在程序外部解決,那就是外部配置文件config.fpw文件,這個文件是比任何程序都早執行的,它纔是決定VFP程序運行模式的總指揮,它有很多超級指令,是控制VFP的整體行爲的,查查幫助信息就看到這些指令是什麽了。一般地,當編譯的EXE程序啓動時,它首先在自己所在的目錄中檢索config.fpw文件,如果存在,就先執行其中的指令,然後才正式啓動自己;如果這裡沒有這個文件,就到VFP的安裝目錄中找,都沒有,就按默認配置運行。所以,爲了徹底地禁止_SCREEN窗體的啓動,除了上面所說的ShowWindow屬性設置之外,還要在EXE的啓動目錄中放置config.fpw文件,控制這個程序的啓動行爲。具體操作如下:
用記事本編輯文本文件config.fpw,或在命令窗口通過MODIFY COMMAND config.fpw建立,輸入下面的代碼,保存即可。
SCREEN = OFF && 不啓動_SCREEN窗體 RESOURCE = OFF && 不生成FOXUSER數據表
補充:這個config.fpw可以連編到EXE中,以防止別人修改干擾程序的運行,如果惡意者能夠對你的程序做什麽動作,這是一個很好的入手點。
[ 本帖最后由 TonyDeng 于 2011-7-24 12:23 编辑 ]