VBGood网站全文搜索 Google

搜索VBGood全站网页(全文搜索)

VB爱好者乐园(VBGood)

 找回密码
 立即注册
搜索
12
返回列表 发新帖
楼主: icecept

如何实现windows优化大师的注册表定位操作

[复制链接]
发表于 2008-4-27 22:15:13 | 显示全部楼层
转贴两篇文章:

快速定位

    现在有很多设置技巧都需要通过修改注册表来实现,但在注册表中,查找项名是相当费时费力的。以修改驱动器的右键菜单来说,在“HKEY_CLASSES_ROOT\”分支下有近万个项,要从中找到driver项可没那么简单,需要简化操作。
  1.以名定位

  运行“regedit”命令打开注册表编辑器,展开“HKEY_CLASSES_ROOT\”分支,按“d”键,可以选中第一个以“d”开头的项,再点击一下“r”键可直接查找到首个以“dr”开头的项,当然就是“driver”项了。注意:连续输入速度一定要快,太慢的话dr将被分成两次独立操作,结果只会定位到r开头的项。

  2.不可不用的查找功能

  使用查找功能来查询须修改的项可以算是最原始的方法了,不过相当实用。其实查找还有另一个更大的用处,那就是在你不知道具体分支项名时也可以找到。比如说你想修改回收站名称,那么只要在查找中输入“回收站”,把查看中的“项”、“值”、“数据”全部选中,再进行查找,就可以找到需要修改的位置了,当然找到的不一定就只有一项,具体是哪一项就得靠自己分析了。很适合有意自学的朋友使用。

  事实上,不知道大家有没有注意到,对注册表的修改通常总是集中在有限的几个主项下,如:“HKEY_LOCAL_MACHINE\SYSTEM\CurrentCo ntrolSet”、“HKEY_LOCAL_MACHIN E\SOFTWARE\Microsoft\Windows\C urrentVersion”、“HKEY_LOCAL_MAC HINE\SOFTWARE\Microsoft”、“HKE Y_CURRENT_USER\Software\Micro soft\Windows\CurrentVersion”和“HKE Y_CURRENT_USER\Software\Microsoft”。

  把这些项添加到收藏夹中,以后想查找某项的话就会方便许多。


--------------------------------

DOS批处理快速定位



注册表快速定位,dos批处理的威力。2007年03月16日 星期五 上午 08:56用过 sysinternals 的 regjump
就用BAT来写了一把,
但缺点是不能定位到具体的值。

新手作品,请大家多多指正! 谢谢!
CODE:  [Copy to clipboard]
--------------------------------------------------------------------------------
@Echo OFF
::
:: BatName: OpenReg.bat
:: Version: 0.1
:: Purpose: 注册表快速定位
::
:: Usage: OpenReg [path]
:: example:   OpenReg HKLM\Software\Microsoft\Windows
::
:: Code by SpikeKnox 2007.01.31
::

rem Show help
If [%1]==[/?] (Type "%~f0" | findstr "^::" && Goto :EOF)

:OpenReg
SetLocal EnableDelayedExpansion
rem %1 要定位的路径(可选,为空时将regedit定位到根目录)
If NOT [%1]==[] (

         Set tag=我的电脑\%1
         Set "tag=!tag:"=!"
        
         rem 缩写路径转换
         Set "tag=!tag:HKCR\=HKEY_CLASSES_ROOT\!"
         Set "tag=!tag:HKCU\=HKEY_CURRENT_USER\!"
         Set "tag=!tag:HKLM\=HKEY_LOCAL_MACHINE\!"
         Set "tag=!tag:HKU\=HKEY_USERS\!"
         Set "tag=!tag:HKCC\=HKEY_CURRENT_CONFIG\!"
        
         Set tag="!tag!"
        
) Else (

         Set "tag=我的电脑"

)

reg add HKCU\Software\Microsoft\Windows\CurrentVersion\Applets\Regedit /v LastKey /d %tag% /f >NUL
Start regedit

SetLocal DisableDelayedExpansion
Goto :EOF
[原创]自己继一个,查找winrar的安装目录

