본문 바로가기
프로그래밍/ASP

[본문스크랩] WScript

by 백룡화검 2010. 4. 23.

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