2008-10-17 68 views
3

我有一個代碼列出了win32框中正在運行的應用程序,然後顯示它們的圖標。如何獲取Java應用程序的圖標?

到目前爲止,我得到了應用程序的hwnd,然後調用GetClassLong(hwnd,GCL_HICONSM),並且一切正常。

但Java應用程序的情況來處理,作爲過程接聽我的電話是javaw.exe的痛苦,而不是有光澤,pimpy Java應用程序,誰擁有一個如此漂亮的圖標...

我在GetWindowThreadProcessId給一個鏡頭也,但很可惜,這是所返回的javaw進程的PID ...

有一個辦法,雖然這樣做,因爲任務管理器(ALT + TAB)表現出良好的圖標。

回答

3

嗯,它可以做到,因爲Process Viewer有一個顯示應用程序按鈕,即使主視圖顯示Java的圖標。唉這個免費是不開源的,所以它不會告訴它的祕密... :-(

Sysinternals的procmon中沒有做到這一點,唉。

我會挖多一點.. :-)

[編輯]既是一個MS KB文章和Code Project文章建議使用WM_QUERYDRAGICON如果GCL_HICON失敗...

+0

好吧,非常感謝您的回答,WM_QUERYDRAGICON不是很好的調用,但codeproject文章已經很好了!我會更新我的問題,以便給出正確的算法。 – Vinzz 2008-10-20 11:50:49

5

我回答我自己的問題,這要歸功於PhiLho誰把我在正確的軌道上:從Codeproject獲得一個窗口圖標的正確算法的文章(它是否是java):

//首先,請嘗試:

SendMessageTimeout(WM_GETICON)

//如果沒有找到圖標,嘗試

GetClassLong(GCL_HICONSM)

//如果仍然沒有圖標,嘗試

SendMessageTimeout(WM_WM_QUERYDRAGICON)

//如果s直到沒有圖標,註定會失敗,返回錯誤或無效圖標

由於某種原因,Java應用程序應答第一個調用,但不應答到其他人,這似乎是由javaw.exe處理的。

再次感謝PhiLho。

相關問題