Windows11の24H2にて、はるか昔から
- フォルダーオプション:「ログオン時に以前のフォルダーウィンドウを表示する」をチェックON
- フォルダーオプション:「エクスプローラーで開く」を「PC」にする
- サインイン オプション:「再起動可能なアプリを自動的に保存し、再度サインインしたときに再起動する」をチェックON
にしてありますが、いつの頃からだか覚えていませんがパソコンを再起動しても直前に開いていたフォルダが自動で開きません。
つまり上記3つの設定はフォルダに関しては機能していません。
というか、たぶんWindows11あるいは24H2が悪いです。
端的に言えば、Windows11のファイルエクスプローラーの出来が非常に悪いです!
Windows11にしてからだったか、いつの頃からだったのか覚えていませんが、パソコン再起動時に以前のフォルダーウィンドウを表示することができなくてずっと諦めていましたがこの上なく使い勝手が悪いので、今回色々と試行錯誤してどうにかほぼ完璧に解決できました!
■■■追記・ここから■■■
この記事は何度か追記してゴチャゴチャになったので少し整理して書き直しました。
解決までの手順は以下の通りです。
■解決策その1
- フォルダーオプション:「ログオン時に以前のフォルダーウィンドウを表示する」をチェックON
- フォルダーオプション:「エクスプローラーで開く」を「PC」にする
- サインイン オプション:「再起動可能なアプリを自動的に保存し、再度サインインしたときに再起動する」をチェックON
の3つを設定する
↓
PCを再起動して、ログオン時に以前のフォルダーウィンドウを表示できるかどうか、確認してみる。
この段階で以前のフォルダが復元できている場合はここまでOKです。
ダメなら解決策その2へ。
■解決策その2
後述の回避策その1・・・ViVeToolでエクスプローラーのタブ機能を無効化する、を試してみる
↓
PCを再起動して、ログオン時に以前のフォルダーウィンドウを表示できるかどうか、確認してみる。
この段階で以前のフォルダが復元できてそれでOKな場合は解決策その3は不要です。
ダメなら解決策その3へ。
■解決策その3
致し方なく、AutoHotkeyで擬似的に解決します。
解決策その1あるいはその2で解決できればラッキー、ダメなら解決策その3で対応してみてください。
■注意■
解決策その2の箇所に、解決策その2が必要だと判断するに至った経緯を含めて書いてありますので、経緯を読んでから自己責任でお試しください。
まあ簡単に元に戻せますけど。
■■■追記・ここまで■■■
以下の3つは今回の解決策の前に、とっくの昔から私は有効にしてある設定項目です。
- フォルダーオプション:「ログオン時に以前のフォルダーウィンドウを表示する」をチェックON
- フォルダーオプション:「エクスプローラーで開く」を「PC」にする
- サインイン オプション:「再起動可能なアプリを自動的に保存し、再度サインインしたときに再起動する」をチェックON
上記のように設定してない場合は、まずはそのように設定してパソコンを再起動して確認してみてください。
それだけで、ログオン時に以前のフォルダーウィンドウを表示できるようになる場合もあるみたいです。
私は上記3項目はとっくの昔からちゃんと設定してありますが、「ログオン時に以前のフォルダーウィンドウを表示する」に関しては機能していません。
【解決策その1】フォルダーオプションおよびサインイン オプションでの設定
フォルダーオプション:ログオン時に以前のフォルダーウィンドウを表示する
■フォルダーオプションにて、
ログオン時に以前のフォルダーウィンドウを表示する
をチェックON
私の場合は機能していません。
24H2で設定無効になったと聞きます。
フォルダーオプション:「エクスプローラーで開く」を「PC」にする
■フォルダーオプションにて、「エクスプローラーで開く」を「ホーム」から「PC」に変更します。
これで解決するケースもあるみたいです。
サインイン オプションでの設定
再起動可能なアプリをPC再起動時に自動起動する
■設定 → アカウント → サインイン オプションにて、
再起動可能なアプリを自動的に保存し、再度サインインしたときに再起動する
をON
ブラウザはPC再起動後に自動で開きますが、私の場合はフォルダに関しては開きません。
全く使えねえな、24H2は!
【解決策その2】ViVeToolでエクスプローラーのタブ機能を無効化する
以下、解決策その2つまり
回避策その1・・・ViVeToolでエクスプローラーのタブ機能を無効化する
ことを試してみるのが必要だと判断するに至った経緯を含めて書いてあります。
■■■追記・ここから■■■
22H2で追加された「エクスプローラーのタブ機能」が有効のままだと1つのウィンドウに複数のウィンドウがあるのと似た状態になるので、 このページの解決策その1その3だけではたぶんPC再起動時・再ログオン時に以前のフォルダーウィンドウをうまく復元できない可能性が高い、と思います。
これを回避するにはおそらく2つ方法があり、
■回避策その1・・・ViVeToolでエクスプローラーのタブ機能を無効化する
https://www.naporitansushi.com/windows11-explorer-tab/
必要なのはViVeToolだけで、QTTabBarは不要です。
※2026/6/2時点で、上記ページは404になっています。
https://github.com/thebookisclosed/ViVe/releases
■回避策その2・・・エクスプローラーの再起動時にタブがちゃんと復元できる機能が実装されるまで待つ
https://internet.watch.impress.co.jp/docs/yajiuma/1646558.html
の2択になると思います。
回避策その2の「エクスプローラーの再起動時のタブ復元」はすでに実装されたみたいですが、
https://www.nichepcgamer.com/archives/windows11-improvement-file-explorer-tabs-are-now-restored-after-reboot.html
私は24H2特にファイルエクスプローラーを全く信用していないので、回避策その2で解決できるかは正直微妙です。
■補足■
解決策その1で解決できない場合は
- 回避策その1・・・ViVeToolでエクスプローラーのタブ機能を無効化する
- 回避策その2・・・エクスプローラーの再起動時にタブがちゃんと復元できる機能が実装されるまで待つ
の2択になるはずですが、回避策その2「エクスプローラーの再起動時にタブがちゃんと復元できる機能」は2024年12月末時点でWindows11 Insider Preview ベータチャネル Build 22635.4580 (KB5046733)では提供されているみたいですが、2025.5.1時点でこの機能?は一般のWindows11には実装されていませんので、現時点では回避策その2は機能していません。
つまり回避策その1が必要なはずです、と思います。
■回避策その1のやり方■
ViVeToolをインストール
https://github.com/thebookisclosed/ViVe/releasesにて、「Assets」の箇所のViVeTool-v◯.◯.◯-IntelAmd.zip をダウンロード
↓
ダウンロードしたzipを解凍して、その中身を例えば C:\ViVeTool\ にコピーする、つまりつまり、C:\ViVeTool\ViVeTool.exeがある状態になります。
↓
PCを再起動
↓
管理者権限でコマンドプロンプトを開いて※1後述
cd C:\ViVeTool\
ViVeTool /disable /id:37634385
ViVeTool /disable /id:36354489を実行して再度PCを再起動すれば、エクスプローラーのタブ機能を無効化できます。
やっぱりエクスプローラーのタブ機能を有効に戻したい場合は
cd C:\ViVeTool\
ViVeTool /enable /id:37634385
ViVeTool /enable /id:36354489を実行してPCを再起動すれば、エクスプローラーのタブ機能を有効に戻せます。
ViVeToolをCドライブ以外にインストールした場合つまり、C:\ViVeTool\ViVeTool.exe以外のパスになる場合
cd コピーしたパスとして
ViVeTool /disable /id:37634385
ViVeTool /disable /id:36354489あるいは
ViVeTool /enable /id:37634385
ViVeTool /enable /id:36354489を実行してPCを再起動します。
※1 管理者権限でコマンドプロンプトを開くやり方は、スタートメニューの検索欄から開くのが簡単です。
スタートメニューの検索欄に「コマンド」あるいは「コマンドプロンプト」と入力して、
- 今のスタートメニューの場合:「コマンドプロンプト」の右側のメニューにて、「管理者として実行」をクリック
- 昔のスタートメニューの場合:「コマンドプロンプト」の文字上で右クリックして、「管理者として実行」をクリック
VBSがわかる方は
Set shell = CreateObject("Shell.Application")
shell.ShellExecute "cmd.exe", "", "", "runas", 1の内容で適当なファイル名(run_cmd_as_admin.vbsとか)で保存、ダブルクリックすれば管理者権限のコマンドプロンプトを開けます。
文字コードはUTF-8、改行コードは一応LFです。
■■■追記・ここまで■■■
■■■さらに追記・ここから■■■
この記事のもゆうさんのコメントから推測すると、再起動時・再ログオン時に以前のフォルダーウィンドウを表示できない場合(※2)はファイルエクスプローラーのタブ機能が原因である可能性がほぼ100%な気がします。
ということで2025.4.29時点では、おそらく回避策その2では解決できないと思います。
回避策その1・・・ViVeToolでエクスプローラーのタブ機能を無効化する、をオススメします。
※2 前述のフォルダーオプションでの設定あるいはサインイン オプションでの設定を有効にしてあれば、ログオン時に以前のフォルダーウィンドウを表示できる人もいるみたいです。
私はフォルダーオプションでの設定・サインイン オプションでの設定ともに有効にしてあってもログオン時に以前のフォルダーウィンドウを表示できなくて、それでこの記事のような対策をしました。
つまり、不具合等が100%再現するわけではなく、これがWindows11特に24H2が超絶イケてない(と個人的に思う)最大の理由です。
■■■追記・ここまで■■■
【解決策その3】AutoHotkeyでほぼ完璧に解決しました!
結論だけ先に書きますと、AutoHotkeyにて”ほぼ完璧に”ログオン時に以前のフォルダーウィンドウを表示することができました。
厳密には、シャットダウン30秒前に開いていたフォルダをPC再起動後に自動で開きます。
※この「30秒前」という数値は自由に変更できますが、ひとまず「30秒前」で様子見しています。
以下、AutoHotkeyのV2にて
ログオン時に以前のフォルダーウィンドウを表示できない
をほぼ解決した、その手順です。
AutoHotkey(v2)をインストールする
にて
AutoHotkeyのv2をインストールします。
Download → Download v2.0、です。
インストールしたら
C:\Program Files\AutoHotkey\v2
内にAutoHotkey.exeがある、つまり
C:\Program Files\AutoHotkey\v2\AutoHotkey.exe
があることを確認して下さい。
インストールするのはAutoHotkey v2系(上記だとv2.0)です。
v2系とv1.1ではAutoHotkey.exeが存在するフォルダも後述のコード(v2用)も違うのでご注意下さい。
開いているフォルダ一覧を30秒ごとに記録して、PC再起動時にその一覧のフォルダを自動で開くAutoHotkeyファイルを作成する
AutoHotkey(V2)を使って、開いているフォルダ一覧を30秒ごとに記録して、PC再起動時にその一覧のフォルダを自動で開くようにします。
拡張子「.ahk」のファイルを2つ作成してスタートアップに登録します。
■全体の作業手順■
■%userprofile%\Documents\AutoHotkey
のフォルダ内にて、新規作成 → テキスト ドキュメントで2つtxtファイルを作成する。
※「Documents」フォルダ内に「AutoHotkey」フォルダがない場合は作成してください。
上記フォルダは、Winキー + Rで
%userprofile%\Documents\AutoHotkeyと入力してエンターで開きます。
↓
■それぞれ、後述の
- save_open_folders-30seconds.ahk
- open_saved_folders.ahk
のコードをコピペして保存する。
どちらも
文字コード:UTF-8
改行コード:CR+LF
です。
↓
■それぞれのファイル名を
- save_open_folders-30seconds.ahk
- open_saved_folders.ahk
と変更する。
↓
■スタートアップに
- save_open_folders-30seconds.ahk
- open_saved_folders.ahk
それぞれのショートカットを登録する。
↓
パソコンを再起動する。
save_open_folders-30seconds.ahkのコード
#Requires AutoHotkey v2.0
saveFile := A_MyDocuments "\AutoHotkey\open_folders.txt"
prevFile := A_MyDocuments "\AutoHotkey\open_folders_prev.txt" ; 前回の内容を保存するファイル名
; 初回実行
SaveOpenFolders()
; タイマー設定
SetTimer(SaveOpenFolders, 30000) ; 30秒おき
SaveOpenFolders() {
global saveFile, prevFile
local folders, list, hwnd, title, potentialPath, file, currentContent, prevContent
; 1. 現在開いているフォルダを取得
folders := ""
list := []
try {
list := WinGetList("ahk_class CabinetWClass")
} catch {
list := [] ; エラー時は空リスト
}
if IsObject(list) && list.Length > 0 {
for hwnd in list { ; Outer For Start
try { ; Outer Try Start
if WinExist("ahk_id " hwnd) { ; Outer If 1 Start
title := WinGetTitle("ahk_id " hwnd)
if (title != "") { ; Outer If 2 Start
potentialPath := Trim(title)
if RegExMatch(potentialPath, "^([a-zA-Z]:\\|\\\\)") && !InStr(potentialPath, "::{") { ; Outer If 3 Start
isDuplicate := false
for _, existing in StrSplit(folders, "`n", "`r") { ; Inner For Start
if Trim(existing) = potentialPath { ; Inner If Start
isDuplicate := true
break
} ; Inner If End
} ; Inner For End
if !isDuplicate { ; Outer If 4 Start
folders .= potentialPath . "`n"
} ; Outer If 4 End
} ; Outer If 3 End
} ; Outer If 2 End
} ; Outer If 1 End
} catch {
; 空のブロック。エラーは無視して次のループへ
} ; Outer Try End
} ; Outer For End
}
; 2. 書き込む内容を決定 (空ならマーカー)
currentContent := ""
if (Trim(folders) != "") {
currentContent := Trim(folders, "`n")
} else {
currentContent := "NO_OPEN_FOLDERS"
}
; 3. 前回の内容と比較し、異なっていれば prevFile を更新
prevContent := ""
try {
prevContent := FileRead(saveFile, "UTF-8")
} catch {
prevContent := ""
} ; 前回の saveFile の内容を読む
if (currentContent != prevContent) {
if (Trim(prevContent) != "" && !InStr(prevContent, "NO_OPEN_FOLDERS")) {
try {
file := FileOpen(prevFile, "w", "UTF-8")
if IsObject(file) {
file.Write(prevContent)
file.Close()
}
} catch {
; エラー時は無視
}
} else if FileExist(prevFile) {
try {
FileDelete(prevFile)
} catch {
; エラー時は無視
}
}
}
; 4. 新しい内容 (currentContent) を saveFile に書き込み
try {
file := FileOpen(saveFile, "w", "UTF-8")
if IsObject(file) {
file.Write(currentContent)
file.Close()
}
} catch {
; エラー時は無視
}
}
open_saved_folders.ahkのコード(■修正前)※後述します
#Requires AutoHotkey v2.0
saveFile := A_MyDocuments "\AutoHotkey\open_folders.txt"
prevFile := A_MyDocuments "\AutoHotkey\open_folders_prev.txt" ; ★変更:バックアップとして prevFile を参照
content := ""
sourceFile := ""
; まず saveFile を試す
try {
content := FileRead(saveFile, "UTF-8")
} catch {
content := ""
}
OutputDebug("saveFile Content: " (content != "" ? StrLen(content) . " chars" : "Empty or Read Error"))
; saveFile が空、読めない、またはマーカーの場合は prevFile を試す
if (Trim(content) = "" || InStr(content, "NO_OPEN_FOLDERS")) {
OutputDebug("saveFile is invalid, trying prevFile...")
try {
content := FileRead(prevFile, "UTF-8")
} catch {
content := ""
}
OutputDebug("prevFile Content: " (content != "" ? StrLen(content) . " chars" : "Empty or Read Error"))
; prevFile も空、読めない、またはマーカーなら諦める
if (Trim(content) = "" || InStr(content, "NO_OPEN_FOLDERS")) {
content := "" ; 復元対象なし
OutputDebug("prevFile is also invalid. No restore target.")
} else {
sourceFile := prevFile ; prevFile から復元
OutputDebug("Using prevFile for restore.")
}
} else {
sourceFile := saveFile ; saveFile から復元
OutputDebug("Using saveFile for restore.")
}
; 復元対象があれば実行
if (content != "") {
OutputDebug("Restoring folders from: " sourceFile)
Loop Parse, content, "`n", "`r" {
line := Trim(A_LoopField)
if (line != "") {
try {
OutputDebug("Running: " line)
Run line
Sleep 100 ; 少し待機
} catch {
OutputDebug("Run Error for line: " line)
MsgBox("フォルダを開けませんでした: " line, "復元エラー", 48)
}
}
}
} else {
OutputDebug("No folders to restore.")
}
ExitApp
■2025.5.9 追記■
検索からこのページを訪問されているほとんどの方にとってopen_saved_folders.ahkのコードは修正前・修正後どちらのコードでも問題ないかとは思いますが、
- 上記のopen_saved_folders.ahkのコード(■修正前)
より後述の
- open_saved_folders.ahkのコード(■修正後)
をおすすめします。
上記2つのファイルのショートカットをスタートアップに登録する
%userprofile%\Documents\AutoHotkey
のフォルダ内に保存した
- save_open_folders-30seconds.ahk
- open_saved_folders.ahk
の2つのファイルのそれぞれのショートカット
- save_open_folders-30seconds.ahk - ショートカット.lnk
- open_saved_folders.ahk - ショートカット.lnk
をスタートアップに登録します。
スタートアップのフォルダは
Winキー + Rにて、
shell:startupで開きます。
再起動する
パソコンを再起動すれば作業完了です!
以上で、パソコン起動時に
- open_saved_folders.ahkが1度だけ実行され、open_folders.txtにあるフォルダが開かれる。※細かい仕様は後述します。
- save_open_folders-30seconds.ahkが実行され常駐、以後30秒ごとにopen_folders.txtを作成・更新される。
これでひとまず擬似的にログオン時に以前のフォルダを開くことができます。
本当は
- Windowsのシャットダウン処理をフックして、シャットダウン直前に開いていたフォルダ一覧を確実に保存する
を実行したくて何時間も格闘しましたが結局うまくいかず、
- 安定的かつある程度確実にシャットダウン時に近い状態のフォルダ全てを開くには、上記の方法がベター
という結論に至りました、というか、上記以外ではうまくいきませんでした><
1点注意点というか念のため書いておきますと
■注意■
save_open_folders-30seconds.ahkの
SetTimer(SaveOpenFolders, 30000) ; 30秒おき
は
シャットダウン時に全てのフォルダが閉じられるまでの時間 × 2
より大きな数値を設定する必要があります。
たぶん30秒なら問題ないはずです。
最初は10秒ごとにしたのですが、シャットダウンの処理が始まって、もし
- すぐに全てのフォルダが閉じられる
- その後例えばブラウザやexcel等のファイルを閉じる処理が5秒以上かかった
- この段階ではまだsave_open_folders-30seconds.ahkが動いている(かもしれない)
- その後にシャットダウン処理が全て完了した
としたら、最後のopen_folders.txtは後述の「NO_OPEN_FOLDERS」と記述されるので、再起動後に1つもフォルダが開かれなくなります。
その閾値がわからないので、ひとまず30秒ごとにしました。
なお、CPU使用率は限りなく低いので(仮に1秒ごとに変更しても)負荷を気にする必要はありません。
上記2ファイルの細かい仕様の説明
上記2ファイルの挙動・仕組みを説明しますと、
■save_open_folders-30seconds.ahk
save_open_folders-30seconds.ahkは常駐しますが、CPU使用率は1%以下・・・かどうかは不明ですが、限りなく少ない負荷です。
- パソコン起動時にsave_open_folders-30seconds.ahkが実行され常駐します。
- 30秒ごとにopen_folders.txtを作成・更新します。
- open_folders_prev.txt はすぐには作成されません。
- open_folders.txtの内容が変化したらopen_folders_prev.txtを作成します(※1)
- フォルダを1つも開いていない、つまり意図的に空である場合(※2)はopen_folders.txtに「NO_OPEN_FOLDERS」と記述します。
※1 従ってopen_folders_prev.txtは、最低でも30秒前より古い状態かつopen_folders.txtとは違う内容となります。
open_folders.txtが何らかの理由で壊れた・開けない場合の少し前のフォルダ一覧がopen_folders_prev.txtというイメージです。
■open_saved_folders.ahk
open_saved_folders.ahkはPC起動時に1回だけ実行されます。
open_saved_folders.ahkの処理は少し複雑です。
※2 「意図的に空である場合」とは、自分の意志でフォルダを1つも開いていない状態のことです。
意図的にフォルダを1つも開いていない場合はopen_folders.txtの中身は
NO_OPEN_FOLDERS
と1行書いてあります。
「意図的に空である場合」以外で空になる場合とは、何らかの理由でopen_folders.txtの中身が空になった場合です。
再起動時の流れ
PC起動時にopen_saved_folders.ahkはまず最初にopen_folders.txtを読み込もうとします。
■open_folders.txtが存在し、内容が読み込めて、かつその内容が NO_OPEN_FOLDERS の場合は1つもフォルダは開きません。
意図的に1つもフォルダを開いてない状態で再起動した場合がこれです。
■open_folders.txtが存在し、内容が読み込めて、かつその内容が NO_OPEN_FOLDERS でも空文字列でもない場合は、open_folders.txt の内容でフォルダを開きます。
複数フォルダを開いている状態で再起動した場合がこれです。
”擬似的に”ログオン時に以前のフォルダーウィンドウを表示する、がこれです。
■上記の条件に当てはまらなかった場合、つまりopen_folders.txt が存在しない、読めない、空、または NO_OPEN_FOLDERS だった場合は、open_folders_prev.txt を読み込みます。
■open_folders_prev.txt が存在し、内容が読み込めて、かつその内容が NO_OPEN_FOLDERS でも空文字列でもない場合は、open_folders_prev.txt の内容でフォルダを開きます。
何らかの原因でopen_folders.txtがおかしくなっている・存在していない場合は、open_folders_prev.txtの内容つまり少し前の状態のフォルダ一覧を開きます。
これは意図しない不具合の予防策です。(※3)
■上記以外の場合は、1つもフォルダは開きません。
※3 Windowsのシャットダウン処理をフックしてopen_folders.txtに記録するのが本来の正確な「ログオン時に以前のフォルダーウィンドウを表示する」になるのですが、頑張ってもうまくできなかったので結局AutoHotkeyでの処理になった次第です。
PythonのコードでWindowsのシャットダウン処理をフックしてopen_folders.txtに記録しようと色々チャレンジした時に何度やっても
- Windowsのシャットダウン処理中にすぐに全てのフォルダが閉じられ、その後にsave_open_folders-30seconds.ahkが実行されて、その後にシャットダウン処理が完了する
という流れとなり、Windowsのシャットダウン処理の最中にopen_folders.txtが空の内容で更新され、結果的に再起動時に1つもフォルダが開きませんでした。
結局これは解決できなかったのでPythonは諦めてAutoHotkey V2でチャレンジすることにして、念のため不具合の予防策として(※3)みたいな処理を含めました。
PC起動後、上記open_folders_prev.txtの実行とは別にsave_open_folders-30seconds.ahkが30秒ごとに処理します。
補足というか例
PCを起動してopen_saved_folders.ahkの実行直後に最初に例えば
- C:\新しいフォルダー
- C:\新しいフォルダー (2)
- C:\新しいフォルダー (3)
を開いている場合は30秒後以内に
■open_folders.txtの内容
- C:\新しいフォルダー
- C:\新しいフォルダー (2)
- C:\新しいフォルダー (3)
■open_folders_prev.txt
まだ作成されない
その後例えばopen_saved_folders.ahkの実行後31秒後に
- C:\新しいフォルダー
- C:\新しいフォルダー (2)
- C:\新しいフォルダー (3)
- C:\新しいフォルダー (4)
を開いた場合は、open_saved_folders.ahkの実行後60秒後に
■open_folders.txt
- C:\新しいフォルダー
- C:\新しいフォルダー (2)
- C:\新しいフォルダー (3)
- C:\新しいフォルダー (4)
■open_folders_prev.txt
- C:\新しいフォルダー
- C:\新しいフォルダー (2)
- C:\新しいフォルダー (3)
となります。
つまりopen_folders_prev.txtは30秒前の状態です。
もしその後開いているフォルダ構成が5分間変わらず、その後(例えば5分1秒後に)変化した場合は
■open_folders.txt
5分30秒後のフォルダ構成
■open_folders_prev.txt
5分前のフォルダ構成
となります。
AutoHotkeyで「ログオン時に以前のフォルダーウィンドウを表示する」をほぼ完璧に解決する手順・説明は以上です。
Windows11、特に24H2は不具合がすごく多い上に、
- Windows Updateをしたら何か1つ解決したけど別の何かが悪化した・できなくなった
ということが頻繁に起こります。。。
SkypeがTeamsに移行するのでTeamsを起動したらちゃんと起動しなくて、仕方なくアンインストール・キャッシュ削除・再インストールして起動したら
問題が発生しました。
Teamsを再起動してみて下さい
と表示されて再起動しても、最小化して起動するだけで正常に起動しない、つまり全く使い物にならないという・・・
Windows11の私の評価はWindows98に近いです><
【おまけ】1つのショートカットで複数のフォルダを一括で開けるJamPack Opener
ちなみにWindowsの通常のショートカットは1つの「.lnk」で1つのリンク先しか開けませんが、JamPack Openerというソフトを使えば1つの「.lnk」で複数のフォルダを一括で開くことが可能です。
Windows11でも問題なく動きます。
ただしJamPack Openerの欠点というか個人的には不要な点が1つあり、5個以上のディレクトリが設定されていると「最小化した状態で開くかどうか」のポップアップが表示されます。
普段パソコン起動時に開きたいフォルダはほとんど同じなので、上記の件がなければこの記事にある「ログオン時に以前のフォルダーウィンドウを表示する」の件をAutoHotkeyで解決しようとはしませんでした。
■必ずお読みください■解決策その3のopen_saved_folders.ahkを修正しました。
■2025.5.9 追記■
わけあってWindows11を新規インストールしました。
気が向いたらWindows11を新規インストールした件を記事にしますが、新規インストールしたら23H2だったので24H2に更新しましたが、そしたら(2025.5.9時点では)解決策その1だけでWindows側で「ログオン時に以前のフォルダーウィンドウを表示」ができています。
Windows Updateで2025.5.9時点の最新の状態にしたら、ブラウザもPC再起動時に再表示できるようになりました。
すべてのアプリを確認したわけではないですけど。
不具合が再現したりしなかったり・・・と再現性に信憑性がないので、
- save_open_folders-30seconds.ahk
- open_saved_folders.ahk
はスタートアップに登録したままにしようと思ったのですが、そうするとPC再起動時にWindows側で以前のフォルダーウィンドウを開くので、その後open_saved_folders.ahkが以前のフォルダーウィンドウを開こうとした際に
「フォルダを開けませんでした」
的なエラー表示というかポップアップが表示されます。
これを修正しました。
open_saved_folders.ahkのコード(■修正後)
#Requires AutoHotkey v2.0
#Warn ; 警告を有効にしておくと開発に役立つ
global content := "" ; 警告対策として明示的に初期化
global sourceFile := "" ; 警告対策として明示的に初期化
saveFile := A_MyDocuments "\AutoHotkey\open_folders.txt"
prevFile := A_MyDocuments "\AutoHotkey\open_folders_prev.txt" ; ★変更:バックアップとして prevFile を参照
; まず saveFile を試す
try {
content := FileRead(saveFile, "UTF-8")
} catch {
content := ""
}
OutputDebug("saveFile Content: " (content != "" ? StrLen(content) . " chars" : "Empty or Read Error"))
; saveFile が空、読めない、またはマーカーの場合は prevFile を試す
if (Trim(content) = "" || InStr(content, "NO_OPEN_FOLDERS")) {
OutputDebug("saveFile is invalid, trying prevFile...")
try {
content := FileRead(prevFile, "UTF-8")
} catch {
content := ""
}
OutputDebug("prevFile Content: " (content != "" ? StrLen(content) . " chars" : "Empty or Read Error"))
; prevFile も空、読めない、またはマーカーなら諦める
if (Trim(content) = "" || InStr(content, "NO_OPEN_FOLDERS")) {
content := "" ; 復元対象なし
OutputDebug("prevFile is also invalid. No restore target.")
} else {
sourceFile := prevFile ; prevFile から復元
OutputDebug("Using prevFile for restore.")
}
} else {
sourceFile := saveFile ; saveFile から復元
OutputDebug("Using saveFile for restore.")
}
; 復元対象があれば実行
if (content != "") {
OutputDebug("Restoring folders from: " sourceFile)
Loop Parse, content, "`n", "`r" {
line := Trim(A_LoopField)
if (line != "") {
; フォルダが既に開かれていないか確認
alreadyOpen := false
for hwnd in WinGetList("ahk_class CabinetWClass") {
try {
winPath := ""
winPath := WinGetTitle(hwnd)
if (InStr(line, winPath) || InStr(winPath, line)) {
alreadyOpen := true
OutputDebug("Folder already open: " winPath)
break
}
} catch {
; 無視
}
}
if (!alreadyOpen) {
try {
OutputDebug("Running: " line)
Run line
Sleep 100 ; 少し待機
} catch {
OutputDebug("Run Error for line: " line)
; すでにチェック済なので通常は出ない
}
} else {
OutputDebug("Skipped opening (already open): " line)
}
}
}
} else {
OutputDebug("No folders to restore.")
}
ExitApp
以前の私のように確実にWindows側で以前のフォルダーウィンドウが開けない場合は修正前のopen_saved_folders.ahkでも問題ありませんが、今の私のように
- ひとまずはWindow側で以前のフォルダーウィンドウを開けているみたいだけど、全く信用できないので念の為save_open_folders-30seconds.ahkとopen_saved_folders.ahkの2つをスタートアップに登録して動かしておきたい
という場合は上記修正後のopen_saved_folders.ahkをお使いください。
open_saved_folders.ahkに関して修正前と修正後の違いは1点だけで、修正後のコードでは
- PC起動時にopen_saved_folders.ahkが開こうとしたフォルダがすでに開いている場合は「フォルダを開けませんでした」的なポップアップは表示しないでスルーする
という挙動に変更しました。
自分用メモ
■追記■
以下、表題の「ログオン時に以前のフォルダーウィンドウを表示できない」件と全く関係なくてすみません。
私はKokodekaという拡大鏡のソフト

