杉宫竹苑工作室

 找回密码
 立即注册
搜索
热搜: 活动 交友 discuz
查看: 717|回复: 0

从dll文件提取图标

[复制链接]
发表于 2022-7-25 15:28:18 | 显示全部楼层 |阅读模式

正式会员享受无限制浏览网站功能和高速网盘下载,赶快加入本站吧!

您需要 登录 才可以下载或查看,没有账号?立即注册

x
  1. !include nsDialogs.nsh

  2. Page Custom MyIconPage

  3. !define /IfNDef LOAD_LIBRARY_AS_DATAFILE 2
  4. !define /IfNDef LR_DEFAULTSIZE 0x0040
  5. !define /IfNDef SHGFI_ADDOVERLAYS 0x000000020
  6. !define /IfNDef SHGFI_ICON 0x000000100
  7. !define /IfNDef SHGFI_USEFILEATTRIBUTES 0x000000010
  8. !if "${NSIS_CHAR_SIZE}" > 1
  9. !define /redef /math SHFILEINFO_SIZE ${NSIS_PTR_SIZE} + 688
  10. !else
  11. !define /redef /math SHFILEINFO_SIZE ${NSIS_PTR_SIZE} + 348
  12. !endif
  13. !define /IfNDef SIID_DRIVEFIXED 8

  14. Var hIcoByIndex
  15. Var hIcoByResId
  16. Var hIcoForSpecificDrive
  17. Var hIcoForGenericDrive

  18. Function MyIconPage
  19. nsDialogs::Create 1018
  20. Pop $0

  21. ${NSD_CreateIcon} 0 0u 20u 20u ''
  22. Pop $1
  23. System::Call 'SHELL32::ExtractIcon(p0, t "$SysDir\SHELL32.dll", i 8)p.s'
  24. Pop $hIcoByIndex
  25. SendMessage $1 ${STM_SETIMAGE} ${IMAGE_ICON} $hIcoByIndex

  26. ${NSD_CreateIcon} 50u 0u 20u 20u ''
  27. Pop $1
  28. System::Call 'KERNEL32::LoadLibraryEx(t "$SysDir\SHELL32.dll", p0, i${LOAD_LIBRARY_AS_DATAFILE})p.s'
  29. System::Call 'USER32::LoadImage(pss, t "#9", i ${IMAGE_ICON}, i0, i0, i${LR_DEFAULTSIZE})p.s'
  30. Pop $hIcoByResId
  31. System::Call 'KERNEL32::FreeLibrary(ps)'
  32. SendMessage $1 ${STM_SETIMAGE} ${IMAGE_ICON} $hIcoByResId
  33. ${NSD_CreateIcon} 200 20u 20u 20u ''
  34. Pop $1
  35. StrCpy $2 $SysDir 3 ; "c:" probably
  36. System::Call 'SHELL32::SHGetFileInfo(t"$2", i0, @r2, i ${SHFILEINFO_SIZE}, i${SHGFI_ICON}|${SHGFI_ADDOVERLAYS})p.r3'
  37. ${If} $3 P<> 0
  38. System::Call '*$2(p.s)'
  39. Pop $hIcoForSpecificDrive
  40. ${EndIf}
  41. SendMessage $1 ${STM_SETIMAGE} ${IMAGE_ICON} $hIcoForSpecificDrive
  42. ${NSD_CreateIcon} 0 40u 20u 20u ''
  43. Pop $1
  44. System::Call 'USER32::GetClientRect(p0,@r2)'
  45. System::Call '*$2(&l${NSIS_PTR_SIZE},p,i,i,&w260)'
  46. System::Call 'SHELL32::SHGetStockIconInfo(i ${SIID_DRIVEFIXED}, i${SHGFI_ICON}, pr2)i.r3'
  47. ${If} $3 >= 0
  48. ${AndIf} $3 != "error"
  49. System::Call '*$2(&i${NSIS_PTR_SIZE},p.s)'
  50. Pop $hIcoForGenericDrive
  51. ${Else}
  52. System::Call 'SHELL32::SHGetFileInfo(t"c:", i0x10, @r2, i ${SHFILEINFO_SIZE}, i${SHGFI_ICON}|${SHGFI_USEFILEATTRIBUTES})p.r3'
  53. ${If} $3 P<> 0
  54. System::Call '*$2(p.s)'
  55. Pop $hIcoForGenericDrive
  56. ${EndIf}
  57. ${EndIf}
  58. SendMessage $1 ${STM_SETIMAGE} ${IMAGE_ICON} $hIcoForGenericDrive
  59. nsDialogs::Show
  60. ${NSD_FreeIcon} $hIcoByIndex
  61. ${NSD_FreeIcon} $hIcoByResId
  62. ${NSD_FreeIcon} $hIcoForSpecificDrive
  63. ${NSD_FreeIcon} $hIcoForGenericDrive
  64. FunctionEnd

  65. Section
  66. nop
  67. SectionEnd
复制代码


回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

QQ|小黑屋|手机版|Archiver|SgzyStudio

GMT+8, 2024-4-30 16:34 , Processed in 0.398892 second(s), 18 queries .

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表