注册 登录  
 加关注
   显示下一条  |  关闭
温馨提示!由于新浪微博认证机制调整,您的新浪微博帐号绑定已过期,请重新绑定!立即重新绑定新浪微博》  |  关闭

季叔华

痛苦和无知是我生活的全部

 
 
 

日志

 
 

用python 从.lnk文件中获取文件路径  

2009-08-31 20:42:22|  分类: Python |  标签: |举报 |字号 订阅

  下载LOFTER 我的照片书  |

    不是vc,不是vb,也不见得对所有都适用,但至少它现在于我使用着——很“笨”的方法从.lnk((桌面)快捷方式)文件中获取文件的路径:

    .lnk文件应该是以一定结构保存的,所以二进制读取该文件,必定会读到它的路径,所以,从二进制数据中读取:

def GetFilepathFromLnk(lnkpath):

  f = open(lnkpath,'rb')
  data = f.read()
  sp = data.find("Program\x00")
  slen = len("Program\x00")
  i = 0
  sp = sp + slen + i
  d = data[sp]
  while (d != '\x00'):
    i += 1
    d = data[sp+slen+i]
  ep = sp + slen + i
  filepath = data[sp:ep]
  f.close()

  #print filepath
 return filepath


如果是安装了pythonwin,则可以使用更简单的方法:

def GetpathFromLink(lnkpath):
    shortcut = pythoncom.CoCreateInstance(
        shell.CLSID_ShellLink, None,
        pythoncom.CLSCTX_INPROC_SERVER, shell.IID_IShellLink)
    shortcut.QueryInterface( pythoncom.IID_IPersistFile ).Load(lnkpath)
    path = shortcut.GetPath(shell.SLGP_SHORTPATH)[0]

    return path

 

 

(这是python创建及获取路径的源码:

http://www.chinaunix.net/index.php?uid=20623953&url=http://bbs.chinaunix.net/viewthread.php?tid=1588759

)

 

 

下面是一段VC代码:

#include <shlobj.h>

bool ReadShortcut(LPWSTR lpwLnkFile, LPSTR lpDescFile)
{
    bool bReturn = true;
    IShellLink *pShellLink;

    if(bReturn)
    {
        bReturn = (CoInitialize(NULL) == S_OK);
        if(bReturn)
        {
            bReturn = CoCreateInstance (CLSID_ShellLink, NULL, CLSCTX_INPROC_SERVER,
                    IID_IShellLink, (void **)&pShellLink) >= 0;
            if(bReturn)
            {
                IPersistFile *ppf;
                bReturn = pShellLink->QueryInterface(IID_IPersistFile, (void **)&ppf) >= 0;
                if(bReturn)
                {
                    bReturn = ppf->Load(lpwLnkFile, TRUE) >= 0;
                    if(bReturn)
                    {
                        pShellLink->GetPath(lpDescFile, MAX_PATH, NULL, 0);
                    }
                    ppf->Release ();
                }
                pShellLink->Release ();
            }
            CoUninitialize();
        }
    }
    return bReturn;
}

   

  评论这张
 
阅读(1084)| 评论(0)
推荐 转载

历史上的今天

评论

<#--最新日志,群博日志--> <#--推荐日志--> <#--引用记录--> <#--博主推荐--> <#--随机阅读--> <#--首页推荐--> <#--历史上的今天--> <#--被推荐日志--> <#--上一篇,下一篇--> <#-- 热度 --> <#-- 网易新闻广告 --> <#--右边模块结构--> <#--评论模块结构--> <#--引用模块结构--> <#--博主发起的投票-->
 
 
 
 
 
 
 
 
 
 
 
 
 
 

页脚

网易公司版权所有 ©1997-2018