SQLの窓

2019年01月12日


VBScript : XCOPYで新しいファイルのみバックアップする為のスクリプトを作成するスクリプト

⭕ 1) ディレクトリ選択でバックアップするフォルダを決定 ⭕ 2) カレント(このスクリプトを実行したフォルダ)にスクリプトが作成されます ⭕ 3) 新しいスクリプトを実行 ⭕ 4) カレントにバックアップ用のフォルダが作成されます ⭕ 5) バックアップするフォルダ内をそのフォルダ内に全てコピーします ▼ 実行時に表示されるフォルダ選択 XCOPY なので、2回目以降は新しいファイルのみコピーします ▼ 作成されたスクリプトのサンプルです
strName = "BK_C_temp_lightbox"
strTarget = "C:\temp\lightbox"
strBackupFolder = "C:\tmp\vbs"
if MsgBox( strTarget & vbCrLf & "のバックアップを開始します。よろしいですか? (保存先:" & strBackupFolder & "\" & strName & ")", 1 ) = 2 then
	Wscript.Quit
end if
Set WshShell = Wscript.CreateObject( "WScript.Shell" )
ExecCommand = "cmd.exe /C ""xcopy.exe """ & strTarget & """ """ & strBackupFolder & "\" & strName & "\"" /D /E /C /S /Y & PAUSE"""
Call WshShell.Run( ExecCommand )


▼ 使用するオプション
/D : コピー元の日付がコピー先の日付より新しいファイルだけをコピーします
/E : ディレクトリまたはサブディレクトリが空であってもコピーします
/C : エラーが発生してもコピーを続けます
/S : 空の場合を除いて、ディレクトリとサブディレクトリをコピーします
/Y : 既存のファイルを上書きする前に確認のメッセージを表示しません
一番重要なのは、/D です。/S /E で、存在するディリクトリはすべてコピーされます。/E /Y によって、最後まで停止する事なく実行されます。 追加で使う事が想定されるオプション コピーしたくないディレクトリやファイルがある場合、以下のように指定します。 /EXCLUDE:ファイルのパス ファイルのパスが示すテキストファイル内に、除外するディレクトリやファイルにある文字列の一部を1 行に 1 つずつ記述します。 その文字列が、コピー対象ファイルの絶対パスの一部と一致した場合、そのファイルはコピーから除外されます。 ▼ 例 ⭕ "\obj\" という文字列を指定するとディレクトリ obj の下の全ファイルが除外 されます。 ⭕ ".obj" という文字列を指定すると .obj という拡張子のファイルがすべて除外されます ソースコード
' ***********************************************************
' 処理開始
' ***********************************************************
Set Fso = Wscript.CreateObject( "Scripting.FileSystemObject" )
Set Shell = Wscript.CreateObject( "Shell.Application" )

' ***********************************************************
' 実行中ディレクトリの取得
' ***********************************************************
strPath = Wscript.ScriptFullName 
Set objFile = Fso.GetFile( strPath )
strBackupFolder = Fso.GetParentFolderName( objFile )

' ***********************************************************
' バックアップ対象ディレクトリの取得
' ***********************************************************
' @ 省略すると、ルートはデスクトップ
Set objFolder = Shell.BrowseForFolder( 0, "バックアップするフォルダを選択してください", &H4B )

' A 文字列による直接指定
' strRoot = "c:\"
' Set objFolder = Shell.BrowseForFolder( 0, "バックアップするフォルダを選択してください", &H4B, strRoot )

' B ルートを番号で指定( この場合は C:\Users\username\AppData\Local )
' ※ あまり現実的ではない特殊ディレクトリの選択
' nRoot = &h1c
' Set objFolder = Shell.BrowseForFolder( 0, "バックアップするフォルダを選択してください", &H4B, nRoot )

if objFolder is nothing then
	WScript.Quit
end if
if not objFolder.Self.IsFileSystem then
	WScript.Echo "ファイルシステムではありません"
	WScript.Quit
end if

strTargetFolder = objFolder.Self.Path
strName = Replace( strTargetFolder, ":", "" )
strName = Replace( strName, "\", "_" )
strName = Replace( strName, " ", "" )
strName = "BK_" & strName

' ***********************************************************
' スクリプト作成
' ***********************************************************
Set OutFile = Fso.OpenTextFile( strBackupFolder & "\" & strName & ".vbs", 2, True )

OutFile.WriteLine "strName = """ & strName & """"
OutFile.WriteLine "strTarget = """ & strTargetFolder & """"
OutFile.WriteLine "strBackupFolder = """ & strBackupFolder & """"
OutFile.Write "if MsgBox( strTarget & vbCrLf & ""のバックアップを開始します。よろしいですか? (保存先:"" & strBackupFolder & ""\"" & strName & "")"""
OutFile.WriteLine ", 1 ) = 2 then"
OutFile.WriteLine "	Wscript.Quit"
OutFile.WriteLine "end if"