QuerySoftRegKey winrar "C%%Program Files%WinRAR"
CODE:  [Copy to clipboard]
--------------------------------------------------------------------------------
@Echo OFF
::
:: BatName: QuerySoftRegKey.bat
:: Version: 0.1
:: Purpose: 查询软件在注册表各Software项中的位置
::
:: Usage: QuerySoftRegKey softName [key]
::
::         softName         要查询的软件名
::         key                 要查询的值名(可选)
::
:: example: QuerySoftRegKey winrar
::           QuerySoftRegKey winrar "C%%Program Files%WinRAR"
::
::
:: Code by SpikeKnox 2007.01.31
::

rem Show help
If [%1]==[/?] Call :Help && Goto :EOF

SetLocal ENABLEDELAYEDEXPANSION

If [%1]==[] Call :Help && Goto :EOF
Set softName=%1
Set "softName=!softName:"=%!
Set softName="!softName!"

If NOT [%2]==[] (
         Set "key=%2"
         Set "key=!key:"=%!
         Set key="!key!"
)

For /f "delims=☆" %%i IN ('^(reg query HKCU\Software /k /f %softName% ^&^& reg query HKLM\Software /k /f %softName%^) ^| find "HKEY_"') DO (
         If [!key!]==[] (
                 rem 只查询软件名
                 Echo %%i
                 Call :OpenReg "%%i"
         ) Else (
                 rem 只查询软件名和具体的值名
                 Set item="%%i"
                 for /f "delims=☆" %%I IN ('reg query !item! /s /f !key! ^| find "HKEY_"') DO Call :OpenReg "%%I"
                 reg query !item! /s /f !key! | find !key!
         )
)

Goto :EOF

:OpenReg
rem %1 要定位的路径(可选,为空时将regedit定位到根目录)
If NOT [%1]==[] (

         Set tag=我的电脑\%1
         Set "tag=!tag:"=!"
        
         rem 缩写路径转换
         Set "tag=!tag:HKCR\=HKEY_CLASSES_ROOT\!"
         Set "tag=!tag:HKCU\=HKEY_CURRENT_USER\!"
         Set "tag=!tag:HKLM\=HKEY_LOCAL_MACHINE\!"
         Set "tag=!tag:HKU\=HKEY_USERS\!"
         Set "tag=!tag:HKCC\=HKEY_CURRENT_CONFIG\!"
        
         Set tag="!tag!"
        
) Else (

         Set "tag=我的电脑"

)

reg add HKCU\Software\Microsoft\Windows\CurrentVersion\Applets\Regedit /v LastKey /d %tag% /f >NUL
Start regedit

Goto :EOF

:Help
Type "%~f0" | findstr "^::"
Goto :EOF
可能是我们的 reg.exe 的版本不同



   Quote:
Originally posted by HUNRYBECKY at 2007-2-1 10:00 AM:
不过用起来有点问题,显示错误:命令行参数太多,希望修正。  


我用的是Win2003。

reg query 支持这些参数,老版本的没有那么多的。

REG QUERY KeyName [/v [ValueName] | /ve]
           [/f Data [/k] [/d] [/c] [/e]] [/t Type] [/z] [/se Separator]

   KeyName   [\\Machine\]FullKey
            Machine - 远程机器名称,省略当前机器的默认值。在远程机器上
                      只有 HKLM 和 HKU 可用。
            FullKey - 以 ROOTKEY\SubKey 名称形式
                 ROOTKEY - [ HKLM | HKCU | HKCR | HKU | HKCC ]
                 SubKey   - 在选择的 ROOTKEY 下的注册表项的全名

   /v        具体的注册表项值的查询。
            如果省略,会查询该项的所有值。

            只有与 /f 开关一起指定的情况下,此开关的参数才是可选的。它指定
            只在值名称中搜索。

   /ve       查询默认值或空值名称(默认)。

   /s        循环查询所有子项和值(如 dir /s)。

   /se       为 REG_MULTI_SZ 在数据字符串中指定分隔符(长度只为 1 个字符)。
            默认分隔符为 "\0"。

   /f        指定搜索的数据或模式。
            如果字符串包含空格,请使用双引号。默认为 "*"。

   /k        指定只在项名称中搜索。

   /d        指定只在数据中搜索。

   /c        指定搜索时区分大小写。
            默认搜索为不区分大小写。

   /e        指定只返回完全匹配。
            默认是返回所有匹配。

   /t        指定注册表值数据类型。
            有效的值是:
              REG_SZ, REG_MULTI_SZ, REG_EXPAND_SZ,
              REG_DWORD, REG_BINARY, REG_NONE
            默认为所有类型。

   /z        详细: 显示值名称类型的数字等值。
