无忧启动论坛

 找回密码
 注册
搜索
系统gho:最纯净好用系统下载站广告联系 微信:wuyouceo QQ:184822951
查看: 248609|回复: 1196
打印 上一主题 下一主题

[原创] [更新(2022/11/11) ModernUI回归] explorer再见,WinXShell你好!

    [复制链接]
1#
发表于 2015-10-1 12:19:45 | 显示全部楼层
其实我也做了个类似的东西,不过有些问题没有办法解决,比如调试会造成退出奔溃(垃圾com),还有一些气泡暂时提示没有办法解决。个人觉得,微软的编程很难搞,没有linux简单,它把东西搞得很复杂。
回复

使用道具 举报

2#
发表于 2015-10-1 17:08:41 | 显示全部楼层
刚刚测试了下,感觉问题还是比较多。

点评

方便说下什么问题么?如果是文件管理器这部分, 这里一点都还没开始动,所以用了explorer++.exe,这个 也是开源项目要集成自然能也能改,其实只是初版,主要 确认了下任务栏的基础功能。  详情 回复 发表于 2015-10-1 20:21
回复

使用道具 举报

3#
发表于 2015-10-2 00:29:06 | 显示全部楼层
slore 发表于 2015-10-1 20:21
方便说下什么问题么?如果是文件管理器这部分,
这里一点都还没开始动,所以用了explorer++.exe,这个
...

托盘图标貌似还是无法枚举完全,我做的一个小托盘程序在win7也是同样没有枚举完全,xp正常枚举完全,可见win7以后的有些区别。
另外如果存在explorer,那么有问题,这个在非pe下测试是这样的 。
回复

使用道具 举报

4#
发表于 2015-10-2 01:08:07 | 显示全部楼层
slore 发表于 2015-10-1 20:21
方便说下什么问题么?如果是文件管理器这部分,
这里一点都还没开始动,所以用了explorer++.exe,这个
...

我是常规win7系统测试,有explorer下,首先它无法与默认的explorer一起工作,另外托盘并没有枚举完全。我之前也做的一个托盘程序,但是情况一样,xp问题不算大,但是win7还是有些问题的。

文件管理器工程有些大,我的感觉是,用第三方也是可以的,尽管还是无法匹敌微软自家的。完整桌面+完整文件管理器,还不如自己开发个linux桌面发行版了。我的意思,这个难度,与收获,是不太值得的,并且微软的系统,比较坑程序员,只要它升级系统,就得坑。比如上面说的,xp可以正常枚举的,win7后面的就不正常了,关键是微软并不开放源码,也不提供正常的api,网上的一些桌面多数也是通过hack所得,实现上是很难比较微软自家的,尽管微软的也不怎么样,但是hack来的总是有些小问题。

其实我认为,比较重要的是任务栏上东西,和托盘上的东西,其它都不重要,甚至连开始菜单也都不重要。但是这两件东西反而是比较难搞的。

点评

托盘图标,完全枚举,不知道你指的是哪个图标?网络?声音?,这些是explorer进程自己做的,不是其他的程序通知到托盘的,所以不会显示,需要自己实现,也比较简单,就是监控声音状态,网络状态变化而变动图标需要写  详情 回复 发表于 2015-10-2 10:10
如果PE上使用,托盘图标就那么几个,不一定要枚举,配置文件定义也行啊。  详情 回复 发表于 2015-10-2 09:58
回复

使用道具 举报

5#
发表于 2015-10-2 11:07:39 来自手机 | 显示全部楼层
sp_star 发表于 2015-10-2 09:58
如果PE上使用,托盘图标就那么几个,不一定要枚举,配置文件定义也行啊。

我发现一下重复发多了两回复。
托盘图标是动态的,并且有通知,气泡。之所以这个必要,是因为有些程序只能从这里呼出弹出,比如网络连接,qq等都是往那去的。如果不是这样,我都懒得搞这托盘,感觉托盘只不过是任务栏的一种形式多余的设计。
任务栏就容易些,即使没有很有效的方法,枚举任务窗口也是可以很准确。
回复

使用道具 举报

6#
发表于 2015-10-2 11:29:59 | 显示全部楼层
slore 发表于 2015-10-2 10:10
托盘图标,完全枚举,不知道你指的是哪个图标?网络?声音?,这些是explorer进程自己做的,不是其他的程 ...

