Archive for the ‘Windows’ Category

コマンドプロンプトの文字コードを変更するには「chcp」というコマンドを実行します。

chcp  コードページ番号

通常は932 : shift_jisです。
他に良く使うものとして、
437 : OEM United Staetes
65001 : utf-8
などがあります。
その他は Code Page Identifiers に記載されています。

chcpコマンドを実行した際、なぜがコマンドプロンプトのウィンドウサイズが変更されることがあります。
コマンドプロンプトのウィンドウのプロパティを変更して大きくすることが出来ます。

また、UTF-8に変更した場合はコマンドプロンプトの表示フォントを「ラスタ フォント」から
「MS ゴシック」に変更する必要があります。

2010年07月3日をもって、マイクロソフトのOSの一部が
サポート終了になります。対象は以下の通り。

・Windows 2000 Professional / server
・Windows XP SP2
・Windows Vista RTM

Windows XPのSP3は2014年08月です。XPは本当に寿命の長いOSですね。
まだまだ現役。Windows 7への移行はゆっくりと進むのですかね。
あと4年もあれば64bitを利用する場面も増えるかな?

2010/03/10 追記

「ファイル名を指定して実行」で、「 shell:sendto 」 と入力すると、簡単に表示出来るようです。
これは便利です。

============================================================
覚え書きです。

Windows Vista/Windoes 7では、以前のWIndows XPや2000と比べ、フォルダの構造などが変わっています。

マウスで右クリックした際に表示される「送る」に、追加アプリケーションを指定する場合の方法です。

1.以下のフォルダを開く。

C:\Users\【ユーザ名】\AppData\Roaming\Microsoft\Windows\SendTo

2.SendTo フォルダにアプリケーションのショートカットをコピーまたは作成する。

以下、Notepad.exeのショートカットを入れた例です。

任意の場所にフォルダを新規作成する。
作成したフォルダ名を以下の通りに変更する。

GodMode.{ED7BA470-8E54-465E-825C-99712043E01C}

フォルダ名の”GodMode”の部分は任意の文字列でも可。

Windows 7 64bit + Office 2010 64Bit ベータにて確認。

*.mdb(~Access2003) へのアクセスには jet(Microsoft.Jet.OLEDB.4.0) によるアクセス、
*.accdb(Access2007~) へのアクセスには ACE(Microsoft.ACE.OLEDB.12.0) を使用する。

jetは、c:\Windows\SysWOW64\cscript.exe (32bit) にて、
ACEは、c:\Windows\system32\cscript.exe (64bit) にて実行する。

vbscriptを利用してOutlook Expressのメールルールをバックアップする例です。
このスクリプトはバックアップファイル(レジストリファイル)の保存先、ファイル名を引数で渡します。

例:
(script名) c:\test.reg

バックアップしたファイルは、ダブルクリックすることでインポートが可能です。
ここでの注意点として、OSを再インストールする度にGUIDが変わってしまいます。
バックアップした時とインポートする時の状況が違う時は、バックアップしたファイルをメモ帳などで開き、
GUIDを置き換える必要があります。

例:
バックアップ元のGUID {xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx}
インポート先のGUID  {zzzzzzzz-zzzz-zzzz-zzzz-zzzzzzzzzzzz}
1.インポート先のGUIDを調べる。
2.バックアップ元のファイルを開き、{xxx~}を置き換える。
メモ帳の場合は「検索する文字列」にバックアップ元のGUIDを、「置換後の文字列」にインポート先のGUIDを入れましょう。

また、このスクリプトでは、reg.exeというファイルを利用しています。Windows XPから標準でインストールされているものになります。
Windows 2000ではreg.exeが入っていないため、使えません…

ソースのダウンロードは こちら です。

Option Explicit

'#######################################################
'# Global-Configration #
'#######################################################

Const OpenTextFileForReading = 1
Const OpenTextFileForWriting = 2
Const OpenTextFileForAppending = 8

Const REG_SZ = 1
Const REG_EXPAND_SZ = 2
Const REG_BINARY = 3
Const REG_DWORD = 4
Const REG_MULTI_SZ = 7

'*************************
' Call Main Program
'*************************
Main()

'*************************
' Start Main Program
'*************************

Sub Main()

'#######################################################
'# Local-Configration #
'#######################################################

Dim OBJ_WshShell 'WSH Shell Object
Dim OBJ_FSO 'File System Object
Dim OBJ_Folders 'Folder Object
Dim OBJ_Args 'Argument Object

Dim COL_Folders 'Collection Object

