Pergunta

Como faço para lançar o Windows' RegEdit com certo caminho localizada, como "HKEY_CURRENT_USER\Software\Microsoft\VisualStudio\8.0" , então eu não tenho que fazer o clique?

Qual é o argumento de linha de comando para fazer isso? Ou há um lugar para encontrar a explicação de switches de RegEdit?

Foi útil?

Solução

Há um programa chamado regjump , por Mark Russinovich, que faz apenas o que você quer. Ele vai lançar regedit e movê-lo para a chave que você deseja a partir da linha de comando.

usos regjump (ou pelo menos costumava) usar a mesma janela regedit em cada invocação, então se você quiser várias sessões regedit abrir, você ainda vai ter que fazer as coisas à moda antiga para todos, mas o regjump adotou . Uma advertência menor, mas um para manter a nota de, pelo menos.

Outras dicas

Use o seguinte arquivo de lote (adicionar aos filename.bat):

REG ADD HKCU\Software\Microsoft\Windows\CurrentVersion\Applets\Regedit /v LastKey /t REG_SZ /d Computer\HKEY_LOCAL_MACHINE\SOFTWARE\Veritas\NetBackup\CurrentVersion\Config /f
START regedit

para substituir:

Computer\HKEY_LOCAL_MACHINE\SOFTWARE\Veritas\NetBackup\CurrentVersion\Config

com o caminho do registro.

A partir http://windowsxp.mvps.org/jumpreg.htm (eu tenho não tentou qualquer um destes):

Quando você iniciar o Regedit, ele automaticamente abre a última chave que foi visualizado. (Editor do Registro no Windows XP salva a última chave de registro visualizado em um local separado). Se você quiser ir para uma chave de registro específica diretamente sem precisar navegar pelos caminhos manualmente, você pode usar qualquer um desses métodos / ferramentas.

Opção 1
Usando um VBScript: Copiar estas linhas para um documento Bloco de Notas como salvar como registry.vbs

'Launches Registry Editor with the chosen branch open automatically
'Author  : Ramesh Srinivasan
'Website: http://windowsxp.mvps.org

Set WshShell = CreateObject("WScript.Shell")
Dim MyKey
MyKey = Inputbox("Type the Registry path")
MyKey = "My Computer\" & MyKey
WshShell.RegWrite "HKCU\Software\Microsoft\Windows\CurrentVersion\Applets\Regedit\Lastkey",MyKey,"REG_SZ"
WshShell.Run "regedit", 1,True
Set WshShell = Nothing

Clique duas vezes Registry.vbs e digite o caminho do registro completo que você deseja abrir.

Exemplo: HKEY_CLASSES_ROOT\.MP3

Limitação:. O método acima não ajuda se Regedit já está aberto

Nota: No Windows 7, você precisa substituir o MyKey = "My Computer\" & MyKey linha com MyKey = "Computer\" & MyKey (remover o My string). Para um alemão Windows XP a "My Computer\" cadeia deve ser substituído por "Arbeitsplatz\".

Opção 2
Regjump de Sysinternals.com

Esta pequena de linha de comando aplicação leva um caminho de registro e faz aberto Regedit para esse caminho. Aceita chaves de raiz em padrão (por exemplo) e HKEY_LOCAL_MACHINE forma abreviada (por exemplo HKLM).

Uso: regjump [caminho]

Exemplo: C:\Regjump HKEY_CLASSES_ROOT\.mp3

Opção 3
12Ghosts JumpReg de 12ghosts.com

Ir para chaves de registro a partir de um ícone da bandeja! Esta é uma ferramenta surpreendentemente útil. Você pode gerenciar e saltar directamente para chaves de registro freqüentemente acessados. tamanho da lista Unlimited, salto para chaves e valores, obter a chave atual com um clique, salto para chave na área de transferência, salto para mesmo em chave na HKCU ou HKLM. Gerenciar e chaves de classificação com comentários em um menu de ícones da bandeja fácil de usar. Criar atalhos para as chaves de registro.

