无忧启动论坛

 找回密码
 注册
搜索

搞一个右键菜单“打开xxx并关闭当前资源管理器(已解决)

查看数: 7758 | 评论数: 57 | 收藏 3
关灯 | 提示:支持键盘翻页<-左 右->
    组图打开中,请稍候......
发布时间: 2022-11-14 16:12

正文摘要:

本帖最后由 窄口牛 于 2022-11-30 21:09 编辑 打开有关联的文件或者exe等可执行文件,然后关闭资源管理器 是不是很有用?

回复

527104427 发表于 2022-11-30 21:02:14
本帖最后由 527104427 于 2022-11-30 21:07 编辑
窄口牛 发表于 2022-11-30 20:59
可能是因为我explorer(桌面)和资源管理器是两个进程?

再试一下:

        set^ EnviMode=1
        set^ ForceLocal=1

        //多开
        REGI $HKCR\*\shell\Locate\\=定位
        REGI $HKCR\*\shell\Locate\\Icon=explorer.exe,0
        REGI $HKCR\*\shell\Locate\Command\\=explorer.exe /n,/select,"%%1"
        REGI $HKCR\Directory\shell\Locate\\=定位
        REGI $HKCR\Directory\shell\Locate\\Icon=explorer.exe
        REGI $HKCR\Directory\shell\Locate\command\\=explorer.exe "%%1"

        //复制路径
        set commandline="%MyName%" team set^ EnviMode=1| set^ ForceLocal=1 | set$ nl=0d 0a| fdir --fullfile --long a="%%1"| fdir --fullfile --short b="%%1"| fdir --fullfile --volume c="%%1"| fdir --fullfile --part d="%%1"| fdrv e=%%%%d%%%%| sed -ex f=0,[^0-9], ,e| mstr * g,h=<1*>f| sed -ex i=1,\\Harddisk%%%%g%%%%Partition%%%%h%%%%\\,\\GLOBALROOT\\device\\harddisk%%%%g%%%%\\partition%%%%h%%%%\\,d| find *<>a, set< a=%%%%nl%%%%| find *<>b, set< b=%%%%nl%%%%| find *<>c, set< c=%%%%nl%%%%| find *<>d, set< d=%%%%nl%%%%| find *<>i, set< i=%%%%nl%%%%| set^ Clipboard=%%%%a%%%%%%%%b%%%%%%%%c%%%%%%%%d%%%%%%%%i%%%%
        REGI $HKCR\*\shell\CopyPaths\\=复制路径(多行)
        REGI $HKCR\*\shell\CopyPaths\\Icon=explorer.exe,0
        REGI $HKCR\*\shell\CopyPaths\Command\\=%commandline%
        REGI $HKCR\Directory\shell\CopyPaths\\=复制路径(多行)
        REGI $HKCR\Directory\shell\CopyPaths\\Icon=explorer.exe,0
        REGI $HKCR\Directory\shell\CopyPaths\command\\=%commandline%

        //结束进程
        set commandline="%MyName%" team set^ EnviMode=1| set^ ForceLocal=1| find --pid*@ a,| set b=%%1| lpos* * * ,*c=b,,a| ifex $%%%%c%%%%>0, forx *v c,d, team~ read -*,%%%%d%%%%,e,a~ mstr* * f=<1>e~ kill *force *%%%%f%%%%
        REGI $HKCR\*\shell\KillApps\\=结束进程(多个)
        REGI $HKCR\*\shell\KillApps\\Icon=taskmgr.exe,0
        REGI $HKCR\*\shell\KillApps\Command\\=%commandline%

        //关闭所在目录
        set commandline="%MyName%" team set^ EnviMode=1| set^ ForceLocal=1| set$ nl=0d 0a| fdir --full a="%%1"| mstr * -delims:\ b=<-1>a| find --class:CabinetWClass --wid@ c,%%%%b%%%%| find --class:CabinetWClass --wid@ d,%%%%a%%%%| set< c=%%%%nl%%%%%%%%d%%%%| forx *nl c,e, team~ mstr* * f=<2>e~ ifex $%%%%f%%%%>0, set @@postmsg=%%%%f%%%%;0x0010;0;0
        REGI $HKCR\*\shell\CloseWindow\\=关闭所在目录(多个)
        REGI $HKCR\*\shell\CloseWindow\\Icon=taskmgr.exe,0
        REGI $HKCR\*\shell\CloseWindow\Command\\=%commandline%
        REGI $HKCR\Directory\shell\CloseWindow\\=关闭所在目录(多个)
        REGI $HKCR\Directory\shell\CloseWindow\\Icon=taskmgr.exe,0
        REGI $HKCR\Directory\shell\CloseWindow\command\\=%commandline%

        //打开后关闭所在目录
        set commandline="%MyName%" team set^ EnviMode=1| set^ ForceLocal=1| set$ nl=0d 0a| exec $"%%1"| fdir --full a="%%1"| mstr * -delims:\ b=<-1>a| find --class:CabinetWClass --wid@ c,%%%%b%%%%| find --class:CabinetWClass --wid@ d,%%%%a%%%%| set< c=%%%%nl%%%%%%%%d%%%%| forx *nl c,e, team~ mstr* * f=<2>e~ ifex $%%%%f%%%%>0, set @@postmsg=%%%%f%%%%;0x0010;0;0
        REGI $HKCR\*\shell\RunCloseWindow\\=打开后关闭所在目录(多个)
        REGI $HKCR\*\shell\RunCloseWindow\\Icon=taskmgr.exe,0
        REGI $HKCR\*\shell\RunCloseWindow\Command\\=%commandline%
        REGI $HKCR\Directory\shell\RunCloseWindow\\=打开后关闭所在目录(多个)
        REGI $HKCR\Directory\shell\RunCloseWindow\\Icon=taskmgr.exe,0
        REGI $HKCR\Directory\shell\RunCloseWindow\command\\=%commandline%




