硬盘里有不少代码项目,是从远程服务器上克隆下来的,时间长了以后,有时候想看一下远端到底是哪一个,还得打开命令行,再执行 git 命令查看。觉得有点繁琐,于是就想写个简单的资源管理器扩展把这事做了。
跟 Grok 聊了一会儿,它出来个实现,用电脑里多时不用的 Visual Studio 2019 编译成功,DLL 都生成了,可是就是没办法成功注册。用 dumpbin
查看,惊到了:这个 DLL 连一个导出函数都没,怪不得 regsvr32.exe
完不成。可是一直看项目的设置之类的,由于老夫对 Windows 的知识已经年久失修,又是 C# 实现而非那种原地手搓的 C++ 代码,多多少少是搞不大清楚具体原因了。
放了几天,昨晚无意中发现另一个线索,网上有个同类型的示例,其中说 .net 模块注册要用 regasm.exe
,不由得心有所感,跑到命令行下如此这般一番,果然奏效。有趣的是,把那个提供信息的项目下载下来测试了一下,反倒不行,出了个错。等有空了再看看。两个项目有所不同,Grok 帮着生成的那个依赖了 SharpShell 这个三方库,同时运行时也会有个 DLL 需要依赖着,而后一个示例代码虽说也是 C# 的,但是除一些 Windows API 相关的数据结构、接口、常量等的定义之外,接近于无累赘的依赖。
当然,真等有空(且有心情)的时候,还是用 ATL 搞一个实现比较合意。
SharpShell 是一个持续有年头的老牌三方库了,他们自己曾在 codeproject.com 站点上写过介绍文章,.NET Shell Extensions – Shell Context Menus。顺便说一句,今年年初的时候,发现 codeproject.com 竟然不能访问了,网上搜了一下,有人说从 2024 年的 10 月份就停摆了,颇是感叹了一番。没想到这段时间又上线了,似乎是以一种只读的模式。国内的天涯论坛如果也能如此结果就更好了。
为文件夹增加关联菜单项的时候,场景上除了直接在位于父文件夹视图里的文件夹所在条目上点击右键,还有就是进入到目标文件夹后,在其中不属于任何条目的空白区域的右键点击操作。后者的支持在 SharpShell 不是那么的直接,网上也有所讨论。stackoverflow 里的帖子如这篇,Create a Shell ContextMenu by right clicking on Desktop or Directory Background;官方仓库的相关 issue 中也有讨论,且也有人提到了前面的帖子。