[已解决]从DLL中获取图标的问题
本帖最后由 skyfree 于 2010-9-25 21:15 编辑一般来说使用DLL中的图标文件是用GUICtrlSetImage函数实现,设定要读取的DLL,以及图标的编号就可以了,如GUICtrlSetImage($IconCtrlHdl,"x:\xx\xx.dll",1001),其中$IconCtrlHdl为图标空间的句柄。
但最近我从注册表中读出了这样的图标信息,如:"%systemroot%\system32\imageres.dll,-93",很显然,图标文件位于C:\Windows\System32\imageres.dll中,但“-93”究竟是不是图标的编号?
尝试用过GUICtrlSetImage(C:\Windows\System32\imageres.dl,"x:\xx\xx.dll",-93)和GUICtrlSetImage(C:\Windows\System32\imageres.dl,"x:\xx\xx.dll",93),即使用和不使用“-”,发现读出的图标不是我所需要的。那究竟想“-93”这样的编号,究竟指的是什么,还请各位帮忙分析。
十分感谢! $aRet = _PickIconDlg(@SystemDir & "\shell32.dll", 8, WinGetHandle(""))
If Not @error Then MsgBox(64, "Results", StringFormat("IconFile Selected: %s\nIconID Selected: %i", $aRet, $aRet))
Func _PickIconDlg($sFileName, $nIconIndex=0, $hWnd=0)
Local $nRet, $aRetArr
$nRet = DllCall("shell32.dll", "int", "PickIconDlg", _
"hwnd", $hWnd, _
"wstr", $sFileName, "int", 1000, "int*", $nIconIndex)
If Not $nRet Then Return SetError(1, 0, -1)
$aRetArr = $nRet
$aRetArr = $nRet
Return $aRetArr
EndFunc
这个应该可以帮助你。
x:\xxxx\AutoIt3\Examples\GUI\Advanced\enumicons.au3 回复 1# skyfree
该编号应该是与TraySetIcon相对应的。 本帖最后由 lixiaolong 于 2010-9-24 12:15 编辑
GUICtrlSetImage(-1, "C:\Windows\System32\imageres.dll", -93)
这个“-93“就是,首先建立一个文件夹
在文件夹上点右键,打开属性,选[自定义]
点[更改图标],点[浏览] 选C:\Windows\System32\imageres.dll
然后出现很多图标,第一个就是 -1 ,从上往下数,-1 -2 -3 ,,,,
第93个图标就是 -93#include <GUIConstantsEx.au3>
#include <ButtonConstants.au3>
Opt('MustDeclareVars', 1)
Example()
Func Example()
Local $msg
GUICreate("My GUI") ; will create a dialog box that when displayed is centered
GUICtrlCreateButton("my picture button", 10, 20, 40, 40, $BS_ICON)
GUICtrlSetImage(-1, "C:\Windows\System32\imageres.dll", -93)
GUISetState()
; Run the GUI until the dialog is closed
While 1
$msg = GUIGetMsg()
If $msg = $GUI_EVENT_CLOSE Then ExitLoop
WEnd
EndFunc ;==>Example忘说了,我干才试了一下,如果使用的系统是XP,在imageres.dll里找图标就不正常
Vista和Win7可以正常找到需要的图标 谢谢各们大侠,学习了。 十分感谢各位的解答,认真学习了 来学习了!!!!!!! 这个LZ是自由天空的SKYFREE吗? 欢迎skyfree到来! 解决了的话还请前辈修改标题,加注“已解决” 估计不是吧? 学习了各位大大 学习下DLL,对这方面的知识了解甚少
页:
[1]