[본문스크랩] WScript
Dim WshShell : Set WshShell = WScript.CreateObject("WScript.Shell")
Return = WshShell.RegRead(strRegName)
Return = WshShell.RegRead("HKCU\Software\Microsoft\Notepad\lfFaceName") ' 굴림
Return = WshShell.RegRead("HKCU\Software\Winamp\") ' C:\Program Files\Winamp
Return = WshShell.RegRead("HKCU\Software\WinRAR\") ' 기본값 없어서 에러 발생.
- strRegName : key or value-name
' strRegName의 루트키 약자
HKEY_CURRENT_USER : HKCU
HKEY_LOCAL_MACHINE : HKLM
HKEY_CLASSES_ROOT : HKCR
HKEY_USERS : HKEY_USERS
HKEY_CURRENT_CONFIG : HKEY_CURRENT_CONFIG
' 레지스트 경로의 마지막에 백슬래시 \ 가 있으면 키, 없으면 값의 이름을 가리킨다.
' 키나 값이 존재하지 않을 경우, 값이 바이너리값인 경우 -> 에러 발생.
' 키의 default value 가 존재하지 않을 경우 -> 에러 발생.
' REG_SZ 값은 String 을 읽어온다.
' REG_DWORD 값은 dword 값이 아닌 실제 정수값을 읽어온다.
' REG_BINARY 값은 읽지 못한다. (에러 발생)
' REG_EXPAND_SZ 값은 String 문자열 그대로 읽어온다.
=========================================================
WshShell.RegWrite strRegName, anyValue [, strType]
- strRegName : key or value-name
' 키 추가 : strRegName에 \ 를 붙여준다.
' 이름 추가 : strRegName에 \ 를 붙이지 않음.
' strRegName에 \ 붙이고 Value 가 공백(zero-length string) 이면 빈 새 키가 생성된다
- anyValue
' value에 Dword 값 입력시에는 dowrd값이 아닌 실제 정수(십진수)로 입력해야 함.
' value에 쌍따옴표 포함된 String 입력시 다시 쌍따옴표로 감싸주거나 Chr(34) 를 이용한다.
' value에 경로문자 \가 포함된 String 입력시 \ 는 \\ 로 바꿔 입력할 필요가 없다.
' value에 환경변수 포함된 String 입력하면 변환된 값이 아닌 환경변수 문자열 그대로 입력된다.
- strType (Registry Data Type)
REG_SZ : 문자열 (String)
REG_DWORD : 정수 (Integer)
REG_EXPAND_SZ : 문자열 ( %comspec% 등과 같은 환경 변수를 포함하는 경우)
REG_BINARY : 이진 문자열
' 값의 형식 지정하지 않으면 REG_SZ 로 인식
' REG_MULTI_SZ 값 입력은 지원되지 않음.
WshShell.RegWrite "HKCU\Software\AAA\", "" ' 빈 새키 생성
WshShell.RegWrite "HKLM\...\ValName", 1000, "REG_DWORD" ' dword:000003e8 입력시
WshShell.RegWrite "HKCU\..", """%ProgramFiles%\..""", "REG_EXPAND_SZ"
Dim WshEnv : Set WshEnv = WshShell.Environment("Process")
Dim ProgramDir : ProgramDir = WshEnv("ProgramFiles")
WshShell.RegWrite "HKCU\..", Chr(34) & ProgramDir & "\some.txt" & Chr(34), "REG_SZ"
' REG_EXPAND_SZ타입은 %~%를 문자열 그대로 입력.
' 맞는 값으로 변환시켜 입력하려면 Environment 등을 이용하여 값을 얻어 입력해야 함.
=========================================================
WshShell.RegDelete strRegName
- strName : key or value-name
WshShell.RegDelete "HKCU\MyNewKey\" ' 키 삭제 : 맨 뒤에 \ 를 붙여준다
WshShell.RegDelete "HKCU\MyNewKey\MyValue" ' 이름 삭제 : 맨 뒤에 \ 를 붙이지 않음
' 레지스트리 읽어서 .reg 파일로 저장
Set WshShell = CreateObject("WScript.Shell")
sKey = "HKEY_CURRENT_USER\Software\Microsoft\Notepad"
fName = "c:\TEMP\FirstPage.reg"
sCmd = "regedit /e/a " & Chr(34) & fName & Chr(34) & " " & Chr(34) & sKey & Chr(34)
WshShell.Run "%comspec% /c " & sCmd, 0, True
Set WshShell = Nothing
'================================================================
' 레지스트리 파일 읽어서 Program Files 경로 변경 후 병합하기
Option Explicit
'On Error Resume Next
'Err.Clear
Dim Shell : Set Shell = WScript.CreateObject("WScript.Shell")
Dim FSO : Set FSO = WScript.CreateObject("Scripting.FileSystemObject")
Dim ProgramDir : ProgramDir = Shell.Environment("Process").Item("ProgramFiles")
Const FindLong = "C:\\Program Files"
Const FindShort = "C:\\PROGRA~1"
Dim ProgArray, ProgLong, ProgShort
ProgArray = Split (ProgramDir, "\")
ProgLong = ProgArray(1)
ProgShort = ProgArray(1)
If Len(ProgLong) > 8 Then
ProgShort = Left(ProgLong, 6) & "~1" ' PROGRA~1
End If
Dim RepLong : RepLong = ProgArray(0) & "\\" & ProgLong
Dim RepShort : RepShort = ProgArray(0) & "\\" & ProgShort
' 레지파일의 경로 구분자는 \가 아닌 \\
Dim RegFile : RegFile = "install.reg"
Dim ts, strLine, newLine
Dim newReg : newReg = ""
If FSO.FileExists(RegFile) Then
Set ts = FSO.OpenTextFile(RegFile, 1) ' 1 => ForReading
Do Until ts.AtEndOfStream
strLine = ts.ReadLine
newLine = Replace(strLine, FindLong, RepLong, 1, -1, 1)
newLine = Replace(newLine, FindShort, RepShort, 1, -1, 1)
newReg = newReg & newLine & vbCrLf
Loop
ts.Close
Dim fTmp : fTmp = FSO.GetAbsolutePathName(FSO.GetTempName)
FSO.CreateTextFile(fTmp)
Dim getTmp : Set getTmp = FSO.GetFile(fTmp)
Dim tsTmp : Set tsTmp = getTmp.OpenAsTextStream(2, True) ' Const ForWriting = 2
tsTmp.Write(newReg): tsTmp.Close
Shell.Run "%COMSPEC% /C regedit /s " & Chr(34) & fTmp & Chr(34), 0, True
FSO.DeleteFile fTmp, True
End If
Set Shell = Nothing
Set FSO = Nothing
WScript.Quit
'================================================================
' 프로그램 설치되었는지 여부 검사하기
Set WshShell = CreateObject("WScript.Shell")
If WshShell.RegRead("HKCR\.BMP\\") = "ACDC_BMP" Then
WScript.Echo "ACDSee installed."
Else
WScript.Echo "You can install ACDSee."
End If
Set WshShell = Nothing