无忧启动论坛

标题: [原创]把PETools放到 搜索 菜单 [打印本页]

作者: slore    时间: 2010-3-25 05:06
标题: [原创]把PETools放到 搜索 菜单
[原创]把PETools放到搜索菜单
菜单截图:


运行效果:


如何DIY自己的工具菜单

写了个通用的DLL文件,你可以加入自己的菜单,执行自己要
运行的命令!

用任意一款资源编辑器打开PETFIND.DLL
如图看到:
REGISTRY 101 资源



HKCR
{
        PETSearch.PETSearch.1 = s 'PETSearch Class'
        {
                CLSID = s '{977DA8D2-41D5-11D2-BC00-AC6805C10E27}'
        }
        PETSearch.PETSearch = s 'PETSearch Class'
        {
                CurVer = s 'PETSearch.PETSearch.1'
        }
        NoRemove CLSID
        {
                ForceRemove {977DA8D2-41D5-11D2-BC00-AC6805C10E27} = s 'PETSearch Class'
                {
                        ProgID = s 'Process.Process.1'
                        VersionIndependentProgID = s 'PETSearch.PETSearch'
                        ForceRemove 'Programmable'
                        InprocServer32 = s '%MODULE%'
                        {
                                val ThreadingModel = s 'Apartment'
                        }
                }
        }
}

HKLM
{ Software
  { Microsoft
    { Windows
          { CurrentVersion
            { Explorer
                  { FindExtensions
                    { Static
                      { PETSearch = s '{977DA8D2-41D5-11D2-BC00-AC6805C10E27}'
                        {
                                  0 = s '外置程序到 程序(&P)'
                                  {
                                        DefaultIcon = s '%MODULE%,0'
                                  }
                                }
                  }
            }
          }
        }
      }
    }
  }
}

HKLM
{ Software
  { Microsoft
    { Windows
          { CurrentVersion
            { Explorer
                  { FindExtensions
                    { Static
                      { PETSearch = s '{977DA8D2-41D5-11D2-BC00-AC6805C10E27}'
                        {
                                  1 = s '外置程序到 桌面(&D)'
                                  {
                                        DefaultIcon = s '%MODULE%,0'
                                  }
                                }
                  }
            }
          }
        }
      }
    }
  }
}


将蓝色部分复制,然后将红色的部分菜单ID向后累加,后面是菜单显示的字符串。
DefaultIcon都知道吧?设置默认的图标。

%MODULE%表示DLL本身,你也可以指向其他包含图标的文件。

菜单做好了,我们来关联执行命令。

转到字符串资源可以看到:
STRINGTABLE
LANGUAGE 4, 2
{
100, "ProcFind"
201, "CLINK.CMD"
202, "DLINK.CMD"
}

//这里的CLINK.CMD是一个搜索PETools的脚本。

201是 菜单ID为0执行的命令。
202是 菜单ID为1执行的命令。
依次类推。。。
比如:
203,"ELINK.CMD"


是不是很简单呢?你要是有好看的图标和准确菜单名记得告诉我。
修改好自己的菜单,图标,关联命令后放入PE中,执行
Regsvr32 /S PETFIND.DLL
即可看到菜单。

我是在PECMD.INI加入
EXEC ^!REGSVR32 /S %WS%\PETFind.dll
放到Shel后,估计放到前面注册也应该能显示。



PS:这不是什么很重要的Patch,可以说不要也行。
   36KB(未压缩)自己要不要集成由自己决定吧。





(想到一个可以把外置程序放到 程序 和 文档 菜单中间一个单独的菜单,特殊的文件夹
中,不过...如果是维护盘倒是无所谓利用了不用的东西罢了,要是带网络有点点冲突了。)


[ 本帖最后由 slore 于 2010-3-25 05:09 编辑 ]

PETFIND.rar

10.98 KB, 下载次数: 363, 下载积分: 无忧币 -2

PETFIND.DLL


