如何获取java应用程序的图标?

时间:2008-10-17 13:51:40

标签: winapi

我有一个代码,列出了win32框中正在运行的应用程序,然后显示他们的图标。

到目前为止一切顺利,我得到应用程序的hwnd,然后调用GetClassLong(hwnd,GCL_HICONSM),一切都很好。

但是java应用程序的情况很难处理,因为回答我的调用的过程是javaw.exe,而不是闪亮的pimpy java应用程序,谁有一个如此漂亮的图标......

我也试着GetWindowThreadProcessId,但是唉,这是返回的java的PID ......

有一种方法可以做到这一点,因为任务管理器(alt + tab)显示了好的图标。

2 个答案:

答案 0 :(得分:5)

我回答了我自己的问题,感谢PhiLho让我走上了正确的轨道:来自Codeproject的一篇文章,其中有正确的算法来获取一个窗口图标(无论是否为java):

//首先,尝试:

SendMessageTimeout(WM_GETICON)

//如果找不到图标,请尝试

GetClassLong(GCL_HICONSM)

//如果仍然没有图标,请尝试

SendMessageTimeout(WM_WM_QUERYDRAGICON)

//如果仍然没有图标,则注定要失败,返回错误或无效图标

出于某种原因,java应用程序会回答第一个呼叫,但不会回应其他呼叫,这似乎是由javaw.exe处理的。

再次感谢PhiLho。

答案 1 :(得分:3)

嗯,可以这样做,因为Process Viewer有一个Show Applications按钮来执行该操作(即使主视图显示了Java的图标)。唉,这个免费软件不是开源的,所以它不会告诉它的秘密......: - (

Sysinternals'ProcMon不这样做,唉。

我会多挖一点......: - )

[编辑]如果GCL_HICON失败,MS KB文章和Code Project文章都建议使用WM_QUERYDRAGICON ...