如何实现快捷方式中的查找目标功能

最近写一个开发辅助工具,在这个过程要做一个类似文件快捷方式中查找目 标的功能,先查MSDN98,大家不要见笑,我现在一直都用它,没有相应的API, 后又. Net 2003中的MSDN,找到了可以实现该功能的API, SHOpenFolderAndSelectItems()函数,它的原型如下:

(具体用法参考 MSDN)“Opens a Microsoft Windows Explorer window with specified items in a particular folder selected.”

HRESULTSHOpenFolderAndSelectItems(
   LPCITEMIDLISTpidlFolder,
  UINTcidl,
   LPCITEMIDLIST*apidl,
  DWORDdwFlags
);

但是,它需 要Windows XP及上,若在Win2000或Win98如何实现它呢?于是我就上网搜索,几 经周折最终搜到的一篇文章,但它只是利用工具通过反汇编Windows API函数得 到的代码,可能可以实现与快捷方式相同的对话框(我没有试过),但其代码可 读性非常差,我只能参考一下大概的流程,他提到一个非常重要的一点,那就是 使用一个未公开的API函数SHGetIDispatchForFolder,它可帮助我打开文件夹。 好不多说了,下面是关键的部分:

查找目标功能,分为两个步骤,首先 打开或找到目标文件所在的文件夹,其次在打开的文件夹中选中相应的项目(即 文件)。在说这个步骤之前,先认识一下,下面两个结构

typedef struct _SHITEMID {
  USHORT cb;
  BYTE  abID[1];
} SHITEMID, * LPSHITEMID;
typedef const SHITEMID * LPCSHITEMID;
typedef struct _ITEMIDLIST {
  SHITEMID mkid;
} ITEMIDLIST, * LPITEMIDLIST;
typedef const ITEMIDLIST * LPCITEMIDLIST;

这两个结构的数据保存的是项目定义符列表(仅是字 面翻译),这个结构所表示的文件夹及文件除了正常的,还包括一些特殊的文件 夹及文件(如目录,我的电脑等),SHGetIDispatchForFolder函数正是用它的 做为参数,可以打开一些特殊的文件夹。SHGetIDispatchForFolder函数的原型 是 :HRESULT (WINAPI*gpfSHGetIDispatchForFolder)(ITEMIDLIST* pidl, IWebBrowserApp** ppIWebBrowserApp);

通常快捷方式给我的 ITEMIDLIST是包含文件名的,若直接调用上面的函数,它将直接会打开出目标文 件,而不是打开文件夹。下面是区分文件及文件夹的代码:

pIdlFile = pidl;
  /// 找出目标文件中文件名的偏移量
  while (cb = pIdlFile->mkid.cb)
  {
    pidl2 = pIdlFile;
    pIdlFile = (ITEMIDLIST*)((BYTE*)pIdlFile + cb);
  }
  cb = pidl2->mkid.cb;
  pidl2->mkid.cb = 0;

时间: 2024-09-21 04:15:03

如何实现快捷方式中的查找目标功能的相关文章

在Word2003中使用查找替换功能

  在Word2003中完成文字输入和格式设置工作后,一篇Word文档并不能马上交工.因为在录入文字或撰写文章的过程中,难免会存在一些纰漏,甚至会出现大量的错别字.逐字查找和修改绝对不切合实际,而Word提供的"查找与替换"功能此时可以助我们一臂之力. 例如需要将整篇文档中所有的"其他"改为"其它",则可以在Word窗口的菜单栏上依次单击"编辑"→"替换"菜单命令,打开"查找和替换"对话

winform 打包 创建的桌面快捷方式的 属性下的查找目标

问题描述 请问在打包的过程中怎样设置.才能使查找目标按钮可以使用. 解决方案 解决方案二:用InnoSetup打包的就可以解决方案三:自带打包器!解决方案四:VS自帶的打包器里面创建出来的快捷方式查找目标按钮是用不了的,LZ不用钻死胡同了.但可以采取另外的办法,建一个Installing类,在里面用程序创建快捷方式.创建的方法网上多的是.解决方案五:可以使用微软提供的Orca软件修改打包后的MSI,修改很简单,替换某个值就可以了.具体方法网上很多,但是这样的缺点就是每次发布MSI都要用这个工具修

