收藏 分销(赏)

WINAPI-VFP获得EXE、DLL或ICO文件图标.doc

上传人:xrp****65 文档编号:7712159 上传时间:2025-01-13 格式:DOC 页数:6 大小:70KB 下载积分:10 金币
下载 相关 举报
WINAPI-VFP获得EXE、DLL或ICO文件图标.doc_第1页
第1页 / 共6页
WINAPI-VFP获得EXE、DLL或ICO文件图标.doc_第2页
第2页 / 共6页


点击查看更多>>
资源描述
WIN API-VFP获得EXE、DLL或ICO文件图标 [ 275 查看 / 19 回复 ] 返回列表 窗体顶端 · 发送短消息 UID 9805 精华 0 威望 10 金钱 10 元 查看公共资料 搜索帖子 apple_8180 apple_8180 · 组别新手上路 · 性别 保密 · 积分10 · 帖子1174 · 注册时间 2010-03-17 apple_8180 2010-06-29 10:19 |只看楼主 1# 字体大小: t T *!*    日  期:2010-06-10 *!*    说  明:部分代码为转帖内容(感谢原作者),本人只对_GetFile过程等处稍加修改并加入生成图标文件模块。可惜由于API的限制生成的图标只能是16色的。 VB code Public frm frm=Createobject ("Tform") frm.Visible = .T. Define Class Tform As Form     Width=650     Height=400     BackColor=Rgb(200,255,200)     AutoCenter=.T.     Caption="WIN API-VFP获得exe、dll或ico文件图标"     Add Object lbl As Label With Caption="文件:",Left=15,Top=15,BackStyle=0     Add Object txt As TextBox With Left=50,Top=8,Height=24,Width=450     Add Object cmdFile As CommandButton With Caption="选择文件",Top=8,Left=505,Width=80,Height=24     Add Object cmd As CommandButton With Caption="刷新",Width=80,Height=24,Default=.T.     Add Object MyImage As Image With Width=64,Height=64,Left=600,Top=05,BackStyle=0,Visible=.F.     Add Object MyList As ListBox With Width=80,Height=350,Left=560,Top=40     Procedure Load         Set Safety Off         This.Decl     Endproc     Procedure Init         This.txt.Value=This.getVFPmodule()         This.Resize         This.cmd.SetFocus         This.cmd.Click     Endproc     Procedure MyList.InteractiveChange         lcListValue=This.ListItem(This.ListItemId,2)         If File(lcListValue)             Thisform.MyImage.Picture=lcListValue             Thisform.MyImage.Visible=.T.         Else             Thisform.MyImage.Visible=.F.         Endif     Endproc     Procedure Resize         With This.cmd             .Left=Int((Thisform.Width-.Width)/2)             .Top=This.Height-.Height-10         Endwith     Endproc     Procedure drawIcons         * clear form         This.Visible=.F.         This.Visible=.T.         =Inkey(0.1)        && give a break         Local lcExe,hApp,lnIndex,hIcon,X,Y,dX,dY         lcExe=Alltrim(This.txt.Value)         If Not File(lcExe)             Wait Window "文件 "+lcExe+" 不存在" Nowait         Endif         hApp=GetModuleHandle(0)         Store 40 To dX,dY         Y=56         X=dX         lnIndex=0         Do While .T.             hIcon=ExtractIcon(hApp,lcExe,lnIndex)             If hIcon=0                 Exit             Endif             This._draw(hIcon,X,Y)             lnIndex=lnIndex+1             This.hIcon2Object(hIcon,lnIndex)             =DestroyIcon(hIcon)             X=X+dX             If X>This.Width-80-dX*2                 X=dX                 Y=Y+dY             Endif         Enddo     Endproc     Protected Procedure _draw(hIcon,X,Y)         Local HWnd,hdc         HWnd=GetFocus()         hdc=GetDC(HWnd)        && this form         DrawIcon(hdc,X,Y,hIcon)         =ReleaseDC(HWnd,hdc)     Endproc     Procedure selectFile         Local lcFile         lcFile=This._GetFile()         If Len(lcFile)<>0             This.txt.Value=lcFile             This.cmd.Click         Endif     Endproc     Protected Function _GetFile         Local lcResult,lcPath, lcStoredPath         lcPath=Sys(5)+Sys(2003)         lcStoredPath=Fullpath(This.txt.Value)         lcStoredPath=Substr(lcStoredPath,1,Rat(Chr(92),lcStoredPath)-1)         Set Default To (lcStoredPath)         lcResult=Getfile("所有支持的文件(*.exe,*.dll,*.ico):exe,dll,ico;可执行文件(*.exe):Exe;动态链接库(*.dll):Dll;图标文件(*.ico):Ico","","",0,"请选择exe、dll或ico文件")         If Inlist(Justext(lcResult),"EXE","DLL","ICO")             Set Default To (lcPath)             Return Lower(lcResult)         Else             Set Default To (lcPath)             Return ""         Endif     Endfunc     Procedure Decl         Declare Integer GetFocus In user32         Declare Integer GetDC In user32 Integer HWnd         Declare Integer GetModuleHandle In kernel32 Integer lpModuleName         Declare Integer ReleaseDC In user32 Integer HWnd,Integer hdc         Declare Integer LoadIcon In user32 Integer hInstance,Integer lpIconName         Declare Integer ExtractIcon In shell32 Integer hInst,String lpszExeFileName,Integer lpiIcon         Declare Short DrawIcon In user32 Integer hDC,Integer X,Integer Y,Integer hIcon         Declare Integer GetModuleFileName In kernel32 Integer hModule,String @lpFilename,Integer nSize         Declare Short DestroyIcon In user32 Integer hIcon         Declare Integer OleCreatePictureIndirect In oleaut32 String @lpPictDesc,String @riid,Long fOwn,Object @lplpvObj     Endproc     Protected Function getVFPmodule         Local lpFilename         lpFilename=Space(250)         lnLen=GetModuleFileName(0,@lpFilename,Len(lpFilename))         Return Left (lpFilename,lnLen)     Endfunc     Procedure hIcon2Object(lhIcon,lnIcoNum)         #Define PICTYPE_ICON 3         #Define GUID_Icon 0h8109F87B32BF1A108BBB00AA00300CAB    && 0h0004020000000000C000000000000046         Local lcPictDesc,lqGuid,loIconObj         lcPictDesc=BinToC(16,"4RS")+;    && Size of Structure         BinToC(PICTYPE_ICON,"4RS")+;    && Type of Image         BinToC(lhIcon,"4RS")+;            && Image Handle         BinToC(0,"4RS")         lqGuid=GUID_Icon         loIconObj=0         OleCreatePictureIndirect(@lcPictDesc,@lqGuid,1,@loIconObj)         If Vartype(loIconObj)='O'             lcIconFile="c:\"+Transform(lnIcoNum)+".ico"        && 生成 ico 文件到 c:\,但是生成的 .ico 文件是16色             * 现在的 Exe 所带图标一般都是标准图标组,就是16x16、32x32、48x48三组,每组又分为16色、256色、32位色三种。用Windows的API函数是有局限性的,就是不能指定到底要提取哪个色深的图标。             * 想要提取某一个图标,方法是有的,就是不使用API函数,自己来,但必须了解 PE 结构。             If SavePicture(loIconObj,lcIconFile)                 This.MyList.AddListItem(Transform(lnIcoNum)+".ico",lnIcoNum,1)                 This.MyList.AddListItem(lcIconFile,lnIcoNum,2)             Endif         Endif     Endfunc     Procedure cmd.Click         Clear Resources         Thisform.MyList.Clear         Thisform.drawIcons         Thisform.MyList.ListItemId=1         Thisform.MyList.InteractiveChange()     Endproc     Procedure cmdFile.Click         Thisform.selectFile     Endproc Enddefine 窗体底端
展开阅读全文

开通  VIP会员、SVIP会员  优惠大
下载10份以上建议开通VIP会员
下载20份以上建议开通SVIP会员


开通VIP      成为共赢上传

当前位置:首页 > 教育专区 > 其他

移动网页_全站_页脚广告1

关于我们      便捷服务       自信AI       AI导航        抽奖活动

©2010-2026 宁波自信网络信息技术有限公司  版权所有

客服电话:0574-28810668  投诉电话:18658249818

gongan.png浙公网安备33021202000488号   

icp.png浙ICP备2021020529号-1  |  浙B2-20240490  

关注我们 :微信公众号    抖音    微博    LOFTER 

客服