如何通过程序获取DLL(全部为ICO,BMP,GIF)文件中的资源文件名称.(200分)

  • 主题发起人 主题发起人 saellen
  • 开始时间 开始时间
在hubdog的葵花宝典里有关于PE格式文件的全面分析,你需要首先找到文件中的资源入口,<br>然后根据各个资源的格式取出数据,
 
LoadIconFromInstance(dll的instance句柄)<br>load其他的资源类似
 
中文的资料:我还没有找到电子版的。<br>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;《Windows 95 系统编程奥秘》[美]Matt Pietrek 某章。<br><br><br>Delphi如何实现<br>可参考Delphi范例<br>[Delphi5]/Demos/Resxplor/resxplor.dpr<br>实质上是PE文件格式的问题。
 
以下函式, 供參考<br>Module-&gt;必需傳入由LoadLibrary或GetModuleHandle或行程的Handle <br><br>function EnumResName(Module: THandle): TStringList;<br>&nbsp; procedure EnumResNameProc(<br>&nbsp; &nbsp; &nbsp; hModule: THandle; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; // module handle<br>&nbsp; &nbsp; &nbsp; lpszType: PChar; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;// resource type<br>&nbsp; &nbsp; &nbsp; lpszName: PChar; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;// resource name<br>&nbsp; &nbsp; &nbsp; lParam: Cardinal); stdcall; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; // application-defined parameter<br>&nbsp; begin<br>&nbsp; &nbsp; TStringList(LParam).Add(lpszName);<br>&nbsp; end;<br><br>begin<br>&nbsp; Result := TStringList.Create;<br>&nbsp; try<br>&nbsp; &nbsp; EnumResourceNames(Module, RT_RCDATA, @EnumResNameProc, Integer(Result));<br>&nbsp; except<br>&nbsp; &nbsp; FreeAndNil(Result);<br>&nbsp; &nbsp; raise;<br>&nbsp; end;<br>end;<br><br>在API EnumResourceNames, 可以傳入不同的資料類型, 如可以把RT_RCDATA改成RT_BITMAP<br>或RT_ICON等
 
多人接受答案了。
 
后退
顶部