回复 支持 反对

使用道具 举报

发表于 2008-4-28 09:38:34 | 显示全部楼层
楼上方法巧妙,利用REGEDIT的记忆上次关闭时的位置这个功能 LastKey
回复 支持 反对

使用道具 举报

发表于 2008-4-28 21:17:32 | 显示全部楼层
有意思学习了
呵呵
回复 支持 反对

使用道具 举报

发表于 2008-4-30 13:47:50 | 显示全部楼层
关注中了


谢谢大家了
回复 支持 反对

使用道具 举报

 楼主| 发表于 2009-11-9 23:07:26 | 显示全部楼层
阳光宝宝的方法可真是不错啊。:)
回复 支持 反对

使用道具 举报

发表于 2009-11-16 21:59:48 | 显示全部楼层
等待一个完美的解决方案
回复 支持 反对

使用道具 举报

 楼主| 发表于 2010-6-27 20:49:39 | 显示全部楼层
还是没有找到一个完美的答案
回复 支持 反对

使用道具 举报

 楼主| 发表于 2012-2-9 11:08:39 | 显示全部楼层
都 2012了,我都等到快世界末日了,这个问题还没有解决,期待中。
回复 支持 反对

使用道具 举报

 楼主| 发表于 2015-8-28 21:37:47 | 显示全部楼层
本帖最后由 icecept 于 2015-8-28 21:52 编辑

注册表快速定位:
在 标准模块中:
Declare Function FindWindow Lib "user32" Alias "FindWindowA" (ByVal lpClassName As String, ByVal lpWindowName As String) As Long
Declare Function FindWindowEx Lib "user32" Alias "FindWindowExA" (ByVal hWnd1 As Long, ByVal hWnd2 As Long, ByVal lpsz1 As String, ByVal lpsz2 As String) As Long

Declare Function SendMessage Lib "user32" Alias "SendMessageA" (ByVal hwnd As Long, ByVal wMsg As Long, ByVal wParam As Long, lParam As Any) As Long
Declare Function ShellExecuteEx Lib "shell32.dll" (ByRef lpExecInfo As SHELLEXECUTEINFO) As Long
Declare Sub Sleep Lib "kernel32" (ByVal dwMilliseconds As Long)
Declare Function ShowWindow Lib "user32" (ByVal hwnd As Long, ByVal nCmdShow As Long) As Long

Const TVGN_ROOT = &H0
Const TVGN_CARET = &H9
Const TV_FIRST = &H1100
Const TVM_GETNEXTITEM = TV_FIRST + 10

Const WM_KEYDOWN = &H100
Const SW_SHOWNORMAL = 1

Const WM_CHAR = &H102
Const TVM_SELECTITEM = &H110B
Const VK_RIGHT = &H27
Const VK_LEFT = &H25
Type SHELLEXECUTEINFO
    cbSize As Long
    fMask As Long
    hwnd As Long
    lpVerb As String
    lpFile As String
    lpParameters As String
    lpDirectory As String
    nShow As Long
    hInstApp As Long
    lpIDList As Long    '可选参数
    lpClass As String    '可选参数
    hkeyClass As Long    '可选参数
    dwHotKey As Long    '可选参数
    hIcon As Long    '可选参数
    hProcess As Long    '可选参数
End Type
Declare Function SetActiveWindow Lib "user32" (ByVal hwnd As Long) As Long
Declare Function SetForegroundWindow Lib "user32" (ByVal hwnd As Long) As Long