をPC起動時に立ち上げていて、
- 普段はアプリのウィンドウをタスクトレイに収納するNaiNai(ないない)というソフトにてKokodekaは非表示
- Kokodekaのホットキーの設定にて、Ctrl + Qをクリックした時のみ拡大鏡が機能する
という使い方をしているのですが、(上のほうに書きましたが)わけあってWindows11を新規インストールしたのですが今のところ解決策その1だけでWindows側で「ログオン時に以前のフォルダーウィンドウを表示」ができています。
Windows11および24H2はいつどんな不具合が発生するか全く信用できないのでスタートアップにKokodekaのショートカットを登録してあるのですが、現時点ではWindowsのサインイン オプションの設定でKokodekaが起動するみたいで、その後スタートアップのショートカットがさらにKokodeka.exeを起動しようとするので
- Kokodekaはすでに起動されています。
と、2重起動の警告のポップアップが表示されます。
かといってスタートアップのKokodeka\Kokodeka.exeのショートカットを削除すると、Windows11は不具合がたくさんあり、いつまたログオン時に以前のフォルダーウィンドウを表示できなくなるか、全く安心できないです。
・
・
・
ということで、AutoHotkeyのV2にて
- PC起動時にKokodeka.exeが起動していなかったら起動して、起動していたら何もしない
というスクリプトにて解決しました。
■start_kokodeka.ahk※V2用です。
#Requires AutoHotkey v2.0
; Kokodeka.exe のパス
exePath := "D:\Program Files\Kokodeka\Kokodeka.exe"
exeName := "Kokodeka.exe"
; 既に実行中か確認
if !ProcessExist(exeName) {
try {
Run exePath
OutputDebug("Kokodeka.exe を起動しました。")
} catch {
MsgBox("Kokodeka.exe の起動に失敗しました。", "エラー", 16)
}
} else {
OutputDebug("Kokodeka.exe は既に起動中です。何もしません。")
}
ExitApp
start_kokodeka.ahkのショートカットをスタートアップに登録すればこの件は解決です。
start_kokodeka.ahkのバックアップも取ってありますが、今回文字通りたった1クリックのミスだけで最終的に
- Cドライブ※Windows11が入ってた
- Dドライブ※15年間以上の公私ともに大事なファイルや膨大なデータ一式
- Gドライブ※複数のバックアップソフトでのCドライブのバックアップデータ
の全てが吹き飛んだので致し方なくWindows11を新規インストールして色々復旧中でして、バックアップ的な意味合いで念の為この記事に書いた次第です。
なお、
- save_open_folders-30seconds.ahk
- open_saved_folders.ahk(■修正後)
のショートカットも再度スタートアップに登録してあります。
上記諸々のバックアップは(色々なセットアップが一段落したら)改善して再構築します。
以上、余計な話で失礼しました。
たった1クリックのミスだけで全て失った件は気が向いたら記事にするかもです><
■さらに追記■
「ログオン時に以前のフォルダーウィンドウを表示できない」とは関係ない件、さらに追記ですみません。
ついでに別のAutoHotkey(V2)のスクリプトも書いておきます。
Windows11の設定 → システム → ストレージ → ストレージセンサーにて、
- 一時ファイルをクリーンアップ:チェックON
- ユーザーコンテンツの自動クリーンアップ:チェック:ON
に設定してあっても削除されないファイルがたくさんあるので、
- PCを起動して2分経過後、1週間ごとに
%userprofile%\AppData\Local\Temp
%systemdrive%\Windows\Temp
を削除する。 - システム等が使用していて削除できない場合は無視する。
「1週間ごとに」の件は、%userprofile%\AutoHotkey\内に実行履歴
- %userprofile%\Documents\AutoHotkey\cleanup_history.txt:前回削除を実行した日時
- %userprofile%\Documents\AutoHotkey\cleanup_details.log:前回削除した内容のログ
を作成・保存しておいて、1週経過した場合のみ
%userprofile%\AppData\Local\Temp
%systemdrive%\Windows\Temp
を削除します。
1週間ごとにしたのは、、万が一何か問題が発生した場合はcleanup_details.logを見て解決するためです。
PCを起動して2分経過後にしたのは、念のため2分遅延させてるだけです。
というAutoHotkey(V2)のスクリプトです。
↓■weekly_temp_cleanup.ahk
#Requires AutoHotkey v2.0
#SingleInstance Force
Sleep(1000 * 60 * 2) ; 2分待機(PC起動後の遅延)
;Sleep(10) ; テストする場合はこちらのコメントを外す
; パス設定
logFile := A_MyDocuments "\AutoHotkey\cleanup_history.txt"
detailLogFile := A_MyDocuments "\AutoHotkey\cleanup_details.log"
; フォルダがなければ作成
if !DirExist(A_MyDocuments "\AutoHotkey")
DirCreate A_MyDocuments "\AutoHotkey"
; 現在の日時(数値形式)
currentDate := FormatTime(, "yyyyMMddHHmmss")
logEntry := "実行開始: " FormatTime(, "yyyy-MM-dd HH:mm:ss") "`n"
try FileAppend logEntry, detailLogFile
; 前回の実行日時を取得(ログファイルに保存されている形式は yyyyMMddHHmmss)
lastRunDate := ""
if FileExist(logFile)
lastRunDate := Trim(FileRead(logFile))
; 1週間経過判定
shouldCleanup := true
if lastRunDate != ""
{
try {
diff := DateDiff(lastRunDate, currentDate, "Days")
if (diff < 7)
{
shouldCleanup := false
logEntry := "前回の実行から " diff " 日なのでスキップします(前回: " lastRunDate ")`n"
try FileAppend logEntry, detailLogFile
}
} catch as e {
logEntry := "日付差分取得時エラー: " e.Message "`n"
try FileAppend logEntry, detailLogFile
; 強制的に続行
shouldCleanup := true
}
}
if shouldCleanup
{
tempFolders := [A_Temp, A_WinDir "\Temp"]
deletedCount := 0
skippedCount := 0
logEntry := "クリーンアップを開始します:`n"
try FileAppend logEntry, detailLogFile
for folder in tempFolders
{
logEntry := "フォルダ処理中: " folder "`n"
try FileAppend logEntry, detailLogFile
try
{
Loop Files folder "\*.*", "FD"
{
try
{
if InStr(FileGetAttrib(A_LoopFileFullPath), "D")
{
DirDelete A_LoopFileFullPath, 1
}
else
{
FileDelete A_LoopFileFullPath
}
deletedCount++
logEntry := "削除: " A_LoopFileFullPath "`n"
try FileAppend logEntry, detailLogFile
}
catch as e
{
skippedCount++
logEntry := "スキップ: " A_LoopFileFullPath " (理由: " e.Message ")`n"
try FileAppend logEntry, detailLogFile
continue
}
}
}
catch as e
{
logEntry := "フォルダ処理エラー: " folder " - " e.Message "`n"
try FileAppend logEntry, detailLogFile
continue
}
}
logEntry := "クリーンアップ完了: " FormatTime(, "yyyy-MM-dd HH:mm:ss") "`n"
logEntry .= "削除されたアイテム: " deletedCount "`n"
logEntry .= "スキップされたアイテム: " skippedCount "`n"
logEntry .= "-----------------------------------`n"
try FileAppend logEntry, detailLogFile
; 実行履歴を更新(数値形式で保存)
try FileDelete logFile
try FileAppend currentDate, logFile
}
else
{
logEntry := "クリーンアップはスキップされました`n"
logEntry .= "-----------------------------------`n"
try FileAppend logEntry, detailLogFile
}
ExitApp
このweekly_temp_cleanup.ahkのショートカットをスタートアップに登録すればOKです。
テストしたい場合は
Sleep(1000 * 60 * 2) ; 2分待機(PC起動後の遅延)
;Sleep(10) ; テストする場合は上記を「;」でコメントアウトして、こっちの「;」は削除して即実行するの箇所を
;Sleep(1000 * 60 * 2) ; 2分待機(PC起動後の遅延)
Sleep(10) ; テストする場合は上記を「;」でコメントアウトして、こっちの「;」は削除して即実行するにすれば、weekly_temp_cleanup.ahkダブルクリックで即実行できます。
ちゃんと動くことを確認したら元に戻してください。
念のため2分遅延させてるだけなので常に即実行でも問題ありません、とは思いますが、PC起動時にシステム側でTemp内に何か生成している可能性もあります。