OutFile.WriteLine "Set WshShell = Wscript.CreateObject( ""WScript.Shell"" )"
OutFile.Write "ExecCommand = ""cmd.exe /C """"xcopy.exe """""" & strTarget & """""" """""" & strBackupFolder & ""\"" & strName & ""\"""""
OutFile.WriteLine " /D /E /C /S /Y & PAUSE"""""""
OutFile.WriteLine "Call WshShell.Run( ExecCommand )"

OutFile.Close

WScript.Echo "バックアップスクリプト : " &  strName & ".vbs" & " を作成しました"


' ***********************************************************
' ディレクトリ指定用番号
' https://docs.microsoft.com/ja-jp/windows/desktop/api/shldisp/ne-shldisp-shellspecialfolderconstants
' typedef enum {
' 	ssfALTSTARTUP = 0x1d,
' 	ssfAPPDATA = 0x1a,
' 	ssfBITBUCKET = 0x0a,
' 	ssfCOMMONALTSTARTUP = 0x1e,
' 	ssfCOMMONAPPDATA = 0x23,
' 	ssfCOMMONDESKTOPDIR = 0x19,
' 	ssfCOMMONFAVORITES = 0x1f,
' 	ssfCOMMONPROGRAMS = 0x17,
' 	ssfCOMMONSTARTMENU = 0x16,
' 	ssfCOMMONSTARTUP = 0x18,
' 	ssfCONTROLS = 0x03,
' 	ssfCOOKIES = 0x21,
' 	ssfDESKTOP = 0x00,
' 	ssfDESKTOPDIRECTORY = 0x10,
' 	ssfDRIVES = 0x11,
' 	ssfFAVORITES = 0x06,
' 	ssfFONTS = 0x14,
' 	ssfHISTORY = 0x22,
' 	ssfINTERNETCACHE = 0x20,
' 	ssfLOCALAPPDATA = 0x1c,
' 	ssfMYPICTURES = 0x27,
' 	ssfNETHOOD = 0x13,
' 	ssfNETWORK = 0x12,
' 	ssfPERSONAL = 0x05,
' 	ssfPRINTERS = 0x04,
' 	ssfPRINTHOOD = 0x1b,
' 	ssfPROFILE = 0x28,
' 	ssfPROGRAMFILES = 0x26,
' 	ssfPROGRAMFILESx86 = 0x30,
' 	ssfPROGRAMS = 0x02,
' 	ssfRECENT = 0x08,
' 	ssfSENDTO = 0x09,
' 	ssfSTARTMENU = 0x0b,
' 	ssfSTARTUP = 0x07,
' 	ssfSYSTEM = 0x25,
' 	ssfSYSTEMx86 = 0x29,
' 	ssfTEMPLATES = 0x15,
' 	ssfWINDOWS = 0x24
' } ShellSpecialFolderConstants;
' ***********************************************************