dos时代菜鸟 发表于 2022-12-1 18:42:41
本帖最后由 dos时代菜鸟 于 2022-12-4 23:42 编辑

open_with_close_window.7z (939 Bytes, 下载次数: 23)


需要事先 设定 已单独进程运行  ,win7 下可能需要注销一下,或者手动设置一下。


============================================
  1. @echo off
  2. setlocal ENABLEDELAYEDEXPANSION

  3. set reg_cmd=""%~dpnx0" "%%1""

  4. if  "%~1"=="" (
  5.     SET /P ST=输入 A 添加右键菜单,输入 D 删除右键菜单:
  6.     if /I "!ST: =!"=="a" call:Add
  7.     if /I "!ST: =!"=="d" call:Remove
  8.     pause
  9.     goto :eof
  10. )

  11. call :exec "%~1"
  12. goto :eof

  13. :remove
  14. echo remove
  15. reg delete "HKEY_CLASSES_ROOT\*\shell\exec" /f
  16. exit /b

  17. :add
  18. echo reg_add
  19. echo.
  20. echo exe
  21. reg add "HKEY_CLASSES_ROOT\*\shell\EXEC" /ve /t REG_SZ /d "&打开当前文件并关闭浏览窗口" /f
  22. reg add "HKEY_CLASSES_ROOT\*\shell\EXEC\command" /ve /t REG_SZ /d %reg_cmd% /f
  23. rem 设置 单独进程 运行 explorer.exe / win7下需要手动设置 资源管理器选项,或者可能需要注销。
  24. reg add "HKEY_CURRENT_USER\SOFTWARE\Microsoft\Windows\CurrentVersion\Explorer\Advanced" /v SeparateProcess /t REG_DWORD /d 1 /f
  25. exit /b

  26. :exec
  27. set "file_p=%~dp1"
  28. set "file_p=!file_p:~0,-1!"
  29. for %%c in ("!file_p!") do (set "windowtitle=%%~nxc")
  30. if "!windowtitle!"=="" set "windowtitle=%~dp1"

  31. for /f "delims=" %%c in ('tasklist /fi "imagename eq explorer.exe" /nh /fo:CSV /v') do (
  32.     SET STR1=%%c
  33.     set str1=!str1:","=/!
  34.     set str1=!str1:"=/!
  35.     for /f "tokens=2,9 delims=/" %%d in ("!str1!") do (
  36.         for %%f in ("!windowtitle!" "!file_p!") do (
  37.             if /i "%%~e"=="%%~f" (
  38.                 echo %%d,%%e
  39.                 taskkill /fi "pid eq %%d " /fi "imagename eq explorer.exe"
  40.                 echo.
  41.             )
  42.    
  43.         )
  44.     )
  45. )

  46. start "" "%~1"
  47. exit /b
复制代码









点评

