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

Vin*_*nzz 3 winapi

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

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

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

我还试着GetWindowThreadProcessId,但是唉,这是返回的javaw的PID ...

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

Vin*_*nzz 5

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

//第一次尝试:

SendMessageTimeout(WM_GETICON)

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

GetClassLong(GCL_HICONSM)

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

SendMessageTimeout(WM_WM_QUERYDRAGICON)

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

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

再次感谢PhiLho.