更新履歴
2009-06-28 : 記事作成
2013-04-02 : ダウンロード追加
2015-08-07 : ダウンロードを zip 化( Google Chrome 対応 )
2018-04-21 : 作成したスクリプト内の保存するフォルダ名を固定化( 変更を容易にするため )


関連する Microsoft ドキュメント

Shell Reference
Shell Objects for Scripting and Microsoft Visual Basic
Shell object
Shell.BrowseForFolder method



posted by lightbox at 2019-01-12 14:42 | VBScript | このブログの読者になる | 更新情報をチェックする

2018年12月21日


指定した位置でレジストリエディタを開く為の VBScript をダウンロードします

コンボボックスにいくつかサンプルを用意しています。入力フィールドに直接セットしてもいいですし、いったんダウンロードしたソースの先頭のパスを変更しても OK です。

理屈としては、regedit は、終了する時に表示していたパスをレジストリに保存しており、その場所に書き込む事によって regedit を起動した時に好きな場所が表示されるようにしています。

▼ 保存場所
HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\Applets\Regedit\LastKey
※ IE11 ソースエディタは、インターネットオプションのプログラムでメモ帳を選択してからアクセスします


▼ 一度ダウンロードしたソースコードの先頭の strParam にレジストリのパスを設定するだけで使えます
strParam = "HKEY_LOCAL_MACHINE\SOFTWARE\WOW6432Node\ODBC\ODBCINST.INI"

' レジストリ書き込み用
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





posted by lightbox at 2018-12-21 13:43 | VBScript | このブログの読者になる | 更新情報をチェックする

2018年02月20日


VBScript + PowerShell : PowerShell がファイルを開くダイアログで取得したパスをテキストファイル経由で VBScript に戻して使用する

PowerShell : ファイルを開くダイアログを使うのに System.Windows.Forms を参照する二つの方法 で、C# のコードを使って PowerShell 内で『ファイルを開くダイアログ』を使用しました。

ここでは、その結果のパスを VBScript に渡す方法として、TEMP フォルダに適当なファイルを作成して引き渡します。呼び出しはもちろん VBScript から行います。この呼び出しは同期処理なので、特に問題なく順番に実行されます。

方法として、PowerShell の標準出力を VBScript で取り込む方法もあるのですが、その場合は VBScrip からの呼び出しが非同期となってしまうので、ユーザ側の操作が少し煩雑になるのでテキストファイル渡しとしました。

さらにもう一つ、InternetExplorer.Application オブジェクトを使用してクリップボード経由で取り込む方法もありますが、IE11 はさすがにいつどうなるか解らないので避けたいところです。( htmlfile オブジェクトでもできるはずですが、やはりテキストファイル経由が確実と思われます )

Windows7 の PowerShell で -Sta 引数を使う

PowerShell スクリプトの呼び出しは、セキュリティ上の問題で設定が必要なので、PowerShell の引数で一時的に実行可能にするのですが、Windows7 で -Sta を指定しないと動作しないので注意です。(Windows10 は動いています。Windows7 : バージョン2 / Windows10 : バージョン5 )

get_ps_tempfile.vbs
Set WshShell = WScript.CreateObject("WScript.Shell")
Set Fso = CreateObject( "Scripting.FileSystemObject" )

' 同期処理で実行( コマンドプロンプトは開かない )
Call WshShell.Run( "powershell -NoProfile -ExecutionPolicy Unrestricted .\open_file_dialog_cs.ps1", 0, True )
' Windows7 では、powershell -Sta -NoProfile -ExecutionPolicy Unrestricted .\open_file_dialog_cs.ps1

strPath = WshShell.ExpandEnvironmentStrings("%temp%")

' PowerShell 内の C# が出力したパスを取得
Set objHandle = Fso.OpenTextFile( strPath & "\_param.txt", 1 )
strParam = objHandle.ReadAll
objHandle.Close

if strParam = "キャンセルされました" then
	MsgBox "ここで処理を中断"
else
	' 取得したパス
	MsgBox strParam
end if