这个任务栏和托盘实现,基本第三方shell代码都是差不多的。我也参考过好几份开源代码,个人觉得不算简单。微软的shell,也不是说最好,只是我们要跟着它屁股转,否则功能缺失。任务栏托盘,我就是用了dui来做,但是我认为还是专门独立用win32写就可以了,你用dui技术就要多增加1m以上,这还算小了。依赖是必然的,反正vc运行库都是要加的。
回复

使用道具 举报

7#
发表于 2015-10-7 15:00:38 | 显示全部楼层
请问楼主有没有编译explorer++通过?

点评

编译过了。 rem 1.下载依赖库,解压并设置环境变量: set BOOST C:\boost_1_59_0 set PANTHEIOS C:\pantheios-1.0.1-beta215 set STLSOFT=C:\stlsoft-1.9.121 rem 2.编译Visual Studio 版本对应的pantheios  详情 回复 发表于 2015-10-7 21:43
没有自己编译,readme里面提到用了3个库,需要3个环境变量,你设置了没? (我正在下载,试试编译。) - BOOST Boost installation directory (e.g. C:\Program Files (x86)\boost\boost_1_46_1). - PANTHEIOS  详情 回复 发表于 2015-10-7 19:06
回复

使用道具 举报

8#
发表于 2015-10-7 22:13:19 | 显示全部楼层
slore 发表于 2015-10-7 21:43
编译过了。

rem 1.下载依赖库,解压并设置环境变量:

我用vs2012编译不过,提示异步接口的某个类没有定义,所以我正在下载2010。那几个依赖刚下载,还没有测试。如果能把依赖干掉就好了,环境搭建很复杂,我想移植到vs2005估计不太容易。

点评

rem 3.修改explorer++代码以支持VS2012以上编译 给你的代码补丁里面,有异步接口重定义的修正啊。 +#ifdef _WIN32_WINNT_WIN8 +#define IAsyncOperation IDataObjectAsyncCapability +#define IID_IAsyncOpera  详情 回复 发表于 2015-10-7 22:51
回复

使用道具 举报

9#
发表于 2015-10-8 00:57:16 | 显示全部楼层
slore 发表于 2015-10-7 22:51
rem 3.修改explorer++代码以支持VS2012以上编译
给你的代码补丁里面,有异步接口重定义的修正啊。

在执行一个subwcrev.exe的时候就出错了,这个好像是生产版本的用的。后来下载了TortoiseSVN,但是还是过不去,生成不了version.h。

点评

subwcrev.exe?这个是什么命令,没注意。 我直接下载master分支的文件,没用版本管理。 按上面的步骤在VS2015下编译出来的。 今天太晚了,明天再弄吧。  详情 回复 发表于 2015-10-8 01:00
回复

使用道具 举报

10#
发表于 2015-10-8 02:10:13 | 显示全部楼层
slore 发表于 2015-10-8 01:00
subwcrev.exe?这个是什么命令,没注意。
我直接下载master分支的文件,没用版本管理。
按上面的步骤在V ...

我是直接下载官方源码的,不是github.
另外,关于托盘图标不全问题,可以参考下EmergeDesktop代码(不过好像sf上的代码不能直接编译)。经过我测试,它的处理比较好,即使是存在原生explorer的情况下,都不会受到什么影响,并且它可以获取到音量控制和网络强度这些win7没有正常显示出来的图标。

点评

托盘,我这里第三方应用的显示是全的,图标大小调整了,但是比较细的像素值计算不正确, 导致部分图标没有显示全的问题确认了。 下一版,打算颜色,字体,大小,自定义开始菜单项目,配置文件化, 已经大概设计出  详情 回复 发表于 2015-10-8 11:36
回复

使用道具 举报

11#
发表于 2015-10-8 17:56:44 | 显示全部楼层
slore 发表于 2015-10-8 11:36
托盘,我这里第三方应用的显示是全的,图标大小调整了,但是比较细的像素值计算不正确,
导致部分图标没 ...

