通过窗口句柄获取窗口图标的几种办法

1.枚举窗口 ---->获得窗口句柄---->GetClassLong

 

2.枚举窗口(EnumWindows)---->获取窗口ID(GetWindowThreadProcessId)---->通过进程ID获取进程句柄(OpenProcess)---->进程对应的可执行文件路径(GetModuleFileNameEx)---->提取图标(ExtractIconEx)

 

 

 

3.HIMAGELIST hil;
   SHFILEINFO sfiTemp;

   ZeroMemory(&sfiTemp,sizeof(sfiTemp));

   hil = (HIMAGELIST)SHGetFileInfo(abc, FILE_ATTRIBUTE_DIRECTORY, &sfiTemp, sizeof(sfiTemp), SHGFI_SHELLICONSIZE | SHGFI_ICON | SHGFI_SMALLICON);

            tImageList.Add(sfiTemp.hIcon);

 

 

4.下面的第四种方法,该方法获得的图标比较好,但是也要和上述的方法一同配合使用。

 

if (!SendMessageTimeout(thIcon->next->hWnd, WM_GETICON, 0, 0,
    SMTO_BLOCK | SMTO_ABORTIFHUNG, ICON_FETCH_TIMEOUT, (PULONG_PTR) &m_hSmallIcon)
    || NULL == m_hSmallIcon)
   {
    m_hSmallIcon = (HICON)(LONG_PTR)GetClassLongPtr(thIcon->next->hWnd, GCLP_HICONSM);
   }
   if (!SendMessageTimeout(thIcon->next->hWnd, WM_GETICON, 1, 0,
    SMTO_BLOCK | SMTO_ABORTIFHUNG, ICON_FETCH_TIMEOUT, (PULONG_PTR) &m_hLargeIcon)
    || NULL == m_hLargeIcon)
   {
    m_hLargeIcon = (HICON)(LONG_PTR)GetClassLongPtr(thIcon->next->hWnd, GCLP_HICON);
   }

  • 2
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值