Dim STR_FileName 'String Object
Dim STR_StoreOwner 'String Object
Dim STR_RulePath 'String Object
Dim STR_LogFolder 'String Object
Dim STR_LogFile 'String Object
Dim STR_Temp 'String Object
Dim i

Set OBJ_WshShell = WScript.CreateObject("WScript.Shell")
Set OBJ_FSO = WScript.CreateObject("Scripting.FileSystemObject")
Set OBJ_Args = WScript.Arguments

'引数チェック
If OBJ_Args.Count = 1 Then

STR_FileName = OBJ_Args(0)

If Right(LCase(STR_FileName), 4) = ".reg" Then

Else

STR_FileName = STR_FileName & ".reg"

End If

If OBJ_FSO.FileExists(STR_FileName) Then

WScript.Echo "エラー:出力先に同名のファイルが存在します。処理を続行出来ません。"
WScript.Quit 1

End If

Else

WScript.Echo "エラー:引数の数が不正です。処理を続行出来ません。プログラムを中止します。"
WScript.Quit 1

End If

'【Get Mail Store Owner & Mail Store Path】
STR_StoreOwner = OBJ_WshShell.RegRead("HKEY_CURRENT_USER\Identities\Last User ID")
If Err.Number <> 0 Then

WScript.Echo "エラー:処理実行中にエラーが発生しました。処理を続行出来ません。プログラムを中止します。"
Err.Clear
Set OBJ_FSO = Nothing
WScript.Quit 1

End If

STR_RulePath = """HKEY_CURRENT_USER" & "\Identities\" & STR_StoreOwner & "\Software\Microsoft\Outlook Express\5.0\Rules"""
If Err.Number <> 0 Then

WScript.Echo "エラー:処理実行中にエラーが発生しました。処理を続行出来ません。プログラムを中止します。"
Err.Clear
Set OBJ_FSO = Nothing
WScript.Quit 1

End If

'レジストリのExport
OBJ_WshShell.Run "reg.exe export " & STR_RulePath & " " & STR_FileName, 0, True
If Err.Number = 0 Then

WScript.Echo "レジストリのバックアップは正常に完了しました。出力したファイルは " & STR_FileName & " です。"
WScript.Quit 0

Else

WScript.Echo "エラー:レジストリのバックアップに失敗しました。"
WScript.Quit 1

End If

End Sub

vbscriptにてOutlook Exressのメールファイル(.dbx)の一覧とサイズを出力する例です。

Option Explicit
'On Error Resume Next

'#######################################################
'# Global-Configration #
'#######################################################

Const OpenTextFileForReading = 1
Const OpenTextFileForWriting = 2
Const OpenTextFileForAppending = 8

Const HKEY_CURRENT_USER = &H80000001

'*************************
' Call Main Program
'*************************
Main()

'*************************
' Start Main Program
'*************************

Sub Main()

'#######################################################
'# Local-Configration #
'#######################################################

Dim OBJ_WshShell 'WSH Shell Object
Dim OBJ_FSO 'File System Object
Dim OBJ_Folders 'Folder Object

Dim COL_Folders 'Collection Object

Dim STR_FileName 'String Object
Dim STR_StoreOwner 'String Object
Dim STR_StorePath 'String Object
Dim STR_LogFolder 'String Object
Dim STR_LogFile 'String Object
Dim STR_Temp 'String Object
Dim i

Set OBJ_WshShell = WScript.CreateObject("WScript.Shell")
Set OBJ_FSO = WScript.CreateObject("Scripting.FileSystemObject")

'【Get Mail Store Owner & Mail Store Path】
STR_StoreOwner = OBJ_WshShell.RegRead("HKEY_CURRENT_USER\Identities\Last User ID")
If Err.Number <> 0 Then

STR_Work = MsgBox("処理実行中にエラーが発生しました。処理を続行出来ません。プログラムを中止します。" & vbCrLf & "Error Code: RegRead Error-001" ,vbOkOnly + vbCritical,"エラーが発生しました")
Err.Clear
Set OBJ_FSO = Nothing
WScript.Quit 1

End If