我的环境是win7 64位,先灭掉ezplorer,然后开启,图标还是并没有全,但是EmergeDesktop任何时候开启都没有问题,开启的时候只需要运行核心程序和托盘程序就可以了,其它任务栏桌面等等都可以不运行。
explorer++编译通过,我在编译那个依赖的时候觉得时间太长,突然想到那只不过是日志用的,而且实在太大了。所以我直接屏蔽掉,作为发行,也可以减少一些体积。
后来我发现,好像explorer也没啥要改的,原版通过界面调整也合适了,原版就是功能太多,并且界面布局等好像不太好看,另外好像没有其它比如Q-DIR这类稳定。当然,开源的用起来更放心。现在看来,重点还是这个托盘。
回复

使用道具 举报

12#
发表于 2016-6-29 17:31:46 来自手机 | 显示全部楼层
本帖最后由 四海皆狂龙 于 2016-6-29 17:37 编辑

我最近也研究了下,发现w7下托盘的部分程序的弹窗定位偏差大,但是xp却是正常的,结果我又试了下楼主的桌面,问题依旧,不知是什么问题。

点评

你的程序是不是老程序啊。托盘点击就是把消息回调给原程序,本身没做什么事情。可能WIN7之后,再消息的高位保存了什么信息,你的程序没有正确取出低位的信息啥的吧。 这个是程序的问题,你试试改变程序兼容性。  详情 回复 发表于 2016-7-1 10:00
回复

使用道具 举报

13#
发表于 2016-7-1 19:34:32 | 显示全部楼层
slore 发表于 2016-7-1 10:00
你的程序是不是老程序啊。托盘点击就是把消息回调给原程序,本身没做什么事情。可能WIN7之后,再消息的高 ...

经过调试已经搞定。另个问题是,任务栏程序右键菜单,有些程序创建菜单失败,比如火狐。大致是从窗口句柄,获取菜单,然后创建弹窗。

点评

任务栏是有些问题,还有标题过长鼠标悬停,有时候悬浮提示会不见,主要的切换功能啥的OK就没管,最近也没有啥时间,对于维护必要的功能实现了就扔到一边做别的事了。  发表于 2016-7-2 10:16
回复

使用道具 举报

14#
发表于 2016-7-1 19:40:49 | 显示全部楼层
还有。有些程序可能调用原生explorer打开,比如vs右键打开目录,第三方shell都无法使用该功能。

点评

估计是DDE,没去跟踪发送的啥消息。快捷方式的右键属性的“打开文件所在目录”估计是一样的。1M的独立应用程序,这样已经达到我的要求了,没打算把explorer所有东西都搞定。  发表于 2016-7-2 10:19
回复

使用道具 举报

15#
发表于 2016-8-9 01:36:19 | 显示全部楼层
我想把ros explorer的文件管理器给单独弄出来,但是我发现它启动时间有点长,结果发现它枚举目录用了比较长时间,不知道你有没有解决这个问题。

点评

漏了一个缺点,用新版文件打开对话框内核要补几个系统文件。不过补充了,任务管理器,运行的浏览按钮也能用,要个稳定的文件管理器还是值得的。文件管理器这块,没有exploer++做的好。  详情 回复 发表于 2016-8-9 08:36
控制面板打算参照ros explorer的直接shell对象枚举,但是文件管理器我没用。我是用系统的文件打开对话框模拟的,速度,稳定性没的说,还有便利的导航。小细节不足目前有3点,1:没有状态栏,目录信息,文件大小啥的要  详情 回复 发表于 2016-8-9 08:20
楼主的这个项目貌似就是基于ROS Explorer的 但上次用了新版,觉得还很流畅的 虽然我对这个Shell并不感兴趣;但还是得说这是个不错的项目  详情 回复 发表于 2016-8-9 05:03
回复

使用道具 举报

16#
发表于 2016-8-9 08:47:06 来自手机 | 显示全部楼层
Mouri_Naruto 发表于 2016-8-9 05:03
楼主的这个项目貌似就是基于ROS Explorer的

但上次用了新版,觉得还很流畅的

我不是做一样的东西,我把文件管理器弄出来,纯粹是为了配合我的高速文件搜索器使用,其它功能全部移除。最终效率低下的树视图也要移除。
回复

使用道具 举报

17#
发表于 2016-8-9 08:50:42 来自手机 | 显示全部楼层
slore 发表于 2016-8-9 08:36
漏了一个缺点,用新版文件打开对话框内核要补几个系统文件。不过补充了,任务管理器,运行的浏览按钮也能 ...

