PCのデスクトップは散らかっている方が使いやすい?山市良のうぃんどうず日記(79)

Windows 10の更新プログラム適用後にPCを再起動すると、作業中のデスクトップ状態が失われることに、何とかならないかと思っている人はいませんか。IEとエクスプローラーで開いているウィンドウなら、何とかなるかもしれません。

» 2016年11月29日 05時00分 公開
[山市良テクニカルライター]
「山市良のうぃんどうず日記」のインデックス

連載目次

机の上も、PCのデスクトップも、散らかっている方が仕事がしやすい!

 オフィスの机の上が常に整理整頓されているのを好む人もいれば、人が見ると散らかっているだけのように見える乱雑な状態を好む人もいます。筆者は後者です。自分だけが把握している微妙な配置を、掃除でずらされるとカチンときます。筆者は、机の上だけでなく、PCのデスクトップも散らかった状態の方が仕事が進みます(写真1)。

写真1 写真1 筆者の物理的なデスクトップ環境の一部。この日はきれいな方……

 「デスクトップが散らかっている」とは、今の仕事や次の仕事に使うフォルダ、共通の素材を入れてあるフォルダ、あるいは頻繁にチェックしたいWebサイトなどを、Windowsの「エクスプローラー」やWebブラウザで開いておき、デスクトップの好みの場所に置いておく、あるいは最小化しておく状態のことです。

 筆者は日常的に、仕事が終わったら休止状態を使ってPCの電源を切り、翌日、PCを起動したら前日の状態から作業を再開するようにしています。そのような日常も、「Windows Update」による更新プログラムのインストールに伴う再起動でリセットされてしまいます。再起動後にクリーンなデスクトップを「仕事用に散らかしていく」という作業が手間なのです。

 「Internet Explorer(IE)」やその他の主要なWebブラウザは、強制終了された場合に「次回起動時にタブを復元する」機能を備えています。しかし、これが期待通りに復元してくれない場合があります。例えば、PCの再起動前にIEの「×」ボタンをクリックして、IEを正常終了してしまったときなどです。

Windowsにもほしい! Macの「再ログオン時にウィンドウを再度開く」機能

 以前、Macを触る機会があったのですが、Mac(OS X 10.7 Lion以降)では、システム終了時に「再ログオン時にウィンドウを再度開く」という機能が使えます(画面1)。この機能を見たとき、Windowsにもあったらいいのにと思いました。

画面1 画面1 次回起動時にアプリケーションのウィンドウを再現してくれるMacの親切な機能

ないならば、作ってしまえ、スクリプト

 ないものは、作ってしまいましょう。とはいえ、筆者はアプリケーション開発者ではないし、開発ツールを使うのも面倒です。スクリプトで何とかならないか、簡単にできないものか、いろいろと考えてみました。

 試行錯誤の末、作成したのが「save_myuri.vbs」と「restore_myuri.vbs」です。「save_myuri.vbs」は、Windowsの「Shell」オブジェクトを利用し、現在エクスプローラーおよびIEで開いているウィンドウの場所(LocationURL)を取得して、ユーザープロファイルフォルダ内の「SAVEDURL.txt」に保存します(画面2)。

InputKey = MsgBox("再ログオン時に復元できるようにエクスプローラーとIEで開いているウィンドウを保存しますか?",vbYesNo,"シャットダウンまたはログオフ前の確認")
if InputKey <> vbYes then
  WScript.Quit
end if
Set objWshShell = WScript.CreateObject("WScript.Shell")
SAVEDTO = objWshShell.ExpandEnvironmentStrings("%USERPROFILE%") & "\SAVEDURL.txt"
Set fso = CreateObject("Scripting.FileSystemObject")
if fso.FileExists(SAVEDTO) Then
  InputKey = MsgBox("前回保存された状態(" & SAVEDTO & ")があります。" & vbCrLf & "削除してよろしいですか?",vbYesNo,"確認")
  if InputKey <> vbYes then
    WScript.Echo "中止しました。"
    WScript.Quit
  else 
    fso.DeleteFile SAVEDTO, True
  end if
end if
OUTPUT = ""
set objShell = CreateObject("Shell.Application")
set objShellWindows = objShell.Windows
if not objShellWindows is nothing then
  for each objShellWindow in objShellWindows
    If objShellWindow.LocationURL <> "" then
      OUTPUT = OUTPUT & objShellWindow.LocationURL & vbCrLF
    End If
  Next 
end if
if OUTPUT <> "" then
  Set outFile = fso.OpenTextFile(SAVEDTO, 2, True)
  outFile.WriteLine OUTPUT
  outFile.Close
  WScript.Echo "Internet Explorer とエクスプローラーの状態をファイル(" & SAVEDTO & ")に保存しました。"
else
  WScript.Echo "状態は保存されませんでした。"