PowerShell 独特の世界をいまさら覚える時間もったいないので、C# で書いたほうがいろいろ手っ取り早いと思います。(取り回しは、VBScript だけでなんとかなりそうな気もしてます)

open_file_dialog_tempfile_cs.ps1
$code = @"
using System;
using System.IO;
using System.Text;
using System.Windows.Forms;
public class MyClass {
	public static string Open() {

		OpenFileDialog obj = new OpenFileDialog();
		obj.Filter = "Excel|*.xlsx|旧 Excel|*.xls|全て|*.*";
		obj.InitialDirectory = @"C:\";

		if (obj.ShowDialog() == DialogResult.OK) {
			return obj.FileName;
		}
		else {
			return "キャンセルされました";
		}

	}
	public static void Put(string param) {
		string path = Environment.GetEnvironmentVariable("temp");
		if (path == null) {
			path = Path.GetDirectoryName(System.Reflection.Assembly.GetExecutingAssembly().Location);
		}
		path = string.Format(@"{0}\_param.txt", path);

		// SHIFT_JIS で書き込み
		Encoding Enc = Encoding.GetEncoding(932);
		using (StreamWriter WriteFile = new StreamWriter( path, false, Enc )) {
			WriteFile.Write(param);
			WriteFile.Close();
		}
	}
}
"@

Add-Type -Language CSharp -TypeDefinition $code -ReferencedAssemblies ("System.Windows.Forms")

$param = [MyClass]::Open()
[MyClass]::Put($param)



posted by lightbox at 2018-02-20 18:20 | VBScript | このブログの読者になる | 更新情報をチェックする

2018年02月19日


VBScript : XMLファイルのテキストノードの値の更新

概要

ターゲットは、WEB 上にあるサンプルXML です。その中にある param-value の中の一つを書き換えます( 中の値によって対象かどうかを判断しています )

objXML.async = False を指定しないと、処理中のどの時点で XML ドキュメントが有効になるかを判断できません。VBScript はイベント処理がオブジェクトに依存するので、このようにしています。

※ VBScript は SHIFT_JIS で記述されていますが、XML を UTF-8 で記述しているので、オブジェクト的に問題ありません。書き出した sample.xml も utf8n で保存されています。
' オブジェクト作成
Set Fso = CreateObject("Scripting.FileSystemObject")
Set objXML = CreateObject("Msxml2.DOMDocument.6.0")

' WEB からのデータ取得をその場で完了させる
objXML.async = False

' スクリプトのあるディレクトリ
strCurDir = WScript.ScriptFullName
Set obj = Fso.GetFile( strCurDir )
Set obj = obj.ParentFolder
strCurDir = obj.Path

' XML を読み込み
objXML.load( "https://lightbox.sakura.ne.jp/demo/sample.xml" )

' 全体の表示
MsgBox( objXML.xml )

Set ParamValue = objXML.getElementsByTagName("param-value")

For I = 0 to ParamValue.length - 1

	if ParamValue.item(I).firstChild.nodeValue = "UTF8N で保存してます" then
		' 置き換え
		ParamValue.item(I).firstChild.nodeValue = "本文を変更しました"
		Exit For
	end if
Next

' XML を保存
objXML.save( strCurDir & "\sample.xml" )



MsgBox の結果



<?xml version="1.0" encoding="UTF-8"?>
<note>
  <param-value>あなた</param-value>
  <param-value>私</param-value>
  <param-value>XMLサンプル</param-value>
  <param-value>UTF8N で保存してます</param-value>
</note>






タグ:VBScript xml DOM
posted by lightbox at 2018-02-19 14:16 | VBScript | このブログの読者になる | 更新情報をチェックする

2018年02月16日


HTA : 指定したキーでレジストリエディタを開く



WSH : 指定したキーでレジストリエディタを開く は、WSH での処理なので、どちらかと言えばバッチ処理です。連続してレジストリエディタの作業をするのでは無く、その場限りの処理で使ったりします( とにかくある場所のレジストリキーを開きたい等 )