'JumpToKey  "HKEY_CURRENT_USER\Software\EFD Software\HDTunePro ",  "Cr "
Public Sub JumpToKey(ByVal RegKey As String, Optional ByVal ValueStr As String)
    Dim HRegedit As Long, Htreeview As Long, HItem As Long, StrLen As Integer
    Dim PChar() As Byte, I As Integer, HListView As Long
    Dim PChar2() As Byte
    PChar = StrConv(RegKey, vbFromUnicode)
    StrLen = UBound(PChar)
    HRegedit = FindWindow("RegEdit_RegEdit", vbNullString)
    If HRegedit = 0 Then
        Dim SEI As SHELLEXECUTEINFO
        With SEI
            .cbSize = Len(SEI)
            .fMask = SEE_MASK_NOCLOSEPROCESS
            .lpVerb = "open"
            .lpFile = "regedit.exe"
            .nShow = 1
        End With
        ShellExecuteEx SEI
        For I = 1 To 50
            Sleep 10
            DoEvents
        Next

    End If
    HRegedit = FindWindow("RegEdit_RegEdit", vbNullString)
    ShowWindow HRegedit, SW_SHOWNORMAL
    Htreeview = FindWindowEx(HRegedit, 0&, "SysTreeView32", vbNullString)
    HItem = SendMessage(Htreeview, TVM_GETNEXTITEM, TVGN_ROOT, ByVal 0&)
    SendMessage Htreeview, TVM_SELECTITEM, TVGN_CARET, ByVal HItem
    Call SendMessage(Htreeview, WM_KEYDOWN, VK_LEFT, 0)
    Call SendMessage(Htreeview, WM_KEYDOWN, VK_RIGHT, 0)
    For I = 0 To StrLen
        If PChar(I) = 92 Then    'ASC( "\ ")=92
            Call SendMessage(Htreeview, WM_KEYDOWN, VK_RIGHT, 0)
        Else
            Call SendMessage(Htreeview, WM_CHAR, PChar(I), 0)
        End If
    Next

    If Len(ValueStr) = 0 Then Exit Sub
    HListView = FindWindowEx(HRegedit, 0&, "SysListView32", vbNullString)
    '=====激活窗口
    SetForegroundWindow HRegedit
    SetActiveWindow HRegedit
    '=====要了一般可以选到
    DoEvents
    Sleep 2
    SetForegroundWindow HListView
    'SetActiveWindow HListView
    '======
    'SetListItemSelect HListView, 0
    '======= 要了一般可以选到
    Call SendMessage(HListView, WM_KEYDOWN, VK_RIGHT, 0)
    Call SendMessage(HListView, WM_KEYDOWN, VK_RIGHT, 0)
    '========
    PChar2 = StrConv(ValueStr, vbFromUnicode)
    StrLen = UBound(PChar2)
    For I = 0 To StrLen '连续按下字母
        Call SendMessage(HListView, WM_CHAR, PChar2(I), 0)
    Next
End Sub
----------------
在窗体中:

Private Sub Command1_Click()
    '用法JumpToKey "HKEY_LOCAL_MACHINE\Software\Microsoft\Windows\BITS", vbnullstring  定位到项
    'JumpToKey "HKEY_LOCAL_MACHINE\Software\Microsoft\Windows\BITS", "StateIndex"      定位到值
    JumpToKey "JumpToKey "HKEY_CURRENT_USER\Software\Adobe\IAC", "UserID"
End Sub

点评

永远看不见keyup,如果是发向其它程序都不知道会发生什么事,注意点吧  发表于 2015-9-6 08:50
回复 支持 反对

使用道具 举报

 楼主| 发表于 2015-8-28 21:51:33 | 显示全部楼层

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有帐号?立即注册

x
回复 支持 反对

使用道具 举报

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

本版积分规则

文字版|手机版|小黑屋|VBGood  

GMT+8, 2022-7-5 12:25

VB爱好者乐园(VBGood)
快速回复 返回顶部 返回列表