关于获取文件图标的疑问(50分)

  • 主题发起人 主题发起人 kukuasir
  • 开始时间 开始时间
K

kukuasir

Unregistered / Unconfirmed
GUEST, unregistred user!
使用ShGetFileInfo获取文件图标时发现只能获取绝对路径的文件图标,<br>而那些能在 开始-&gt;运行 中输入文件名直接运行的文件(既只输入文件名,<br>不输入路径就能执行的文件,如,win.ini,regedit,delphi32等)的图标不<br>知该用什么方法获得.<br>或者说是如何变相的通过文件名获得文件的绝对地址的方法(不仅要获得<br>DLL和EXE文件的图标还要获得如INI,COM,BAT等文件的图标)<br>原来使用过extracticonex来获取图标,但发现只能获得自身包含图标的文<br>件的图标,而INI,COM,BAT等文件的系统关联图标他就无能为力了.<br><br>希望那位大哥帮忙看看
 
不输入路径就能执行的文件,如,win.ini,regedit,delphi32等)<br>你可以在系统路径里查找,
 
to chenshaizi<br>win.ini,还有一些COM,BAT文件的确在系统目录里,但DELPHI32就不在了,好象是加在系统变量中的<br>我觉得一定有什么函数或API能直接取的文件路径<br>就像用LoadLibrary的方法获得文件名的HANDLE一样
 
系统路径<br>Microsoft Windows XP [版本 5.1.2600]<br>(C) 版权所有 1985-2001 Microsoft Corp.<br><br>F:/Documents and Settings/CSB&gt;path<br>PATH=f:/orant/bin;e:/Program Files/Oracle/jre/1.3.1/bin;e:/Program Files/Oracle/<br>jre/1.1.8/bin;e:/orant/bin;e:/Program Files/Borland/Delphi7/Bin;e:/Program Files<br>/Borland/Delphi7/Projects/Bpl/;E:/PROGRA~1/EAGLE/CODERU~1/SYSTEM;E:/PROGRA~1/Bor<br>land/CBUILD~1/Bin;E:/PROGRA~1/Borland/CBUILD~1/Projects/Bpl;e:/PROGRA~1/Borland/<br>Delphi5/Projects/Bpl;e:/PROGRA~1/Borland/vbroker/jre/Bin;e:/PROGRA~1/Borland/vbr<br>oker/Bin;e:/PROGRA~1/Borland/Delphi5/Bin;F:/WINDOWS/system32;F:/WINDOWS;F:/WINDO<br>WS/System32/Wbem;E:/PROGRA~1/Borland/Delphi6/Bin;E:/PROGRA~1/Borland/Delphi6/Pro<br>jects/Bpl;E:/Program Files/KAV2003;e:/Program Files/Java/j2re1.4.0/bin;e:/Progra<br>m Files/Java/j2re1.4.0/bin/client;e:/Program Files/Microsoft SQL Server/80/Tools<br>/BINN;E:/Program Files/Microsoft Visual Studio/Common/Tools/WinNT;E:/Program Fil<br>es/Microsoft Visual Studio/Common/MSDev98/Bin;E:/Program Files/Microsoft Visual<br>Studio/Common/Tools;E:/Program Files/Microsoft Visual Studio/VC98/bin<br><br>F:/Documents and Settings/CSB&gt;
 
注册表:<br>HKEY_LOCAL_MACHINE/SYSTEM/ControlSet001/Control/Session Manager/Environment<br>下的 Path项值为系统所有路径,也包括了delphi32.exe的路径:<br>f:/orant/bin;e:/Program Files/Oracle/jre/1.3.1/bin;e:/Program Files/Oracle/jre/1.1.8/bin;e:/orant/bin;e:/Program Files/Borland/Delphi7/Bin;e:/Program Files/Borland/Delphi7/Projects/Bpl/;E:/PROGRA~1/EAGLE/CODERU~1/SYSTEM;E:/PROGRA~1/Borland/CBUILD~1/Bin;E:/PROGRA~1/Borland/CBUILD~1/Projects/Bpl;e:/PROGRA~1/Borland/Delphi5/Projects/Bpl;e:/PROGRA~1/Borland/vbroker/jre/Bin;e:/PROGRA~1/Borland/vbroker/Bin;e:/PROGRA~1/Borland/Delphi5/Bin;F:/WINDOWS/system32;F:/WINDOWS;F:/WINDOWS/System32/Wbem;E:/PROGRA~1/Borland/Delphi6/Bin;E:/PROGRA~1/Borland/Delphi6/Projects/Bpl;E:/Program Files/KAV2003;e:/Program Files/Java/j2re1.4.0/bin;e:/Program Files/Java/j2re1.4.0/bin/client;e:/Program Files/Microsoft SQL Server/80/Tools/BINN<br><br><br>读取方法,你自己弄,我不想写了
 
先谢谢chenshaizi兄啦,自己写代码固然好,但是用循环判断是否有文件存在似乎效率不高<br>我主要是想了解一些API是如何获得绝对路径的
 
<br>用searchpath?<br><br>var<br>&nbsp; FName: PChar;<br>&nbsp; Buffer: array[0..MAX_PATH - 1] of Char;<br>&nbsp; szDir : String;<br>begin<br>&nbsp; SetString(szDir, Buffer, SearchPath(nil,'delphi32.exe',nil,SizeOf(Buffer),<br>&nbsp; &nbsp; Buffer, FName));<br><br>不过效率一样不高.<br><br>另,对于不是exe的文件,根本不需要找到源文件,只要自己建一个和他扩展名一样的空文件就可以获取图标了.
 
谢谢control兄了<br>这就是我想要的答案<br><br>“对于不是exe的文件,根本不需要找到源文件,只要自己建一个和他扩展名一样的空文件就可以获取图标了”<br>这是获得关联文件图标的一种另类方法吧,如果对于文件而言,如果不存在的话,同样也能获得图标,与需要达到的目的就不一样了。<br>用了searchpath后如果文件存在的话就能返回一个绝对路径了,用ShGetFileInfo就能轻松获得图标了,也不需要用上面的另类方法了<br>
 

Similar threads

后退
顶部