我觉得explorer++不是太好,没有qdir好,。不过我目前只是要个简单的文件管理器,可能不需要非常强大的。
回复

使用道具 举报

18#
发表于 2016-8-9 09:01:05 来自手机 | 显示全部楼层
slore 发表于 2016-8-9 08:41
谢谢支持,个人也是用cmd的多。少用shell。2004年如果就有人开始这个项目就好了,有段无shell时期。现在 ...

我倒是觉得原生shell是不适合pe使用的,因为原生shell的特性修改依赖系统内部存储,所以修改那些特性都要用很复杂的方法,比如修改注册表,给注册表拍照等等,登陆时候又恢复进去,或者再次固化到wim,是非常不合理的方法。为什么这么不合理的方法还有人用,我认为是惯性问题。

点评

原生资源管理器 习惯是一方面 还有就是功能完善 虽然制作起来麻烦 别人研究难度也大 付出总会有回报的  详情 回复 发表于 2016-8-12 07:31
回复

使用道具 举报

19#
发表于 2016-8-11 14:27:11 来自手机 | 显示全部楼层
发现剥离也挺难,本以为直接删除左树视图就搞定,没想到左右视图耦合很强,右视图比较依赖左视图,另外它并没有处理右视图打开文件夹问题,结果它直接调用了默认的文件管理器打开。

点评

终于还是扣出来了,只有一个列表视图,不过发现zip右键上下文菜单弹不出来,原版就有这毛病。控制面板另外自己写了个,但只能取得中图标。  详情 回复 发表于 2016-8-13 17:04
回复

使用道具 举报

20#
发表于 2016-8-13 17:04:18 | 显示全部楼层
四海皆狂龙 发表于 2016-8-11 14:27
发现剥离也挺难,本以为直接删除左树视图就搞定,没想到左右视图耦合很强,右视图比较依赖左视图,另外它并 ...

终于还是扣出来了,只有一个列表视图,不过发现zip右键上下文菜单弹不出来,原版就有这毛病。控制面板另外自己写了个,但只能取得中图标。

点评

我调用系统的菜单好着呢。ZIP的工具x64,x86版本不对? ros的本身控制面板枚举出来了啊。command和属性都可以看到的。  详情 回复 发表于 2016-8-13 17:17
回复

使用道具 举报

21#
发表于 2016-8-13 17:13:36 | 显示全部楼层
wimboot 发表于 2016-8-12 07:31
原生资源管理器 习惯是一方面 还有就是功能完善 虽然制作起来麻烦 别人研究难度也大 付出总会有回报的

功能是微软给出的,因为功能强耦合,第三只能套它的。但就人性化来说,第三方肯定可以比微软做得好,但是微软的编程难度大,并且接口可能不公开,所以第三方要做得比它少问题,还是比较难的。

点评

我是支持第三方桌面 只是功能视觉效果等差太多 只能观望了  详情 回复 发表于 2016-8-13 17:24
回复

使用道具 举报

22#
发表于 2016-8-13 17:38:04 | 显示全部楼层
slore 发表于 2016-8-13 17:17
我调用系统的菜单好着呢。ZIP的工具x64,x86版本不对?
ros的本身控制面板枚举出来了啊。command和属性都 ...

文件视图右键上下文菜单,zip类型文件,弹不出来,后来我试了下原版,也试了下你较早改的,也弹不出来,感觉比较奇怪。
回复

使用道具 举报

23#
发表于 2016-8-13 17:49:26 来自手机 | 显示全部楼层
wimboot 发表于 2016-8-13 17:24
我是支持第三方桌面 只是功能视觉效果等差太多 只能观望了

我想说句实在话。我的观点是,微软做不出好用的东西,只能做出功能方面的东西,这里说的好用指的是人性化方面。不信你看看微软为自己开发的还是为他家(安卓)开发的软件,使用都比较反人类(那些说好的更多的是信仰问题),非常复杂,其实好用的工具无一不是第三方开发的,除非微软垄断了某些软件。windows写程序最大问题是,如果微软把功能自己包了,而微软又不怎么开放这些编程方法,那么第三方写功能就麻烦,并且微软有一套com是核心,这种只有少数人懂的东西。有些程序右键用文件管理器打开的,是直接与他家东西挂钩的,当然还有各种ie集成,所以有它的桌面就必须挂钩上它的其它,否则有些功能出不来。
回复