作者: 坏小子    时间: 2010-3-25 06:15
楼主太有创意!佩服…
作者: dlwfdlikuan    时间: 2010-3-25 06:27
实用性较强,很好!
作者: benny3848hk    时间: 2010-3-25 06:42
创意不错,试一下...........
作者: bluetooth    时间: 2010-3-25 08:02
很好的创意,谢谢分享。
作者: dvd008    时间: 2010-3-25 08:16
自己写dll ?专业选手 !
作者: suoguo88    时间: 2010-3-25 09:03
向高手致敬,太有才了,历害啊
作者: caomaoLBL    时间: 2010-3-25 09:07
原来slore是个纯高手!收下。
作者: wang6610    时间: 2010-3-25 09:10
dos联盟的纯高手。。。。
作者: cmdy268    时间: 2010-3-25 09:44
楼主太有才了,收下
作者: NicTense    时间: 2010-3-25 10:51
很不错,有一点更正一下

原帖由 slore 于 2010-3-25 05:06 发表
我是在PECMD.INI加入
EXEC ^!REGSVR32 /S %WS%\PETFind.dll



这个 ^! 只有在TangoPE的更新程序里面需要这样用

其他地方的pecmd.ini,这里别加 ^


我觉得有一种办法应该可以不用dll,修改explorer.exe的menu资源项可以自行调换增加开始菜单和子菜单

这里要加上一个菜单是很容易的,系统在启动的时候对指定编号的字符串进行替换,只要找到这个替换的位置,修改一下,就可以了


ps:草帽需要资料看这里:http://delphi.sharpplus.com/Delphi_Old/SearchExt.htm

[ 本帖最后由 NicTense 于 2010-3-25 11:58 编辑 ]
作者: NicTense    时间: 2010-3-25 13:06
原帖由 zhxy9804 于 2010-3-25 13:04 发表
我想问一下,gif是用什么软件制作的啊?

gif录制FISHCAP.rar (21.42 KB, 下载次数: 89) GIF动画录制.rar (129.62 KB, 下载次数: 87)
作者: caomaoLBL    时间: 2010-3-25 13:07
原帖由 zhxy9804 于 2010-3-25 13:04 发表
我想问一下,gif是用什么软件制作的啊?

ggg  dos版版主告诉我的!

下载:
GIF动画录制.rar (129.97 KB, 下载次数: 72)
作者: caomaoLBL    时间: 2010-3-25 13:10
标题: 回复 #11 NicTense 的帖子
谢天使 我看看啊, 不一定弄的明白,基础知识很差!
作者: NicTense    时间: 2010-3-25 13:19
原帖由 caomaoLBL 于 2010-3-25 13:10 发表
谢天使 我看看啊, 不一定弄的明白,基础知识很差!


其实简单的dll或者exe写起来可能比批处理还容易,主要是编程环境不一样而已
像delphi,vb那些有很多现成的函数可以用,一些小软件纯粹就是调用2个函数而已
不过如果是像vc,或者汇编类的就比较麻烦了
作者: slore    时间: 2010-3-25 13:20
原帖由 NicTense 于 2010-3-25 10:51 发表
很不错,有一点更正一下




这个 ^! 只有在TangoPE的更新程序里面需要这样用

其他地方的pecmd.ini,这里别加 ^


我觉得有一种办法应该可以不用dll,修改explorer.exe的menu资源项可以自行调换增加 ...


菜单改注册表就可以有。。。关键是相应事件。。。执行自己的命令。

那个文章也说了


注册一个静态扩展
    这种扩展通常对于比较小的DLL(动态连接库)比较有效,因为它可以加载得很快,并且不占用内存。另外如果你用DHTML实现扩展也必须是静态的,注册方式:创建一个子键FindExtensions subkey,名字不能被别的扩展使用,也不能同其他搜索扩展同名。
    上下文相关的扩展的注册需要设定Name子键,缺省值为自己的类标示符(CLSID GUID),在Name子键下创建一个子键0, 然后设定它的缺省值为想要显示在查找菜单中的名字。你还可以通过在字符串中加入&符号实现快捷方式。另外还可以在0键下建立一个DefaultIcon子键来指定要显示在菜单右边的图标。设定值为包含图标的文件名全称,并用逗号隔开,跟着一个以0为底的图标索引值。
    下面的例子注册了一个MySearchEngine搜索扩展,菜单项文本为"My Search Engine",图标在C:\MyDir\MySearch.dll中,其索引值为2。



还是要个DLL的。
作者: slore    时间: 2010-3-25 13:21
原帖由 zhxy9804 于 2010-3-25 13:04 发表
我想问一下,gif是用什么软件制作的啊?



没看到任务栏 GIF.GIF.GIF呀。
作者: NicTense    时间: 2010-3-25 13:25
原帖由 slore 于 2010-3-25 13:20 发表