Word中巧用查找替换功能制作试卷

作为教师,经常会整理一些从网上下载的资料,并制作成试卷.有一次,一位朋友从网上另存了一个试卷的网页文本,有很多手动换行符,而且有答案. 想把这个试卷让学生做一遍,当然不需要答案,还要在每个选择题的前面加上一个括号,用来让学生填上答案.如果一个个地修改,要花费很多时间.能不能想一个 办法,快速地将这些问题都解决呢?当然有办法了,用"查找/替换"功能. 把不必要的手动换行符去掉 在Word 2003中打开"查找/替换"对话框(如图1),在"查找内容"

在Word2010中文档中使用“查找”功能

如果在一篇较长的Word2010文档中包含有多处突出显示文本,则用户可以借助查找格式功能快速查找这些突出显示的文本,操作步骤如下所述: 第1步,打开Word2010文档窗口,在"开始"功能区的"编辑"分组中单击"查找"下拉三角按钮,并在"查找"下拉菜单中选择"高级查找"命令,如图1所示. 图1 选择"高级查找"命令 第2步,在打开的"查找和替换"对话框中单击"

Angularjs实现带查找筛选功能的select下拉框示例代码_AngularJS

前言 对于select的下拉列表,像国家选择这样的功能,全世界那么多国家,一直拉滚动条多辛苦,眼睛也要盯着找,累!所以为优化用户体验,带查找功能的下拉框是非常非常有必要的.都知道jquery里有这样的插件,但我们用的是Angularjs,更希望用双向绑定,指令的方式优雅地解决这个问题. 分析 我们的目标是在原来的<select ng-options="">标签上新加一个属性 select-search 就能支持查找的功能.如果这个属性没起作用,也不影响原来的select的功

Linux中文件查找方法大全_unix linux

每一种操作系统都是由成千上万个不同种类的文件所组成的.其中有系统本身自带的文件,用户自己的文件,还有共享文件等等.我们有时候经常忘记某份文件放在硬盘中的哪个地方.在微软的Windows操作系统中要查找一份文件是相当简单的事情,只要在桌面上点击"开始"-"搜索"中就能按照各种方式在本地硬盘上,局域网络,甚至在INTERNET上查找各种文件,文档. 可是使用Linux的用户就没有那么幸运了,在Linux上查找某个文件确实是一件比较麻烦的事情.毕竟在Linux中需要我们使

[剑指Offer]5.二维数组中的查找

题目 在一个二维数组中,每一行都按照从左到右递增的顺序排序,每一列都按照从上到下递增的顺序排序.请完成一个函数,输入这样的一个二维数组和一个整数,判断数组中是否含有该整数. 思路 [算法系列之三十三]杨氏矩阵 代码 /*--------------------------------------- * 日期:2015-07-19 * 作者:SJF0115 * 题目: 5.二维数组中的查找 * 网址:http://www.nowcoder.com/books/coding-interviews/a

ASP.NET 2.0 中的异步页功能应用

asp.net|异步 下载本文源代码:WickedCode0510.exe ASP.NET 2.0 提供了大量新功能,其中包括声明性数据绑定和母版页,成员和角色管理服务等.但我认为最棒的功能是异步页,接下来让我告诉您其中的原因. 当 ASP.NET 接收针对页的请求时,它从线程池中提取一个线程并将请求分配给该线程.一个普通的(或同步的)页在该请求期间保留线程,从而防止该线程用于处理其他请求.如果一个同步请求成为 I/O 绑定(例如,如果它调用一个远程 Web 服务或查询一个远程数据库,并等待调用

入门:充分利用Dreamweaver8中的查找替换技巧

dreamweaver|dreamweaver8|技巧 在网页制作过程中,也许我们会遇到这样的情况,当我们的大量网页已经完成,却发现它们都有一个共同错误需要修改.这时候不可能完全依靠手工去更改了,怎么办呢?利用Dreamweaver8中的查找替换就能帮助你快速而准确地完成修改. 大家都使用过Word等软件的查找替换功能,Dreamweaver8的查找替换功能与那些软件的查找替换的用法相似,但功能更强大.在它的查找替换对话框中甚至可以用精确的限定来控制查找过程.我们通过菜单栏-编辑-查找和替换,或