STR_StorePath = OBJ_WshShell.RegRead("HKEY_CURRENT_USER\Identities\" & STR_StoreOwner & "\Software\Microsoft\Outlook Express\5.0\Store root")
If Err.Number <> 0 Then

STR_Work = MsgBox("処理実行中にエラーが発生しました。処理を続行出来ません。プログラムを中止します。" & vbCrLf & "Error Code: RegRead Error-002" ,vbOkOnly + vbCritical,"エラーが発生しました")
Err.Clear
Set OBJ_FSO = Nothing
WScript.Quit 1

End If

WScript.Echo "No,ファイル名,ファイルサイズ(MB)"

'【Get MailBox Folder & File-Size】
Set OBJ_Folders = OBJ_FSO.GetFolder(STR_StorePath)
Set COL_Folders = OBJ_Folders.Files
i = 1

For Each STR_FileName In COL_Folders

If LCase(Right(STR_FileName,4)) = ".dbx" Then

WScript.Echo i & "," & STR_FileName & "," & Round(STR_FileName.Size / 1000000,1)
i = i + 1

End If

Next

End Sub

WSHを使用して、OSの起動時間と起動してからの経過時間を表示する例です。
WMIで各値を取得するのですが、UTCで値が返ってきますので、このサイトで紹介した
UTCを変換する関数を利用しています。

Option Explicit

Call Uptime()

'===========================================================================

Sub Uptime()

Dim OBJ_WMIService
Dim OBJ_Item
Dim COL_Item

Dim STR_Computer
Dim STR_NameSpace

Dim STR_BootUpTime
Dim STR_LocalTime
Dim STR_Work
Dim STR_Day
Dim STR_Hour
Dim STR_Min

STR_Computer = "."
STR_NameSpace = "/root/cimv2"

Set OBJ_WMIService = GetObject("winmgmts:" & "{impersonationLevel=impersonate}!\\" & STR_Computer & STR_NameSpace)

If Err.Number <> 0 Then

WScript.Echo "Error=" & Err.Number
WScript.Echo "ERROR Code=" & Err.Number & " Description=" & Err.Description
Err.Clear
Exit Sub

End If

Set COL_Item = OBJ_WMIService.ExecQuery("SELECT * FROM Win32_OperatingSystem")

For Each OBJ_Item In COL_Item

STR_BootUpTime = OBJ_Item.LastBootUpTime
STR_LocalTime = OBJ_Item.LocalDateTime

Next

STR_BootUpTime = ConvertUTCToDate(STR_BootUpTime)
STR_LocalTime = ConvertUTCToDate(STR_LocalTime)

STR_Work = DateDIff("n", STR_BootUpTime, STR_LocalTime)

STR_Day = Fix((STR_Work / 60 ) / 24)
STR_Hour = (STR_Work / 60) Mod 24
STR_Min = STR_Work Mod 60

WScript.Echo "起動時刻: " & STR_BootUpTime
WScript.Echo "経過時間: " & STR_Day & " 日 " & STR_Hour & " 時間 " & STR_Min & " 分"

End Sub

'===========================================================================

Function ConvertUTCToDate(STR_DateTime)

ConvertUTCToDate = CDate(Mid(STR_DateTime, 5, 2) & "/" & _
Mid(STR_DateTime, 7, 2) & "/" & Left(STR_DateTime, 4) & " " & _
Mid(STR_DateTime, 9, 2) & ":" & _
Mid(STR_DateTime, 11, 2) & ":" & _
Mid(STR_DateTime, 13, 2))

End Function

フォルダを右クリックした際のメニュを追加します。
例ではコマンドプロンプトを右クリックしたフォルダから起動します。

1. レジストリエディタを起動します。

2. 以下の階層まで表示させます。
HKEY_CLASSES_ROOT\Folder\shell

3. 右クリック時に表示させたい名称を決め、右クリックにて「新規」→「キー」を選択し、決めたキー名を入力します。
例では 「コマンドプロンプト」とします

4. 作成した「コマンドプロンプト」キーを右クリックし、「新規」→「キー」を選択し、「command」と入力します。

5. 画面の右側にて(規定)と表示されている部分をダブルクリックし、文字列を編集します。
今回は「cmd.exe /K cd %L」と入力します。
20091110_01

フリーのツール等で右クリックメニュを追加するアプリケーションがありますが、このようなイメージでレジストリが変更されています。
今回はフォルダでしたが、特定の拡張子や全てのファイル・フォルダに適用することも可能です。

ただし編集は自己責任にてお願いします。

通常は、画面のプロパティから変更するデスクトップの壁紙ですが、レジストリを直接編集して壁紙を変更する方法です。
リモートレジストリを利用すれば遠隔で変更することも可能です。

1. レジストリ エディタを起動する。

2. 次のレジストリ サブキーを見つける。
HKEY_USERS\【SID】\Control Panel\Desktop

3. 次のレジストリ値を変更する。
 値の名前 : WallPaper
 データ型 : REG_SZ
 データの内容 : 壁紙のファイルパス