このサンプルは、ある目的の作業中にレジストリエディタの特定のキーを、何度も連続して開く事を想定していますので、GUI を持つ HTA を使っています。
右端のアイコンよりダウンロードできます
<SCRIPT language="VBScript">

	Dim WshShell

	Set WshShell = CreateObject( "WScript.Shell" )

	Dim objWMIService

	Set objWMIService = GetObject("winmgmts:{impersonationLevel=impersonate}!\\.\root\cimv2")

</SCRIPT>
<html>
<head>
<title>指定したキーでレジストリエディタを開く</title>
<meta http-equiv="content-type" content="text/html; charset=SHIFT_JIS">
<HTA:APPLICATION ID="Sqlwin"
	BORDERSTYLE="sunken"
	INNERBORDER="yes"
	SCROLL="no"
	ICON="http://winofsql.jp/WinOfSql.ico"
>

<style type="text/css">
* {
	font-family: "メイリオ"
	font-size: 16px;
}
body {
	margin:0;
	background-color: white;
}

.action {
	margin-top: 20px;
	margin-left: 20px;
}

</style>

<SCRIPT language="VBScript">

Function ActionOpenReg( str )

	Dim colProcessList

	Set colProcessList = objWMIService.ExecQuery _ 
		("Select * from Win32_Process Where Name = 'regedit.exe'") 
	For Each objProcess in colProcessList 
		WshShell.AppActivate("レジストリ エディタ")
		WshShell.SendKeys ("%{F4}")
	Next 

	Call window.setTimeout("Call OpenReg(""" & str & """)", 500 )

End Function

Function OpenReg( str )

	Dim colProcessList

	Set colProcessList = objWMIService.ExecQuery _ 
		("Select * from Win32_Process Where Name = 'regedit.exe'") 
	For Each objProcess in colProcessList 
		on error resume next
		objProcess.Terminate() 
		on error goto 0
	Next 

	Dim strRegSavePoint

	if GetOSVersion() >= 6 then
		str = "コンピュータ\" & str
	else
		str = "マイ コンピュータ\" & str
	end if

	strRegSavePoint = "Software\Microsoft\Windows\CurrentVersion\Applets\Regedit\LastKey"
	WshShell.RegWrite "HKCU\" & strRegSavePoint, str, "REG_SZ"

	Call WshShell.Run( "regedit" )

End Function

' **********************************************************
' OS バージョンの取得
' **********************************************************
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
</SCRIPT>


</head>
<body>

<input class="action" type="text" id="key" style='width:600px;' value="HKEY_LOCAL_MACHINE\Software\Microsoft\Windows\CurrentVersion\Run">
<input class="action" type="button" value=" 開く " onClick='Call ActionOpenReg(document.getElementById("key").value)'>

</BODY>
</html>
<SCRIPT for="window" event="onload" language="VBScript">

	window.focus()
	top.moveTo 0, 0
	top.resizeTo 800, 120

</SCRIPT>

<SCRIPT for="window" event="onunload" language="VBScript">


</SCRIPT>




posted by lightbox at 2018-02-16 08:27 | VBScript | このブログの読者になる | 更新情報をチェックする

2018年01月28日


WSH(VBScript) : 指定したキーでレジストリエディタを開く

今まで、コマンドプロンプトやエクスプローラから実行するのが一般的でしたが、Windows10 の PowerShell ウインドウからも実行できます( コマンドプロンプトと一応は同じです )



open_reg.vbs
ソースツールバーの右端のアイコンよりダウンロードできます
Set obj = Wscript.CreateObject("Shell.Application")
Dim strParam
if Wscript.Arguments.Count = 0 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

	strParam = Trim( strParam )
	' 無ければ入力
	if strParam = "" then
		strParam = InputBox("開く対象となるレジストリーのキーを入力して下さい","指定したキーでレジストリエディタを開く","HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft")
	end if

	' 管理者として実行を強制する
	obj.ShellExecute "wscript.exe", WScript.ScriptFullName & " runas """ & strParam & """", "", "runas", 1
	Wscript.Quit

else
	strParam = WScript.Arguments(0)
	if strParam <> "runas" then
		' 管理者として実行を強制する
		Set obj = Wscript.CreateObject("Shell.Application")
		if Wscript.Arguments.Count = 1 then
			obj.ShellExecute "wscript.exe", WScript.ScriptFullName & " runas """ & strParam & """", "", "runas", 1
			Wscript.Quit
		end if
	end if
end if


' 引数
strParam = WScript.Arguments(1)

strParam = Trim( strParam )

' レジストリ書き込み用
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

ファイル名を指定、またはコマンドプロンプトから実行では、以下のようにします。
wscript.exe open_reg.vbs HKEY_CURRENT_USER\Console
クリップボードにキーがある場合は open_reg.vbs をそのままエクスプローラからダブルクリックします。 クリツプボードにデータが空の場合は、入力ダイアログを表示します(上記コードではデフォルトとして HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft を表示しています) 権限やセキュリティの関係でいろいろダイアログが表示されると事がほとんどです。 ▼ IE11 のクリップボード操作の制限 (IE の設定で、常に使用可能にする事もできます) また、これ以外にも、regedit.exe を実行する際に、管理者実行の確認がありますが、サンプルとして常に管理者権限で実行できるようにしています。。 管理者権限を取得しない単純コード
ソースツールバーの右端のアイコンよりダウンロードできます
Dim strParam

if Wscript.Arguments.Count = 0 then
	strParam = "HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\ComputerName\ComputerName"
else
	strParam = WScript.Arguments(0)
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





posted by lightbox at 2018-01-28 21:58 | VBScript | このブログの読者になる | 更新情報をチェックする
Seesaa の各ページの表示について
Seesaa の 記事がたまに全く表示されない場合があります。その場合は、設定> 詳細設定> ブログ設定 で 最新の情報に更新の『実行ボタン』で記事やアーカイブが最新にビルドされます。

Seesaa のページで、アーカイブとタグページは要注意です。タグページはコンテンツが全く無い状態になりますし、アーカイブページも歯抜けページはコンテンツが存在しないのにページが表示されてしまいます。

また、カテゴリページもそういう意味では完全ではありません。『カテゴリID-番号』というフォーマットで表示されるページですが、実際存在するより大きな番号でも表示されてしまいます。

※ インデックスページのみ、実際の記事数を超えたページを指定しても最後のページが表示されるようです

対処としては、このようなヘルプ的な情報を固定でページの最後に表示するようにするといいでしょう。具体的には、メインの記事コンテンツの下に『自由形式』を追加し、アーカイブとカテゴリページでのみ表示するように設定し、コンテンツを用意するといいと思います。


※ エキスパートモードで表示しています

アーカイブとカテゴリページはこのように簡単に設定できますが、タグページは HTML 設定を直接変更して、以下の『タグページでのみ表示される内容』の記述方法で設定する必要があります

<% if:page_name eq 'archive' -%>
アーカイブページでのみ表示される内容
<% /if %>

<% if:page_name eq 'category' -%>
カテゴリページでのみ表示される内容
<% /if %>

<% if:page_name eq 'tag' -%>
タグページでのみ表示される内容
<% /if %>
この記述は、以下の場所で使用します
container 終わり

フリーフォントで簡単ロゴ作成
フリーフォントでボタン素材作成
フリーフォントで吹き出し画像作成
フリーフォントではんこ画像作成
ほぼ自由に利用できるフリーフォント
フリーフォントの書体見本とサンプル
画像を大きく見る為のウインドウを開くボタンの作成

CSS ドロップシャドウの参考デモ
BUTTONS (CSS でボタン)
イラストAC
ぱくたそ
写真素材 足成
フリーフォント一覧
utf8 文字ツール
右サイド 終わり
base 終わり