Eu também gostaria de observar que é possível visualizar e editar o registro de dentro do PowerShell. Lançá-lo, e usar set-location para abrir o local do registro de sua escolha. O nome abreviado de uma HKEY é usado como uma letra de unidade no sistema de arquivos (assim para ir para HKEY_LOCAL_MACHINE \ Software, você diria: set-location hklm: \ Software).

Mais detalhes sobre a gestão do registro no PowerShell pode ser encontrado digitando get-help Registry sob o comando PowerShell rápida.

Aqui está uma solução mais arquivo de lote com várias melhorias em comparação com as outras soluções de lote publicados aqui.

Ele também define LastKey valor da cadeia atualizado por si Regedit em cada saída para mostrar depois de iniciar a mesma tecla que em última saída.

@echo off
setlocal EnableDelayedExpansion
set "RootName=Computer"

if not "%~1"=="" (
    set "RegKey=%~1"
    goto PrepareKey
)

echo/
echo Please enter the path of the registry key to open.
echo/
set "RegKey="
set /P "RegKey=Key path: "

rem Exit batch file without starting Regedit if nothing entered by user.
if "!RegKey!"=="" goto ExitBatch

:PrepareKey
rem Remove square brackets and double quotes from entered key path.
set "RegKey=!RegKey:"=!"
if "!RegKey!"=="" goto ExitBatch
set "RegKey=!RegKey:[=!"
if "!RegKey!"=="" goto ExitBatch
set "RegKey=!RegKey:]=!"
if "!RegKey!"=="" goto ExitBatch

rem Replace hive name abbreviation by appropriate long name.
set "Abbreviation=%RegKey:~0,4%"
if /I "%Abbreviation%"=="HKCC" (
    set "RegKey=HKEY_CURRENT_CONFIG%RegKey:~4%"
    goto GetRootName
)
if /I "%Abbreviation%"=="HKCR" (
    set "RegKey=HKEY_CLASSES_ROOT%RegKey:~4%"
    goto GetRootName
)
if /I "%Abbreviation%"=="HKCU" (
    set "RegKey=HKEY_CURRENT_USER%RegKey:~4%"
    goto GetRootName
)
if /I "%Abbreviation%"=="HKLM" (
    set "RegKey=HKEY_LOCAL_MACHINE%RegKey:~4%"
    goto GetRootName
)
if /I "%RegKey:~0,3%"=="HKU" (
    set "RegKey=HKEY_USERS%RegKey:~3%"
)

:GetRootName
rem Try to determine automatically name of registry root.
for /F "tokens=1,2*" %%K in ('%SystemRoot%\System32\reg.exe query "HKCU\Software\Microsoft\Windows\CurrentVersion\Applets\Regedit" /v "LastKey"') do (
    if /I "%%K"=="LastKey" (
        for /F "delims=\" %%N in ("%%M") do set "RootName=%%N"
    )
)

rem Is Regedit already running?
%SystemRoot%\System32\tasklist.exe | %SystemRoot%\System32\findstr.exe /B /I /L regedit.exe >nul
if errorlevel 1 goto SetRegPath

echo/
echo Regedit is already running. Path can be set only when Regedit is not running.
echo/
set "Choice=N"
set /P "Choice=Kill Regedit (y/N): "
if /I "!Choice!"=="y" (
    %SystemRoot%\System32\taskkill.exe /IM regedit.exe >nul 2>nul
    goto SetRegPath
)
echo Switch to running instance of Regedit without setting entered path.
goto StartRegedit

:SetRegPath
rem Add this key as last key to registry for Regedit.
%SystemRoot%\System32\reg.exe add "HKCU\Software\Microsoft\Windows\CurrentVersion\Applets\Regedit" /v "LastKey" /d "%RootName%\%RegKey%" /f >nul 2>nul

:StartRegedit
start /B regedit.exe

:ExitBatch
endlocal

