利用周末時間把Native Splash Screen支持給做進(jìn)去了,現(xiàn)在在創(chuàng)建EXE時可以訂制程序啟動時的Splash Screen圖片(BMP,JPG,GIF..)以及定制顯示的文字。
Splash Screen會在你的程序顯示第一個窗口時自動消失,假如你的程序永遠(yuǎn)不會顯示窗口,那么你可以在程序中顯式關(guān)閉Splash Screen.
在你的程序中添加類似如下代碼:
1?Class?cls=Class.forName("com.yovn.labs.java2exe.loader.SplashScreen");
2?????????????????Method?getIM=cls.getMethod("getInstance",?new?Class[0]);
3?????????????????Object?screen=getIM.invoke(null,?new?Object[0]);
4?????????????????Method?m=cls.getMethod("dispose",?new?Class[0]);
5?????????????????m.invoke(screen,?new?Object[0]);
6?????????????????//SplashScreen.getInstance().dispose();
7?????????????????System.out.println("disposed?splash?screen");
8?
Splash Screen是在創(chuàng)建JVM之前就顯示的。
那么這是怎么實(shí)現(xiàn)的呢?問題的關(guān)鍵在于程序顯示第一個窗口時如何能通知到Splash Screen?
魔力在于API Hook!!
顯示任何一個窗口,絕大多數(shù)(不知道是不是全部)都是通過ShowWindow()Windows API實(shí)現(xiàn)的,該函數(shù)定義在User32.dll中,通過查找JVM載入的所有Module,并在其中替換導(dǎo)入的該函數(shù)地址就可以在調(diào)用該函數(shù)時得到通知,從而實(shí)現(xiàn)自動關(guān)閉Splash Screen.
下載:
Java2exe_0.0.2.rar