今回はOSの識別(XP以外は動作不可とする)コードを考える。
NT4.0時代ではOSの【Ver】コマンドを使用して振り分けていたが何故かVBAではエラーとなる。
記述したコードは以下の通り。
1: Set objSll = CreateObject("WScript.Shell")
2: Set objExec = objSll.Exec("ver")
3: Do Until objExec.StdOut.AtEndOfStream
4: strLine = objExec.StdOut.ReadLine
5: Debug.Print(strLine)
6: Loop
2行目で「指定されたファイルが見つかりません」となる。
仕方なく他のコードをあたって見るがその手法は様々だ。
私が管理している環境ではあり得ないことだが、Win95や98等でログインされてもエラーとならないコードにしたい。
かつコードは複雑にしたくないと考えつつトライ&エラーの末、以下のコードを完成させた。
01: Const RegOS = "HKLM¥SOFTWARE¥MicrosoftWindows NT¥CurrentVersion¥ProductName"
02: Set objSll = CreateObject("WScript.Shell")
03: If objSll.Environment("Process").Item("OS") = "Windows_NT" Then
04: If objSll.RegRead(RegOS) <> "Microsoft Windows XP" Then
05: Wscript.Echo "Windows XP 以外の OS ではネットワークドライブを接続しません。"
06: Wscript.Quit
07: End If
08: Else
09: Wscript.Echo "Windows XP 以外の OS ではネットワークドライブを接続しません。"
10: Wscript.Quit
11: End If
3行目で環境変数【%OS%】の値を取得し、NT系OSであることを識別する。
4行目でレジストリ【¥¥HKEY_LOCAL_MACHINE¥SOFTWARE¥Microsoft¥Windows NT¥CurrentVersion¥ProductName】の値を取得し、XPであることを識別する。
倍のステップ数になってしまたがこれで完璧。
NT4.0時代ではOSの【Ver】コマンドを使用して振り分けていたが何故かVBAではエラーとなる。
記述したコードは以下の通り。
1: Set objSll = CreateObject("WScript.Shell")
2: Set objExec = objSll.Exec("ver")
3: Do Until objExec.StdOut.AtEndOfStream
4: strLine = objExec.StdOut.ReadLine
5: Debug.Print(strLine)
6: Loop
2行目で「指定されたファイルが見つかりません」となる。
仕方なく他のコードをあたって見るがその手法は様々だ。
私が管理している環境ではあり得ないことだが、Win95や98等でログインされてもエラーとならないコードにしたい。
かつコードは複雑にしたくないと考えつつトライ&エラーの末、以下のコードを完成させた。
01: Const RegOS = "HKLM¥SOFTWARE¥MicrosoftWindows NT¥CurrentVersion¥ProductName"
02: Set objSll = CreateObject("WScript.Shell")
03: If objSll.Environment("Process").Item("OS") = "Windows_NT" Then
04: If objSll.RegRead(RegOS) <> "Microsoft Windows XP" Then
05: Wscript.Echo "Windows XP 以外の OS ではネットワークドライブを接続しません。"
06: Wscript.Quit
07: End If
08: Else
09: Wscript.Echo "Windows XP 以外の OS ではネットワークドライブを接続しません。"
10: Wscript.Quit
11: End If
3行目で環境変数【%OS%】の値を取得し、NT系OSであることを識別する。
4行目でレジストリ【¥¥HKEY_LOCAL_MACHINE¥SOFTWARE¥Microsoft¥Windows NT¥CurrentVersion¥ProductName】の値を取得し、XPであることを識別する。
倍のステップ数になってしまたがこれで完璧。