As melhorias são:

  1. Caminho do Registro pode ser passado também como parâmetro de linha de comando para o script em lotes.

  2. Caminho do Registro podem ser inseridos ou colados com ou sem circundante aspas duplas.

  3. Caminho do Registro podem ser inseridos ou colados ou passado como parâmetro, com ou sem circundante colchetes.

  4. Caminho do Registro podem ser inseridos ou colados ou passado como parâmetro também com um nome de colméia abreviada (HKCC, HKCU, HKCR, HKLM, HKU).

  5. cheques script em lotes para já em execução Regedit como chave do Registro não é mostrada ao iniciar Regedit enquanto Regedit estiver em execução. O usuário lote é perguntado se instância em execução deve ser morto para reiniciá-lo para mostrar caminho do Registro entrou. Se os escolhe usuários lote não matar Regedit Regedit é iniciado sem definir caminho resultante (geralmente) entrou em apenas começando janela Regedit para primeiro plano.

  6. As tentativas arquivo de lote para automaticamente obter o nome de raiz do registro que está em Inglês Windows XP Meu computador , em alemão Windows XP, Arbeitsplatz , e no Windows 7 apenas computador . Isso pode falhar se o valor LastKey de Regedit estiver ausente ou vazio no registro. Para este caso por favor definir o nome raiz direita na terceira linha do código do lote.

Copie o abaixo texto e guardá-lo como um arquivo de lote e prazo

@ECHO OFF
SET /P "showkey=Please enter the path of the registry key: "
REG ADD "HKCU\Software\Microsoft\Windows\CurrentVersion\Applets\Regedit" /v "LastKey" /d "%showkey%" /f
start "" regedit

Insira o caminho da chave do registro que você deseja abrir quando os avisos arquivo de lote para ele e pressione Enter . Regedit abre para a chave definida nesse valor.

Eu pensei que este C # solução pode ajudar:

Ao fazer uso de uma sugestão anterior, podemos enganar regedit na abertura da chave que queremos, mesmo que não pode passar a chave como um parâmetro.

Neste exemplo, uma opção de menu de "Configurações do registro" abre RegEdit para o nó para o programa que chamou.

forma do Programa:

    private void registrySettingsToolStripMenuItem_Click(object sender, EventArgs e)
    {
        string path = string.Format(@"Computer\HKEY_CURRENT_USER\Software\{0}\{1}\",
                                    Application.CompanyName, Application.ProductName);

        MyCommonFunctions.Registry.OpenToKey(path);

    }

MyCommonFunctions.Registry

    /// <summary>Opens RegEdit to the provided key
    /// <para><example>@"Computer\HKEY_CURRENT_USER\Software\MyCompanyName\MyProgramName\"</example></para>
    /// </summary>
    /// <param name="FullKeyPath"></param>
    public static void OpenToKey(string FullKeyPath)
    {
        RegistryKey rKey = Microsoft.Win32.Registry.CurrentUser.OpenSubKey(@"SOFTWARE\Microsoft\Windows\CurrentVersion\Applets\Regedit", true);
        rKey.SetValue("LastKey",FullKeyPath);

        Process.Start("regedit.exe");
    }

Claro, você poderia colocar tudo isso em um método do formulário, mas eu gosto reusablity.

Crie um arquivo BAT usando clipboard.exe e regjump.exe para saltar para a chave na área de transferência:

clipboard.exe > "%~dp0clipdata.txt"
set /p clipdata=input < "%~dp0clipdata.txt"
regjump.exe %clipdata%

(% ~ meios DP0 "o caminho para o arquivo BAT")

Com base na de lionkingrafiki resposta , aqui está uma solução mais robusta que irá aceitar um caminho chave reg como um argumento e será automaticamente traduzir HKLM para HKEY_LOCAL_MACHINE ou similar, conforme necessário. Se nenhum argumento, o script verifica a área de transferência usando o objeto htmlfile COM invocado por um JScript híbrido quimera . Os dados copiados será dividida e indexado, por isso não importa se ele não está cortado ou mesmo entre todo um parágrafo de sujeira copiado. E, finalmente, a existência da chave é verificada antes LastKey é modificado. caminhos-chave que contenham espaços devem estar dentro de aspas duplas.