菜单改注册表就可以有。。。关键是相应事件。。。执行自己的命令。

那个文章也说了


注册一个静态扩展
    这种扩展通常对于比较小的DLL(动态连接库)比较有效,因为它可以加载得很快,并且不占用内 ...



explorer.exe的菜单机制应该是不一样的,findextentions应该只是这个菜单的一个特定的菜单

也就是说,如果通过explorer的菜单项加进去的,应该是不经过findextentions处理的,而是由系统的某个命令来执行字符替换,指定操作


对了,请教一下
CLSID GUID
这个根据什么得出来的,乱指定一个?
作者: slore    时间: 2010-3-25 13:28
全球唯一标示符

有GUI生成器
作者: fukystone    时间: 2010-3-26 08:12
谢谢分享,这个好玩。高手啊
作者: sglhz    时间: 2010-3-26 08:52
革命性的东西,还是要学习一下
作者: qyxbx    时间: 2010-3-26 09:23
这个好像很好玩 先收藏一下
作者: 尽善尽美    时间: 2010-3-26 09:31
这个很强大很好的创意!!顶了!!
作者: 270797162    时间: 2010-3-26 10:36
下载收藏了,谢谢楼主。
作者: wama    时间: 2010-3-26 13:34
楼主很了得,学习了。
作者: NicTense    时间: 2010-3-28 00:13
哈哈,测试成功,powerbasic第一个程序献给这个功能了,用一行代码实现了,一行代码编译完竟然还要9k,晕阿
作者: slore    时间: 2010-3-28 00:30
原帖由 NicTense 于 2010-3-28 00:13 发表
哈哈,测试成功,powerbasic第一个程序献给这个功能了,用一行代码实现了,一行代码编译完竟然还要9k,晕阿


呵呵,难道要我去用汇编写=。=

好呀,起码没白看半天PB。。。
搞好了就传上来看看。


算是抛砖引玉啦,多花点时间搞下内核呗。。。
作者: NicTense    时间: 2010-3-28 00:57
原帖由 slore 于 2010-3-28 00:30 发表


呵呵,难道要我去用汇编写=。=

好呀,起码没白看半天PB。。。
搞好了就传上来看看。


算是抛砖引玉啦,多花点时间搞下内核呗。。。


呵呵,你说pb,都会认为是power builder的

我看了半天都还没弄清楚那些变量的表示方法,貌似跟vb不太一样

我只写了一个 shell "petools.cmd" 语句而已,注册表项内置进shell32.dll,替换原来写搜索计算机的那项,删除搜索internet的那项,体积还缩小了,也不用注册了

然后测试了一下,我把petools.cmd的内容改成 start notepad.exe

然后点了一下 搜索那里的 petools外置程序,记事本弹出来了,证明方法正确了就可以了,这个放出来没啥用,我没搞定制

先继续研究powerbasic的语法,顺带休息几天

内核没啥搞的了,现有的功能基本上都完善了,驱动等n版方案出来再合并

[ 本帖最后由 NicTense 于 2010-3-28 01:08 编辑 ]
作者: Plantsoot    时间: 2010-3-28 09:32
呵呵,跟我的Udhelper其中的一项功能类似,只不过,不知道楼主大大,
用你的创建菜单,是全部加载到内存了,还是按需加载?
作者: NicTense    时间: 2010-3-28 13:13
哈哈,刚才重新试了一下,貌似被我搞成神经兮兮的了

点一下,执行程序
关掉,再点没反应
从此之后,打开或关闭任何一个程序,或者刷新shell就出来了

貌似我弄错地方了,是不应该放入dllmain还是需要加一个按键判断呢
作者: slore    时间: 2010-3-28 22:08
原帖由 Plantsoot 于 2010-3-28 09:32 发表
呵呵,跟我的Udhelper其中的一项功能类似,只不过,不知道楼主大大,
用你的创建菜单,是全部加载到内存了,还是按需加载?


需要加载的时候用
regsvr32命令注册下就是了。


To:
天使,利用系统的很好,我最初就是想用打开IE的,你们都删除我想利用下,苦于一直
没有找到=。=所以才自己写DLL了。
作者: 寻星0236    时间: 2010-3-28 22:50
这个方法很不错呀,谢谢了
作者: 一剑忠情    时间: 2010-3-29 10:39
谢谢分享,努力学习中
作者: wama    时间: 2010-3-30 14:31
為何在"外置程序到 程序" & " 外置程序到 桌面"按下沒有反應的?
作者: slore    时间: 2010-3-30 15:02
你在system32(环境变量Path存在的目录都可以)放一个CLINK.CMD