完美了  发表于 2022-12-1 21:25
liyqxtu 发表于 2023-12-1 09:25:27
支持楼主分享
nowayer 发表于 2023-12-1 09:20:58
提示: 作者被禁止或删除 内容自动屏蔽
dos时代菜鸟 发表于 2022-12-4 23:44:46
cmd 改进了一下,发现 调用 根目录下的文件 以及 带空格目录下的文件,有问题,
增加了一个用 tasklist  精准定位窗口名称对应的 pid 的思路。应该可以了。
窄口牛 发表于 2022-12-1 17:51:07
dos时代菜鸟 发表于 2022-12-1 16:21
一个批处理也能搞定。
用 taskkill 就可以,把这个批处理放到桌面上,把资源管理器 里的某个EXE文件拖 ...

win7上无效。

点评

[attachimg]514074[/attachimg]  详情 回复 发表于 2022-12-1 18:42
dos时代菜鸟 发表于 2022-12-1 16:21:54
本帖最后由 dos时代菜鸟 于 2022-12-1 17:39 编辑

open_with_close_window.zip (397 Bytes, 下载次数: 6)

一个批处理也能搞定。
用 taskkill 就可以,把这个批处理放到桌面上,把资源管理器 里的某个EXE文件拖放到这个批处理上,
会打开那个 exe 文件并关闭 浏览 exe 文件的那个 资源管理器。
仅在 win10 x64 下测试 成功

如果可行,就可以把这个批处理 添加到注册表 指定位置了。


前提是 需要设置好 explorer.exe 的 设置 “在单独的进程中打开文件夹窗口”




点评

win7上无效。  详情 回复 发表于 2022-12-1 17:51
nttwqz 发表于 2022-11-30 23:44:47
527104427 发表于 2022-11-30 22:31
别人的要求不是这样的。这就好比去饭店吃饭,别人想炒个菜,有人却极力反对,炒什么菜啊,吃煮面多快啊, ...

这比喻好像和楼主需求没什么关系啊?菜和面都要上桌,吃到嘴里的过程一样,即打开方式相同,但是楼主的食物因为种类繁多却不在桌上,楼主又觉得到各个房间找到食物吃关门太麻烦,让你们给他装个自动门……
conlin888 发表于 2022-11-30 23:25:42
看天书,顶一下。
dos时代菜鸟 发表于 2022-11-30 23:17:27
527104427 发表于 2022-11-30 21:50
定位pid其实并不可取,结束pid就直接把explorer干掉了,见图:

那就 窗口 id 呗
527104427 发表于 2022-11-30 22:31:15
nttwqz 发表于 2022-11-30 22:13
整这么复杂,13楼已经说了,Windows 8.1的开始屏幕就是最理想的答案,比你这右键实现简单太多了,还能按使 ...

别人的要求不是这样的。这就好比去饭店吃饭,别人想炒个菜,有人却极力反对,炒什么菜啊,吃煮面多快啊,又快又滑溜,几分钟解决。

点评

这比喻好像和楼主需求没什么关系啊?菜和面都要上桌,吃到嘴里的过程一样,即打开方式相同,但是楼主的食物因为种类繁多却不在桌上,楼主又觉得到各个房间找到食物吃关门太麻烦,让你们给他装个自动门……  详情 回复 发表于 2022-11-30 23:44
nttwqz 发表于 2022-11-30 22:13:56
整这么复杂,13楼已经说了,Windows 8.1的开始屏幕就是最理想的答案,比你这右键实现简单太多了,还能按使用频率排序,你这每次浏览文件再打开也不嫌费劲,统一创建快捷方式到一个文件夹也比这简单。

点评

别人的要求不是这样的。这就好比去饭店吃饭,别人想炒个菜,有人却极力反对,炒什么菜啊,吃煮面多快啊,又快又滑溜,几分钟解决。  详情 回复 发表于 2022-11-30 22:31
527104427 发表于 2022-11-30 21:50:14
dos时代菜鸟 发表于 2022-11-30 21:14
那就只能 定位 窗口 pid 了。


定位pid其实并不可取,结束pid就直接把explorer干掉了,见图:



点评

那就 窗口 id 呗  详情 回复 发表于 2022-11-30 23:17
窄口牛 发表于 2022-11-30 21:32:48
本帖最后由 窄口牛 于 2022-11-30 21:35 编辑

