2008-10-17 69 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。

相关问题