从HWND获取图标进程,进程名称或其他进程标识符

时间:2016-10-26 11:02:23

标签: c++ process icons handle

我有窗口的进程名称和句柄(HWND)。
我现在想获得相对图标(如果有的话)
通过MSDN搜索,我发现ExtractIcon()从给定的exe名称获取图标的句柄,GetIconInfo()HICON获取图标的“信息”。
我不知道这是否是正确的方法,以及如何检索正确的信息以显示(在第二时刻)没有图标句柄的图标。
我必须发送此信息信息到另一个必须显示图标的进程(通过套接字)。
ICONINFO结构中,有HBITMAP个字段包含位图(黑色和白色以及颜色) )。它有用吗?

1 个答案:

答案 0 :(得分:0)

您可以使用API​​ GetClassLong来检索与您的程序关联的图标,然后使用SendMessage API传递您要更改其图标的窗口的hwnd。

在本例中,我从应用程序中提取了图标,然后将其设置为Calculator。我的Windows计算器已打开,然后向其发送图标:

case WM_LBUTTONDOWN: // just for explanation so left clicking in your client area and see the result
{
    HICON icon = (HICON)GetClassLong(hWnd, GCL_HICON);
    HWND hCons = FindWindow(NULL, "Calculator"); // I already opened windows calculator. you can use any other window but be sure to get its valid Handle
    if(!hCons)
        MessageBox(0, "\"Calculator\" windows is not found!", 0, MB_OK|MB_ICONHAND);
    SendMessage(hCons, WM_SETICON, (WPARAM)ICON_BIG, (LPARAM)icon); // setting the icon

}
break;