vbs应该也简单,不过确实拼凑不来,不像批处理。隔壁论坛就有个按顺序关闭相同文件夹窗口的vbs。关闭重复的文件夹窗口
minchengan 发表于 2022-11-30 21:32:08
最后再搞个双击双键的接口吧,比单击右键再选择更便捷
527104427 发表于 2022-11-30 21:19:45
dos时代菜鸟 发表于 2022-11-30 21:14
那就只能 定位 窗口 pid 了。

我楼上的代码被楼主置顶了,标题也改了,说明已解决问题。
dos时代菜鸟 发表于 2022-11-30 21:14:17
527104427 发表于 2022-11-30 21:09
哈哈,这个效果不是楼主想要的,他就是想右键打开程序,自动关窗口

那就只能 定位 窗口 pid 了。

点评

定位pid其实并不可取,结束pid就直接把explorer干掉了,见图: [attachimg]514016[/attachimg]  详情 回复 发表于 2022-11-30 21:50
我楼上的代码被楼主置顶了,标题也改了,说明已解决问题。  详情 回复 发表于 2022-11-30 21:19
527104427 发表于 2022-11-30 21:09:22
dos时代菜鸟 发表于 2022-11-30 20:51
空白处右键 浏览选择一个exe 文件运行不就得了?

哈哈,这个效果不是楼主想要的,他就是想右键打开程序,自动关窗口

点评

那就只能 定位 窗口 pid 了。  详情 回复 发表于 2022-11-30 21:14
窄口牛 发表于 2022-11-30 20:59:48
可能是因为我explorer(桌面)和资源管理器是两个进程?

点评

再试一下: set^ EnviMode=1 set^ ForceLocal=1 //多开 REGI $HKCR\*\shell\Locate\\=定位 REGI $HKCR\*\shell\Locate\\Icon=explorer.exe,0 REGI $HKCR\*\shell\Locate\Command\\=explorer.exe /n,  详情 回复 发表于 2022-11-30 21:02
dos时代菜鸟 发表于 2022-11-30 20:51:04
本帖最后由 dos时代菜鸟 于 2022-11-30 21:19 编辑

右键运行.7z (1.39 MB, 下载次数: 12)

空白处右键 浏览选择一个exe 文件运行不就得了?

点评

哈哈,这个效果不是楼主想要的,他就是想右键打开程序,自动关窗口  详情 回复 发表于 2022-11-30 21:09
窄口牛 发表于 2022-11-30 20:42:40
2008r2下没问题,win7不行。
527104427 发表于 2022-11-30 19:26:46
窄口牛 发表于 2022-11-30 19:14
[System32][C:\Windows\System32][]

你这个系统很奇怪,此命令找不到任何东西:find --class:CabinetWClass --wid@ c,窗口标题
没啥办法了。
窄口牛 发表于 2022-11-30 19:14:03
[System32][C:\Windows\System32][]

点评

你这个系统很奇怪,此命令找不到任何东西:find --class:CabinetWClass --wid@ c,窗口标题 没啥办法了。  详情 回复 发表于 2022-11-30 19:26
527104427 发表于 2022-11-30 19:11:05
本帖最后由 527104427 于 2022-11-30 19:13 编辑


还真邪门,再手动试一下呗:

team set^ EnviMode=1| set^ ForceLocal=1| exec $"%WinDir%\System32"| wait 2000| fdir --full a="%WinDir%\System32\cmd.exe"| mstr * -delims:\ b=<-1>a| find --class:CabinetWClass --wid@ c,%b%| mess. [%b%][%a%][%c%]

看弹窗是啥。再不行就没办法了。



527104427 发表于 2022-11-30 18:44:34



你手动试试看:
先多打开几个文件夹,再输入命令
find --class:CabinetWClass --wid*@ c,
mess. [%c%]
看一下有没有弹窗

有的话,再
set @@postmsg=792014;0x0010;0;0

792014要换成你那边实际的数字,就是第2列的,看有没有关闭对应的窗口



dos时代菜鸟 发表于 2022-11-30 18:41:58
用 pecmd ,可以考虑 用鼠标捕获当前窗口 pid ,然后 关闭窗口。
527104427 发表于 2022-11-30 18:13:41

看注册表的内容是正确的,那就只有换PECMD了,换最新的试试吧

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

闽公网安备 35020302032614号

GMT+8, 2024-11-3 21:41

Powered by Discuz! X3.3

© 2001-2017 Comsenz Inc.

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