使用道具 举报

24#
发表于 2016-8-13 18:15:22 来自手机 | 显示全部楼层
slore 发表于 2016-8-13 17:17
我调用系统的菜单好着呢。ZIP的工具x64,x86版本不对?
ros的本身控制面板枚举出来了啊。command和属性都 ...

下载你最新的测试,原来你调用了系统的文件管理器打开,而不是另外做一个。
回复

使用道具 举报

25#
发表于 2016-8-13 18:34:52 来自手机 | 显示全部楼层
slore 发表于 2016-8-13 17:36
对于有PE制作经验,自己一直积累了需要添加的文件,注册表时,自己花时间做原生explorer没问题,自己整理 ...

我认为应该推广第三方shell,而不是微软的。弄个桌面,定义些东西,还要修改注册表,对照注册表,然后重新打包pe,开机又重新导入,即使是老手也会感觉这方法异常繁琐,不科学。而对于非老手,那就更无从下手了。微软都把注册表当文件系统用了,xp时代还没那么严重,w7连图标作为二进制都藏注册表,这是难以理解的,普通用户看不到不会觉得怎样,但是开发者感觉是微软又给我们发难了。要说微软文件管理器,也没多了不起,搜索就是公认的渣渣,但是通常又不能不用,因为没有多大选择。
回复

使用道具 举报

26#
发表于 2017-8-21 08:32:37 | 显示全部楼层
我最近在完善我的文件管理器,但是发现一些快捷键例如delete和选择所有文件均无效(以及explorer select,x方法还没搞清楚如何模拟处理,因不知道如何选择文件),所以我试了下你的桌面,发现你处理了delete按键, 不知道楼主是在iShellView的什么地方处理的,以及选择文件是否有思路。

点评

哦,看了下我用的基本代码封装了个消息处理,确实自己处理了。 当接收到WM_KEYDOWN等消息是,pretranslate_msg,给各个窗口,看是否有热键响应。 if (hwnd) { int rc = TranslateAccelerat  详情 回复 发表于 2017-8-21 13:37
桌面热键的话,好像只有F5处理了。 直接可以delete吧,我回头再看看。 选中文件的话,获取父的文件夹FolderView对象,然后调用SelectItem方法就可以了。 HRESULT _stdcall IFolderView::SelectItem(int iItem  详情 回复 发表于 2017-8-21 13:12
回复

使用道具 举报

27#
发表于 2017-8-26 08:57:27 来自手机 | 显示全部楼层
slore 发表于 2017-8-21 13:12
桌面热键的话,好像只有F5处理了。
直接可以delete吧,我回头再看看。


开始我也看到有个selectitem,但是当时不知道如何玩,你这么一说,我才想到pidl这东西(微软的pidl真够费解的),枚举每个子pidl可以选择所有组。
回复

使用道具 举报

28#
发表于 2017-8-26 19:42:20 | 显示全部楼层
slore 发表于 2017-8-21 13:12
桌面热键的话,好像只有F5处理了。
直接可以delete吧,我回头再看看。

我对这个枚举还是不太理解,按说法BindToObject绑定到父pidl,而这里有两个IShellFolder,使用一个IShellFolder的EnumObjects进行枚举?搞不懂,怎么我枚举总是从桌面开始,然后就连接到当前目录去了。说实在的,我一直不理解微软这个设计的机制。
回复

使用道具 举报

29#
发表于 2017-8-26 21:00:04 | 显示全部楼层
我发现一个问题,使用选择组后,并不能自动滚动到那个文件的位置,不知道它如何实现选择并滚动到具体位置的。
回复

使用道具 举报

30#
发表于 2017-8-27 08:31:30 来自手机 | 显示全部楼层
slore 发表于 2017-8-21 13:37
哦,看了下我用的基本代码封装了个消息处理,确实自己处理了。

当接收到WM_KEYDOWN等消息是,pretrans ...

这个方法不错,快捷键问题解决,现在还差了文件选择定位问题。
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 注册

本版积分规则

小黑屋|手机版|Archiver|捐助支持|无忧启动 ( 闽ICP备05002490号-1 )

闽公网安备 35020302032614号

GMT+8, 2024-5-22 08:48

Powered by Discuz! X3.3

© 2001-2017 Comsenz Inc.

快速回复 返回顶部 返回列表