これらの文字列をRegWrite用に適切にフォーマットする方法を理解しようとしていますが、理解できませんでした。終了すると、スクリプトはレジストリのいくつかの領域を変更して、複数のExcel2010ブックが異なるウィンドウで開かれるようにします。
環境:
Windows 7 Professional x64
Excel 2010
Option Explicit
' =======================================================
' Purpose: This will let you open each Excel Spreadsheet in a seperate window.
' =======================================================
Const HKCR = &H80000000
dim objShell, objReg, strComputer
strComputer = "."
set objShell = WScript.CreateObject("WScript.Shell")
Set objReg = GetObject("winmgmts:{impersonationLevel=impersonate}!\\" & strComputer & "\root\default:StdRegProv")
' objShell.RegDelete "HKCR\Excel.Sheet.12\shell\Open\ddeexec\"
objReg.DeleteKey HKCR, "Excel.Sheet.12\shell\Open\ddeexec"
objShell.RegWrite "HKCR\Excel.Sheet.12\shell\Open\command\", "C:\Program Files (x86)\Microsoft Office\Office14\EXCEL.EXE" "%1", "REG_SZ"
objShell.RegWrite "HKCR\Excel.Sheet.12\shell\Open\command\command", "xb'BV5!!!!!!!!!MKKSkEXCELFiles>VijqBof(Y8'w!FId1gLQ "%1"", "REG_MULTI_SZ"
set objShell = Nothing
問題1)何らかの理由で、ddeexecレジストリキーを削除できません。それにはサブキーがあり、いくつかの読書を通して、サブキーも使用しているキーを削除できないことがわかったobjShell.RegDelete
ので、私は使用しようとしましたobjReg.DeleteKey
が、どちらも成功しませんでした。すべてのサブキーを個別に削除する必要のない回避策については、何も見つかりませんでした。
問題2)HKCR \ Excel.Sheet.12 \ shell \ open \ commandに書き込もうとしているテキストに、適切にエスケープできない引用符とスペースがたくさん含まれています。レジストリの値は次のようになります"C:\Program Files (x86)\Microsoft Office\Office14\EXCEL.EXE" "%1"
問題3)コマンドキーに入れようとしているクレイジーな文字列に「(」が含まれているため、エラー「)expected」が含まれています。問題2のように、正しくフォーマットするように試しました。 。レジストリの値は次のようになりますxb'BV5!!!!!!!!!MKKSkEXCELFiles>VijqBof(Y8'w!FId1gLQ "%1"
私はさまざまなものを使ってみまし& chr(34) &
た""""
が、まだ正しいコンボを思い付いていません。
ありがとう!
編集:最終的な解決策。
Option Explicit
' ============================================
' Purpose: This will let you open each Excel Spreadsheet in a seperate window.
' =======================================================
Const HKEY_CLASSES_ROOT = &H80000000
Dim strComputer, objReg, strKeyPath
' Create WMI registry object
strComputer = "."
Set objReg = GetObject("winmgmts:{impersonationLevel=impersonate}!\\" & strComputer & "\root\default:StdRegProv")
' Delete DDE stuff
strKeyPath = "Excel.Sheet.12\shell\Open\ddeexec"
DeleteSubKeys HKEY_CLASSES_ROOT, strKeyPath
' Modify launch commands
strKeyPath = "Excel.Sheet.12\shell\Open\command\"
objReg.SetStringValue HKEY_CLASSES_ROOT, strKeyPath, "", """C:\Program Files (x86)\Microsoft Office\Office14\EXCEL.EXE"" ""%1"""
objReg.SetMultiStringValue HKEY_CLASSES_ROOT, strKeyPath, "command", Array("xb'BV5!!!!!!!!!MKKSkEXCELFiles>VijqBof(Y8'w!FId1gLQ", """%1""")
' =====================================================================
' Sub: DeleteSubKeys
' HKEY: The specific root Hive you're editing.
' strKeyPath: Path to specific Key under HKEY.
' Purpose: Iterate through all subkeys under strKeyPath and delete them.
' http://technet.microsoft.com/en-us/magazine/2006.08.scriptingguy.aspx
' =====================================================================
Sub DeleteSubKeys(HKEY, strKeyPath)
Dim arrSubkeys, strSubkey
objReg.EnumKey HKEY, strKeyPath, arrSubkeys
If IsArray(arrSubkeys) Then
For Each strSubKey In arrSubkeys
DeleteSubKeys HKEY, strKeyPath & "\" & strSubkey
Next
End If
objReg.DeleteKey HKEY, strKeyPath
End Sub