内容:
notpead.exe

就会打开一个记事本程序。

在CLINK.CMD里面写上对应PETOOLS的命令才能有效果
作者: 胖因斯坦    时间: 2010-3-30 17:33
正好需要,感谢slore大侠分享经典创意,本人菜鸟按大侠教程已安装成功,效果很酷,在此深表感谢
作者: asionwu    时间: 2010-3-30 23:25
感觉怪怪的,试试吧.
作者: 莫非    时间: 2010-3-31 00:39
支持一下,有了这个方便多了。
作者: 六戒    时间: 2010-3-31 14:13
太有才了,学习了,谢谢分享,
作者: wama    时间: 2010-3-31 17:56
我已照着楼主在#36楼的指示做,但仍然无反应,楼主可否给个在#1楼的范例文件,以便测试及学习,谢谢楼主分享。
作者: lxl1638    时间: 2010-3-31 19:10
无忧又多了一个高脚,将PETools的功能集成进去可能会更好更高效,
或者做成EXE文件(不采用DLL方式)可能会省些内存,也可能使文件的体积更小。

不能楼主这个DLL是作什么编的,按这样的功能(一个搜索扩展 + 一个执行PETools的功能)做成DLL,应该在8K至16K的范围内就可以实现。

WimTool工具组也带一个DLL(WimShext.DLL),集成了三个外壳扩展(外壳菜单、外壳图标、外壳执行),还有BASE64编码/解码、图标解码/ICO_DTAT to HICON、WIM的常用功能及注册这个DLL的4个导出函数(其中两个是默认函数,三个外壳扩展可以用参数指定注册或卸载),24K左右就实现了(三个外壳扩展共用一个CLSID GUID)。
作者: slore    时间: 2010-3-31 20:45
原帖由 lxl1638 于 2010-3-31 19:10 发表
无忧又多了一个高脚,将PETools的功能集成进去可能会更好更高效,
或者做成EXE文件(不采用DLL方式)可能会省些内存,也可能使文件的体积更小。

