コメント |
開きたい位置を Regedit\LastKey に書き込んで、
既に regedit が起動されている場合は終了させてから再度 regedit を実行します
@DIV
' 引数のチェック
if WScript.Arguments.Count = 1 then
strParam = WScript.Arguments(0)
end if
strParam = Trim( strParam )
' 無ければ、クリップボード
if strParam = "" then
' クリップボード用
' ※ HTA 等では直接 window.clipboardData より実行
' ※ するように書き換える必要があります
Set objIE = CreateObject("InternetExplorer.Application")
objIE.Navigate("about:blank")
Do While objIE.Busy
' 100 ミリ秒
Wscript.Sleep 100
Loop
strParam = objIE.document.parentWindow.clipboardData.GetData( "Text" ) & ""
objIE.Quit
end if
strParam = Trim( strParam )
' 無ければ入力
if strParam = "" then
strParam = InputBox("開く対象となるレジストリーのキーを入力して下さい")
end if
if strParam = "" then
Wscript.Quit
end if
' レジストリ書き込み用
Set WshShell = CreateObject( "WScript.Shell" )
' WMI用
Set objWMIService = GetObject("winmgmts:{impersonationLevel=impersonate}!\\.\root\cimv2")
' レジストリエディタが最後に開いていたキーの登録を行います
strPath = "Software\Microsoft\Windows\CurrentVersion\Applets\Regedit\LastKey"
if GetOSVersion() >= 6 then
strRegPath = "コンピュータ\" & strParam
else
strRegPath = "マイ コンピュータ\" & strParam
end if
' 既に regedit が実行中の場合はいったん終了させます
Set colProcessList = objWMIService.ExecQuery _
("Select * from Win32_Process Where Name = 'regedit.exe'")
For Each objProcess in colProcessList
' 最後のウインドウの位置とサイズを保存する為の終わらせ方
WshShell.AppActivate("レジストリ エディタ")
Wscript.Sleep(500)
WshShell.SendKeys ("%{F4}")
Wscript.Sleep(500)
' 上記終わらせ方が失敗した時の強制終了
on error resume next
objProcess.Terminate()
on error goto 0
Next
WshShell.RegWrite "HKCU\" & strPath, strRegPath, "REG_SZ"
' レジストリエディタを起動します
Call WshShell.Run( "regedit.exe" )
' レジストリエディタが終わるまで待つ場合は以下のようにします
' Call WshShell.Run( "regedit.exe", , True )
REM **********************************************************
REM OS バージョンの取得
REM **********************************************************
Function GetOSVersion()
Dim colTarget,str,aData,I,nTarget
Set colTarget = objWMIService.ExecQuery( _
"select Version from Win32_OperatingSystem" _
)
For Each objRow in colTarget
str = objRow.Version
Next
aData = Split( str, "." )
For I = 0 to Ubound( aData )
if I > 1 then
Exit For
end if
if I > 0 then
nTarget = nTarget & "."
end if
nTarget = nTarget & aData(I)
Next
GetOSVersion = CDbl( nTarget )
End Function
@END
[[実行例]]
@DIV
regedit.wsf HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft
@END
|