@if (@CodeSection == @Batch) @then
:: regjump.bat
@echo off & setlocal & goto main

:usage
echo Usage:
echo   * %~nx0 regkey
echo   * %~nx0 with no args will search the clipboard for a reg key
goto :EOF

:main
rem // ensure variables are unset
for %%I in (hive query regpath) do set "%%I="

rem // if argument, try navigating to argument.  Else find key in clipboard.
if not "%~1"=="" (set "query=%~1") else (
    for /f "delims=" %%I in ('cscript /nologo /e:JScript "%~f0"') do (
        set "query=%%~I"
    )
)

if not defined query (
    echo No registry key was found in the clipboard.
    goto usage
)

rem // convert HKLM to HKEY_LOCAL_MACHINE, etc. while checking key exists
for /f "delims=\" %%I in ('reg query "%query%" 2^>NUL') do (
    set "hive=%%~I" & goto next
)

:next
if not defined hive (
    echo %query% not found in the registry
    goto usage
)

rem // normalize query, expanding HKLM, HKCU, etc.
for /f "tokens=1* delims=\" %%I in ("%query%") do set "regpath=%hive%\%%~J"
if "%regpath:~-1%"=="\" set "regpath=%regpath:~0,-1%"

rem // https://stackoverflow.com/a/22697203/1683264
>NUL 2>NUL (
    REG ADD "HKCU\Software\Microsoft\Windows\CurrentVersion\Applets\Regedit"^
        /v "LastKey" /d "%regpath%" /f
)

echo %regpath%

start "" regedit
goto :EOF

@end // begin JScript hybrid chimera
// https://stackoverflow.com/a/15747067/1683264
var clip = WSH.CreateObject('htmlfile').parentWindow.clipboardData.getData('text');

clip.replace(/"[^"]+"|\S+/g, function($0) {
    if (/^\"?(HK[CLU]|HKEY_)/i.test($0)) {
        WSH.Echo($0);
        WSH.Quit(0);
    }
});

Aqui está uma simples função PowerShell baseado fora desta resposta acima https://stackoverflow.com/a/12516008/1179573

function jumpReg ($registryPath)
{
    New-ItemProperty -Path "HKCU:\Software\Microsoft\Windows\CurrentVersion\Applets\Regedit" `
                     -Name "LastKey" `
                     -Value $registryPath `
                     -PropertyType String `
                     -Force

    regedit
}

jumpReg ("Computer\HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\Run") | Out-Null

A resposta acima não realmente explicar muito bem o que ele faz. Quando você fecha RegEdit, ele salva a sua posição conhecida última em HKCU:\Software\Microsoft\Windows\CurrentVersion\Applets\Regedit, então isso apenas substitui a última posição conhecida com o local onde você quer saltar, em seguida, abre-lo.

Isto parece terrivelmente fora da data, mas Registro Informações Editor (regedit) da linha de comandos alegações de que ele não suportam esta.

Você pode fazê-lo aparecer como regedit faz esse comportamento, criando um arquivo de lote (das alegações já dadas), mas chamá-lo regedit.bat e colocá-lo na pasta C: system32 \ WINDOWS \. (Você pode querer que ele pule editting o LastKey no registro se não args linha de comando são dadas, por isso "regedit" em seus próprios trabalhos como regedit sempre fez) Então "regedit HKEY_CURRENT_USER \ Software \ Microsoft \ VisualStudio \ 8.0" vai fazer o que você quer.

Isto usa o fato de que a ordem em PATH geralmente é C: \ WINDOWS \ system32; C: \ Windows; C: \ WINDOWS \ System32 \ Wbem; etc

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top