[新手上路]批处理新手入门导读[视频教程]批处理基础视频教程[视频教程]VBS基础视频教程[批处理精品]批处理版照片整理器
[批处理精品]纯批处理备份&还原驱动[批处理精品]CMD命令50条不能说的秘密[在线下载]第三方命令行工具[在线帮助]VBScript / JScript 在线参考
返回列表 发帖

[注册表类] 批处理如何从注册表中读取鼠标右键信息?

如何从注册表中读取鼠标右键信息,包括新建的文件名称?在网上查晕了,还是没弄懂。。

本帖最后由 hanyeguxing 于 2011-4-13 22:17 编辑

如果要查找“新建”的文件类型,则递归HKLM\SOFTWARE\Classes\中所有包含ShellNew子项的项
寒夜孤星:在没有说明的情况下,本人所有代码均运行在 XP SP3 下 (有问题请发贴,QQ临时会话已关闭)

TOP

2# hanyeguxing


能帮忙写一下代码吗?我现在正处于学习注册表阶段,麻烦你了。谢谢

TOP

reg query hkcr /f shellnew /s

TOP

本帖最后由 hanyeguxing 于 2011-4-14 04:47 编辑

xp sp3 下以递归 HKLM\SOFTWARE\Classes\ 中所有包含 ShellNew 子项的项为例:
  1. @echo off&setlocal enabledelayedexpansion
  2. set "n=reg query HKLM\SOFTWARE\Classes"
  3. for /f "skip=4 tokens=2 delims=R>" %%a in ('%n%\.bat /ve') do set "m=%%a"
  4. for /f "skip=6 delims=" %%a in ('%n%') do (
  5. set "a=%%a"
  6. if not "!a:~36,1!"=="." goto:e
  7. %n%\!a:~36!\ShellNew >nul 2>nul&&for /f "skip=4 tokens=3 delims=%m%" %%b in ('%n%\!a:~36! /ve') do for /f "skip=4 tokens=3 delims=%m%" %%c in ('%n%\%%b /ve 2^>nul') do echo;!a:~36! %%c
  8. )
  9. :e
  10. echo;完成&pause
复制代码
寒夜孤星:在没有说明的情况下,本人所有代码均运行在 XP SP3 下 (有问题请发贴,QQ临时会话已关闭)

TOP

5# hanyeguxing


非常感谢。问一些问题,你不用具体解释,笼统的说一下就可以。又麻烦你了。
  1. for /f "skip=4 tokens=2 delims=R>" %%a in ('%n%\.bat /ve') do set "m=%%a"
复制代码
'%n%\.bat是每个项下都有.bat子项吗? 跳过前4行,提取以R>为分隔符的第2段,取到的是什么值?我在这行下面用echo %m%&pause试了一下,显示的是ECHO处于关闭状态!?
后面那三个for do让我彻底晕了。

TOP

本帖最后由 hanyeguxing 于 2011-4-14 09:37 编辑

6# jay_16


@echo off&setlocal enabledelayedexpansion
set "n=reg query HKLM\SOFTWARE\Classes"
for /f "skip=4 tokens=2 delims=R>" %%a in ('%n%\.bat /ve') do set "m=%%a"
提取tab制表符,因为论坛无法复制这个
for /f "skip=6 delims=" %%a in ('%n%') do (
递归HKLM\SOFTWARE\Classes下所有项名(不包括子项),skip=6使得第一项名就带.
        set "a=%%a"
        if not "!a:~36,1!"=="." goto:e
只递归项名为扩展名的,即项名第一个字符(完整项名第35个字符)为.
        %n%\!a:~36!\ShellNew >nul 2>nul&&for /f "skip=4 tokens=3 delims=%m%" %%b in ('%n%\!a:~36! /ve') do for /f "skip=4 tokens=3 delims=%m%" %%c in ('%n%\%%b /ve 2^>nul') do echo;!a:~36! %%c
检查这些项中是否有ShellNew子项,有则执行后面两个for。第一个for解析获取该扩展名对应的项名(文件类型的项名),第二个for获取该项名对应的文件类型名。这样就有了扩展名!a:~36!对应的文件类型%%c
)
:e
echo;完成&pause
运行结果示例:
.bat MS-DOS 批处理文件
.cmd Windows NT 命令脚本
.doc Microsoft Word 文档
.lnk 快捷方式
.txt 文本文档
完成
请按任意键继续. . .
寒夜孤星:在没有说明的情况下,本人所有代码均运行在 XP SP3 下 (有问题请发贴,QQ临时会话已关闭)

TOP

遍历太慢了。。。有个项是管理新建项的。

HKCU\Software\Microsoft\Windows\CurrentVersion\Explorer\Discardable\PostSetup\ShellNew

TOP

8# slore


从 HKCU\Software\Microsoft\Windows\CurrentVersion\Explorer\Discardable\PostSetup\ShellNew 查询是个简便的方法(在没有意外的情况下,因为这个键可能和别的键值对应不上)
寒夜孤星:在没有说明的情况下,本人所有代码均运行在 XP SP3 下 (有问题请发贴,QQ临时会话已关闭)

TOP

本帖最后由 cjiabing 于 2011-4-15 13:02 编辑

我的做法:
直接用“Registry Workshop”搜索包含指定关键词的内容,比如“shellnew”,一搜一大堆,然后逐个去排除,基本上能解决。
比如
结合昨晚阅读的一个作品,发给你参考:
  1. @echo off
  2. ::清理uusee网页右键
  3. reg delete "HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Internet Explorer\Extensions\{998A88A0-A355-809B-831C-B83A80000991}"   /f
  4. reg delete "HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Internet Explorer\Extensions\{998A88A0-A355-809B-831C-B83A80000991}"   /f
  5. reg delete "HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Internet Explorer\Extensions\{998A88A0-A355-809B-831C-B83A80000991}"   /f
  6. ::清除pps自启动
  7. reg add  HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\Run /t REG_EXPAND_SZ /v "PPS Accelerator"  /f  
  8. ::清理vagaa网页右键
  9. reg delete "HKEY_CURRENT_USER\Software\Microsoft\Internet Explorer\MenuExt\&V使用Vagaa哇嘎下载"  /v   使用Vagaa哇嘎下载  /f
  10. reg delete "HKEY_CLASSES_ROOT\Directory\shell\添加到Vagaa共享"  /v  添加到Vagaa共享  /f
  11. ::清理bat和txt右键的print打印选项
  12. reg delete HKEY_CLASSES_ROOT\batfile\shell\print\  /f
  13. reg delete HKEY_CLASSES_ROOT\txtfile\shell\print\  /f
  14. ::在右键添加“新建BAT文件”
  15. reg add HKCR\.bat\ShellNew /v nullfile /f >nul
  16. reg add HKCR\batfile /ve /d bat@.bat /f >nul
复制代码
注意“bat@”就是你新建的bat文件名,不懂怎么弄路径,直接将“@echo off”写到这个新建bat中去。
直接在bat文件上可以新建右键,比较简单:
reg add HKEY_CLASSES_ROOT\batfile\shell\啦啦啦\command /t REG_SZ /ve  /d  C:\啦啦啦.bat   /f
寂寞是黑白的,但黑白不是寂寞,是永恒。BAT 需要的不是可能,而是智慧。

TOP

本帖最后由 zm900612 于 2011-4-15 14:05 编辑
  1. @reg query hkcr /k /f shellnew /s|@findstr /x "[^\\]\\\.[^\\]*\\ShellNew"
复制代码

TOP

返回列表