end if
set objShellWindows = nothing
set objShell = nothing
set outFile = nothing
set fso = nothing
「save_myuri.vbs」
画面2 画面2 「save_myuri.vbs」を実行すると、エクスプローラーとIEで現在開いている場所(LocationURL)をテキストファイルに保存する

 そして、「restore_myuri.vbs」を実行すると、ユーザープロファイルフォルダ内の「SAVEDURL.txt」を読み取り、保存された場所をエクスプローラーとIEで開きます(画面3)。IEはタブを追加して開くように、IEの初回起動時と2回目以降で待ち時間を筆者のPCの性能に合わせて調整しています。なお、ウィンドウの大きさや配置は考慮していません。

Set objWshShell = WScript.CreateObject("WScript.Shell")
SAVEDTO = objWshShell.ExpandEnvironmentStrings("%USERPROFILE%") & "\SAVEDURL.txt"
Set fso = CreateObject("Scripting.FileSystemObject")
InputKey = MsgBox("前回保存された状態(" & SAVEDTO & ")を復元しますか?",vbYesNo,"確認")
if InputKey <> vbYes then
    WScript.Echo "中止しました。"
    WScript.Quit
end if
if Not fso.FileExists(SAVEDTO) Then
  WScript.Echo "前回保存された状態がありません。終了します。"
  WScript.Quit
end if
i = 0
Set objTextFile = fso.OpenTextFile(SAVEDTO, 1)
Do Until objTextFile.AtEndOfLine
  TARGETURL = objTextFile.ReadLine
  if TARGETURL <> "about:blank" then
    if Mid(TARGETURL,1,8) = "file:///" then
      TARGETURL = replace(TARGETURL,"file:///","")
      TARGETURL = replace(TARGETURL,"/","\")
      TARGETURL = replace(TARGETURL,"%20"," ")
      TARGETURL = """" & TARGETURL & """"
      objWshShell.Run TARGETURL
    else
      TARGETURL = "cmd /c start " & TARGETURL
      objWshShell.Run TARGETURL
      if i = 0 then
        WScript.Sleep (10000)
      else
        WScript.Sleep (2000)
      end if
      i = i + 1
    end if
  end if
Loop
objTextFile.Close
Set objTextFile = nothing
Set fso = Nothing
Set objWshShell = nothing
「restore_myuri.vbs」
画面3 画面3 PCを起動後に「restore_myuri.vbs」を実行すると、保存された場所がエクスプローラーまたはIEで開かれる

 ちなみに、このスクリプトは数年前にWindows 7向けに作成したものです。その後、Windows 8、Windows 8.1とアップデートしてきましたが、問題なく動きました。

 しかし、Windows 10にアップグレードしたところ、問題が発生しました。このスクリプトはIEを前提にしているため、Windows 10の既定のWebブラウザである「Microsoft Edge」との組み合わせでは、URLの保存と開く動作が機能しません。既定のWebブラウザをIEに変更すれば、Windows 8.1以前と同じように動きました。

 Windows 10のリリースから1年が経過して、これから本格的にWindows 10に移行しようと計画している企業は多いと思います。システム管理者の方は、さまざまな運用管理タスクをスクリプト化して作業の負担を軽減していると思いますが、Windows 10に移行すると思わぬところに影響が出る可能性があるのでご注意ください。特に、「タスクスケジューラー」に登録した自動実行タスク、ログオンスクリプトなどは要注意です。

 ところで、先日、Windows 10 Anniversary Update(バージョン1607)のPCで離席中、Windows UpdateでPCが自動的に再起動してしまいました。再起動後、「ペイント」が自動起動し、データが復元されているのを目にしました(画面4)。

画面4 画面4 Windows 10 Anniversary Update(バージョン1607)には、Windows Updateなどで再起動された後に、一部のアプリケーションデータを復元してくれる機能があるようだ

 初めての経験だったのでWindows 10のどのバージョンからの機能であるかは分かりませんが、Windows 10には自動再起動によるデータ損失の影響を少なくする、何かしらの復旧機能が搭載されているようです。ただし、ごく一部のアプリケーションだけのようで、大部分のアプリケーションの未保存だったデータは戻ってきません。

筆者紹介

山市 良(やまいち りょう)

岩手県花巻市在住。Microsoft MVP:Cloud and Datacenter Management(Oct 2008 - Sep 2016)。SIer、IT出版社、中堅企業のシステム管理者を経て、フリーのテクニカルライターに。マイクロソフト製品、テクノロジーを中心に、IT雑誌、Webサイトへの記事の寄稿、ドキュメント作成、事例取材などを手掛ける。個人ブログは『山市良のえぬなんとかわーるど』。


Copyright © ITmedia, Inc. All Rights Reserved.

RSSについて

アイティメディアIDについて

メールマガジン登録

@ITのメールマガジンは、 もちろん、すべて無料です。ぜひメールマガジンをご購読ください。