不能楼主这个DLL是作什么编的,按这样的功能(一个搜索扩展 + 一 ...


VC写了个空的也得32KB。。。我也很郁闷。不知道怎么做能小,已经用了最小依赖方式编译,
debug的话200多KB。

PETools大家写的可能不一样,有的喜欢放菜单顶,有的喜欢放到程序中?
也许想搜索别的东西,所以写出来可以按自己需要做,不想写死。

就是VC的ATL架子加了个3,4行通过ID执行字符串资源的ShellExecute
如果要源码的可以PM下我,我改天发过去,没在现在的电脑上。

[ 本帖最后由 slore 于 2010-3-31 20:47 编辑 ]
作者: slore    时间: 2010-3-31 20:46
原帖由 wama 于 2010-3-31 17:56 发表
我已照着楼主在#36楼的指示做,但仍然无反应,楼主可否给个在#1楼的范例文件,以便测试及学习,谢谢楼主分享。


CLINK.CMD
内容为:
notepad.exe


放到system32下。。。


你执行菜单没有运行记事本程序麽?
已经有人成功了呀.
作者: wama    时间: 2010-4-1 12:31
我其實是想好像你在#1楼的范例一樣,加載PETools的,但連notepad.exe也試了,還是不成功,
希望楼主指點及發個範例文件給我學習,謝謝!
作者: slore    时间: 2010-4-1 12:50
原帖由 wama 于 2010-4-1 12:31 发表
我其實是想好像你在#1楼的范例一樣,加載PETools的,但連notepad.exe也試了,還是不成功,
希望楼主指點及發個範例文件給我學習,謝謝!



如果notepad不成功,加什么也一样。。。
你在你当前系统注册下看看有没有效果。
你用的PE是哪个?


那个范例是
请试试 #463 haiou327 版主提供的 PETOOLS 补丁
作者: NicTense    时间: 2010-4-1 14:44
原帖由 lxl1638 于 2010-3-31 19:10 发表
无忧又多了一个高脚,将PETools的功能集成进去可能会更好更高效,
或者做成EXE文件(不采用DLL方式)可能会省些内存,也可能使文件的体积更小。

不能楼主这个DLL是作什么编的,按这样的功能(一个搜索扩展 + 一 ...


老实说,一直觉得老九每个回帖都让人摸不着头脑

高脚是褒奖,还是讽刺?

说wimtool的优秀,如果是为了给人作为参考的范例,提高大家的编程技巧,那么应该把外壳扩展相关的这段代码公布出来,要不说了也白说

如果是为了炫耀,貌似没这个必要,无忧没人怀疑你的编程水平

所以说。。。完全不知道你到底要说什么

[ 本帖最后由 NicTense 于 2010-4-1 14:55 编辑 ]
作者: NicTense    时间: 2010-4-1 18:44
@slore

核心句子是不是就是给
IContextMenu.InvokeCommand
指定执行的命令,例如pelink.cmd

好象网上都是用vc或者delphi来做这个事情,找个vb的都没有,更别说pb了,我都不知道怎么声明对象为IContextMenu了。。。。
作者: slore    时间: 2010-4-1 20:29
加个壳可能就10KB左右了,反正压到内核所以我就不管这20KB,加壳压缩率比较低,不加的话压缩率高点点。

你说对了,就是VC建立一个ATL板子,然后:

HRESULT CPETSearch::InvokeCommand( LPCMINVOKECOMMANDINFO lpcmi )
{
        long ret;
        char RunCommand[255];
        ret = DWORD(lpcmi->lpVerb);
        ret = LoadString(_Module.m_hInst,IDS_COMMAND1 + ret,RunCommand,256);
        if (ret > 0) ShellExecute(NULL,NULL,RunCommand,NULL,NULL,SW_HIDE);
        return S_OK;
}

代码简单吧?
LoadString就是读取字符串资源
然后ShellExecute调用下就完了,我看了系统的,REGINST,注册是INF格式,是自己处理的,不是一般的RGS自动注册。


主要VC建立一个空的也32KB所以我也没辙,只知道不用Debug生成会小很多。
作者: NicTense    时间: 2010-4-1 20:36
原帖由 slore 于 2010-4-1 20:29 发表
加个壳可能就10KB左右了,反正压到内核所以我就不管这20KB,加壳压缩率比较低,不加的话压缩率高点点。

你说对了,就是VC建立一个ATL板子,然后:

HRESULT CPETSearch::InvokeCommand( LPCMINVOKECOMMAND ...


代码我知道很简单,我上次弄的那个9kb,但是那个不能用,因为我把代码写到dllmain去了,导致很严重的后果,乱响应

下午看到这个又想起这个事情,去网上搜了半天,还是不知道pb里怎么定义IContextMenu.InvokeCommand

。。。。。。。。

你的编译方法估计有问题,cnad写的那个usbfix才5k,好象就是vc写的吧

vc的hello,world应该就3,4k吧

你是不是用的模板建立的dll,本身调用了一大堆用不着的库文件

[ 本帖最后由 NicTense 于 2010-4-1 20:42 编辑 ]
作者: slore    时间: 2010-4-1 20:56
EXE我知道能小。写了个截图的也就3KB

DLL实在不清楚。


usbfix也加壳了,不过不加也挺小,第四版都10多天了还没更新。。。


打开
VC,选第一个ATL COM AppWizard

然后选动态链接库 确定。

CLASS右键新建ATL。。。写个类名,然后用MinDependency方式编译。。。就32KB

我知道用什么可以清除多余的东西。
作者: NicTense    时间: 2010-4-1 21:51
原帖由 slore 于 2010-4-1 20:56 发表
EXE我知道能小。写了个截图的也就3KB

DLL实在不清楚。


usbfix也加壳了,不过不加也挺小,第四版都10多天了还没更新。。。


打开
VC,选第一个ATL COM AppWizard

然后选动态链接库 确定。

CL ...


那就没错了,看样子你也是很久没编程了,不过比我好很多,我基本上已经彻底忘光了,从头学起了

我现在知道为什么高手编程都用 ultraedit,notepad之类的文本编辑器了,就是因为不要那些自动加入的垃圾代码
作者: papago    时间: 2017-10-8 17:26
学习一下外置程序petools!




欢迎光临 无忧启动论坛 (http://bbs.c3.wuyou.net/) Powered by Discuz! X3.3