AutoHotkey V1→V2
作ったもの
ファイルとして公開してなかったので今更ながら置いておく。
少し修正したので貼っておこー
#SingleInstance force
#WinActivateForce
; define
DATA_FILE := "デスクトップの表示.dat"
DESKTOP_CLASS := "ahk_class Progman"
POPUP1_CLASS := "XamlExplorerHostIslandWindow_WASDK"
POPUP2_CLASS := "WorkerW"
; ----------------------------------------
; helper function
; ----------------------------------------
getString(hwndList) {
ret := ""
for index, value in hwndList
ret .= "|" . value
return LTrim(ret, "|")
}
restoreWindow(hwndList, statusList) {
for index, value in hwndList {
reverseIndex := hwndList.Length - index + 1
hwnd := Integer(hwndList[reverseIndex])
if WinExist(hwnd)
if (statusList[reverseIndex] != -1) ; skip minimize window
WinActivate(hwnd)
}
}
; ----------------------------------------
; duplicate run
; ----------------------------------------
if FileExist(DATA_FILE) {
; read data file
FileObj := FileOpen(DATA_FILE, "r")
hwndString := FileObj.ReadLine()
hwnd := StrSplit(hwndString, "|")
statusString := FileObj.ReadLine()
status := StrSplit(statusString, "|")
; restore window
restoreWindow(hwnd, status)
; delete data file
FileDelete(DATA_FILE)
; exit
ExitApp
}
; ----------------------------------------
; main process
; ----------------------------------------
; get window handles for restore
hwnd := WinGetList()
; get window status
status := []
for index, value in hwnd
status.Push(WinGetMinMax(value))
; creat data file
FileAppend(getString(hwnd), DATA_FILE)
FileAppend("`n", DATA_FILE)
FileAppend(getString(status), DATA_FILE)
FileAppend("`n", DATA_FILE)
; show desktop and focus
Send "#d"
Sleep 1000
hwndDesktop := WinGetID(DESKTOP_CLASS)
ControlFocus(hwndDesktop)
; get window handles for monitoring
hwnd1 := WinGetList()
; wait new window
WinWaitNotActive WinExist("A")
Loop {
Sleep 500
hwnd2 := WinGetList()
try {
className := WinGetClass("A")
if ((className != POPUP1_CLASS) && (className != POPUP2_CLASS))
if getString(hwnd1) != getString(hwnd2)
break
} catch {
} finally {
activeId := WinExist("A")
hwnd2 := WinGetList()
}
}
; restore window
restoreWindow(hwnd, status)
; active new window
try {
WinActivate(activeId)
} catch {
WinActivate(hwnd2[1])
}
; delete data file
if FileExist(DATA_FILE)
FileDelete(DATA_FILE)
以下の2ファイルを差し替えてください。
C:\tool\desktop
├─デスクトップの表示.ahk
└─デスクトップの表示.exe
ショートカットファイルの再作成は不要です。
タスクバーの最左端にショートカットファイルを配置し、「Win」+「1」キーで実行する使用方法を想定しています。「Win」+「Tab」、「Alt」+「Tab」などと共に使用してください。
たまに動作おかしいのでまたバグ修正するかもしれません。
いじわるテストするとすぐに不具合が発生する。
プロセスの一覧に変更があったことを検知して画面の復元を開始しているが、デスクトップを表示して1秒未満でアプリを実行されると画面の復元が開始できない。Autohotkeyで正しくプロセスの一覧が取得できるようになるまでタイムラグがあり1秒待ちを外すとプロセスを正しく監視できない。
また、起動されるアプリについても多様なアプリが存在していてプロセスの一覧が変わったからといって画面を復元するためのウインドハンドルが取得できるわけではないため、ここでも待ち時間が必要となり動きとしては復元開始までにタイムラグが発生してしまっている。動きがもっさりして気持ち悪いが、仕方ないかと。
デスクトップを表示した後、以下のようなアプリや操作ではプロセスの状態が正しく取得できず画面が復元されない場合がある。
二重起動したら画面を復元するようにしたので画面の配置を壊して終わることはなくなったが、正しく動かないケースが多々あると思われる。
自分でソースを修正するような人は、そもそもこんなツールは使わないのかもしれないけれど、個々の環境で待ち時間のチューニングなどが必要かもしれないのでコンパイル方法を記載しておきます。
2. 「Compile」を選択する。
初回の選択時にコンパラがインストールされます。
3. 「Compile」を起動し、「Base File」を選択を「Sava」ボタンをクリックします。
4. 「デスクトップの表示.ahk」ファイルを右クリックし、「Compile script(GUI)」を選択します。
C:\tool\desktop
├─デスクトップの表示.ahk
└─デスクトップの表示.exe
5. 「Convert」ボタンをクリックします。
→「デスクトップの表示.exe」が生成されます。
コンパイル方法を書いておけば怪しげなEXEファイルを添付する必要がないかもしれない。これを貼っておこー
「デスクトップの表示.ahk」を直接実行できるが、「デスクトップの表示.ahk」をタスクバーにピン止めするとアイコンが変更できない。アイコンを変更するためにはEXEファイルのショートカットである方が都合が良いとの理由でEXEを添付したのだけど、怪しげな野良EXEセキュリティ的には実行したくはないよな。
環境によっては、「C:\tool\desktop」フォルダに対して除外の設定が必要かもしれない。
「デスクトップの表示.exe – ショートカット」を作ったので貼っておこー
「通り抜けループ」や「WipeOut」でデスクトップ上のアイコンにアクセスしようとしたけれど古いアプリなので正常に動作しないことが分かった。
macOSのミッションコントロールのホットコーナーで「デスクトップ」を指定したときのようにデスクトップにアクセスしたい。
「Win」キー + D でデスクトップが表示できる。
→デスクトップを表示した後、アプリを起動した場合、再度ショートカットを押下しても画面の配置が復元されない。
「通り抜けループ」や「WipeOut」の動作確認、および類似ソフトを調査した。
WinXCornersRegistryFix
https://github.com/vhanla/winxcorners/releases
Windowsでもホットコーナーの「デスクトップ」が設定可能かと思ったら元の画面の配置は復元されなかった。
#SingleInstance force
; show desktop
Send "#d"
Sleep 1000
; get window handles
hwnd1 := WinGetList()
; time out 60s.
Loop 60
{
Sleep 1000
; window handles monitoring
hwnd2 := WinGetList()
if getString(hwnd1) != getString(hwnd2)
break
if GetKeyState("Esc")
break
}
; window restore
for index, value in hwnd2
{
hwnd := hwnd2[hwnd2.Length - index + 1]
if WinExist(hwnd)
WinActivate(hwnd)
}
; helper function
getString(array)
{
ret := ""
for index, value in array
ret .= "|" . value
ret := LTrim(ret, "|")
return ret
}
「デスクトップの表示」を実行するとデスクトップが表示されます。デスクトップで何かしらのアプリを起動/操作などすると元の画面の配置を復元します。
また、Escキーの長押し、60秒経過でも終了します。
以下の手順では、ショートカットファイルを作成してアイコンを変更しています。アイコンを変更する必要がない場合は作業不要です。直接、ahkファイルを実行してください。
1.「show_desktop_ext_20240526.zip」ファイルを展開し、C:ドライブの直下に格納します。
C:\tool\desktop
├─デスクトップの表示.ahk
└─デスクトップの表示.exe
※格納場所任意。
2. 「デスクトップの表示.exe」を右クリックして「ショートカットの作成」を選択します。
3. 作成された「デスクトップの表示.exe – ショートカット」を右クリックして「プロパティ」を選択します。
4. 「ショートカット」タブで「アイコンの変更」ボタンを選択します。
5. 「参照」ボタンでエクスプローラーを指定し、アイコンを選択します。
6. 「デスクトップの表示.exe – ショートカット」をタスクバーにピン止めして実行します。
2. ダウンロードしたフォルダごと削除します。
たまに動作おかしいのでバグ修正するかもしれません。
WinGetList
https://ahkscript.github.io/ja/docs/v2/lib/WinGetList.htm
戻り値
ウィンドウは、(デスクトップ上の積み重ね方に従って)最上位から最下位へと順番に検索される。
おかしいなぁ…
拡張機能を作ったので貼っておこー
タスクバーをダブルクリックしたときに、タスクバーの表示・非表示を変更しています。
なお、アプリや画面の操作は画面上部でまとめて行いたいので、以下のアプリでタスクバーを画面上部に配置しています。
Explorer Patcher for Windows 11
https://github.com/valinet/ExplorerPatcher
Chromeのブックマークバーの表示・非表示もマウス操作で切り替えたい。
ブックマークバーの高さ(40px)分を非表示にして使いたい。
画面右上「…」で「ブックマークとリスト」-「ブックマークバーを表示」/「ブックマークバーを非表示」を選択する。
→メニューが多くて2階層、3階層と辿る操作がメンドクサイ。
キーボード操作では、Ctrl + Shift + B が使用可能。
→こんなの覚えてられない。キーボードを使いたくない。
Chrome ウェブストア
https://chromewebstore.google.com/
ブックマーク関連の拡張機能を検索したけれど見つからなかった。
よく使うキーボードショートカットをマウスから実行できないのか?
Chrome Extensions > Reference > API
https://developer.chrome.com/docs/extensions/reference/api?hl=ja
標準機能を呼び出すAPIが見つけられない。
また、セキュリティ的にも「Ctrl + Shift + B」キーを投げつけるようなことはできないのか?
拡張機能の作り方の調査…
以下の記事で実装できそうなのでやってみた。
Chrome拡張機能とローカルアプリでプロセス間通信
https://dev.classmethod.jp/articles/chrome-native-message/
ネイティブ メッセージング
https://developer.chrome.com/docs/extensions/develop/concepts/native-messaging?hl=ja
拡張機能のアイコンをクリックしてブックマークバーの表示/非表示を切り替え可能です。
参考にしたサイトのソースからプロセス間通信の処理を削除して、ローカルアプリの実行のみ行っています。
if WinExist("ahk_exe chrome.exe") {
WinActivate
Send "^+b"
}
ローカルアプリといっても、Autohotkeyのスクリプトで上記の4行を実行してChromeに「Ctrl + Shift + B」キーを送信するだけです。
なお、アイコンは、Googleのサイトから借用しています。ちょっと小さい。
Material Symbols & Icons
https://fonts.google.com/icons
bookmarks_bar_ext_20240514.zip
C:\tool\chrome
├─bookmarks_bar_ext.ahk
├─bookmarks_bar_ext.json
├─レジストリ削除.reg
├─レジストリ登録.reg
└─Extension
├─html
├─images
└─js
※格納場所固定。
2. 以下をアドレスバーに入力してChromeの機能拡張ページを表示します。
chrome://extensions/
3. 「パッケージ化されていない拡張機能を読み込む」ボタンで上記の「Extension」フォルダを指定します。
4. 読み込んだ拡張機能のIDを確認します。
5. 以下のファイルの拡張機能のID「jmkojgalabgapeklppjcmheekpnjedgh」部分を手順4.で確認したIDに修正します。
bookmarks_bar_ext.json
{
"name": "bookmarks_bar_ext",
"description": "bookmarks bar extension for chrome",
"path":"C:\\tool\\chrome\\bookmarks_bar_ext.ahk",
"type": "stdio",
"supports_native_initiated_connections": true,
"allowed_origins": ["chrome-extension://jmkojgalabgapeklppjcmheekpnjedgh/"]
}
※最後のスラは必須
6. 「更新」ボタンで再読み込みします。
7. 「レジストリ登録.reg」ファイルを実行してレジストリを追加します。
2. 「レジストリ削除.reg」ファイルを実行してレジストリを削除します。
自分の環境では意図したとおり動作していますが、動作保証はいたしかねます…w
「新しいタブ」では、ブックマークバーの非表示が機能しないようです。(Chromeの仕様)
ChromeのAPIで簡単に実装できるのかもしれませんが、拡張機能について初めて調べてまったくの知識不足のため、上記のとおりローカルアプリ実行する実装となっています。
レジストリにキーを1つ追加してあげるだけでChromeとローカルアプリが連携できることが分かったのは良かったかな。___φ(. . )メモメモ
他のショートカットキーも追加していけば機能拡張は可能です。1個できるとN個できるやつ。機能追加予定はありません。
Windows 11を再インストールするとリテール版のライセンスに切り替わる。
ライセンス確認
slmgr /dli
Windows 11 をダウンロードする
https://www.microsoft.com/ja-jp/software-download/windows11
Windows 11をUSBメモリーに書き込み。
BIOS画面は、EscまたはDeleteキーで表示する。
USBメモリーからブートしてインストール先の選択時に「C:\Driver」のLANドライバまたはWi-Fiドライバを読み込む。
Windows起動後、「C:\Windows.old」が作成されているので削除する。
非互換で動かなかったので修正した。
キーのリマッピング
https://ahkscript.github.io/ja/docs/v2/misc/Remap.htm
; 矢印キー × 5
^*Up::
{
Send "{UP 5}"
}
^*Down::
{
Send "{Down 5}"
}
^*Left::
{
Send "{Left 5}"
}
^*Right::
{
Send "{Right 5}"
}
; 削除
^*h::
{
Send "{BS}"
}
; ディスプレイ情報取得
getDisplayInfo(&x, &y, &height, &width)
{
MonitorGetWorkArea(1, &Left, &Top, &Right, &Bottom)
OutputDebug("Left=" . Left . " Top=" . Top . " Right=" . Right . " Bottom=" . Bottom)
x := Left
y := Top
height := Bottom - Top
width := Right - Left
}
; 画面左移動
!1::
{
getDisplayInfo(&x, &y, &height, &width)
hwnd := WinGetID("A")
WinMove(x, y, width/2, height, hwnd)
}
; 画面中央
!2::
{
getDisplayInfo(&x, &y, &height, &width)
hwnd := WinGetID("A")
WinMove(width*0.1, y, width*0.8, height, hwnd)
}
; 画面右移動
!3::
{
getDisplayInfo(&x, &y, &height, &width)
hwnd := WinGetID("A")
WinMove(x + width/2, y, width/2, height, hwnd)
}
; 音量調整
^F10::
{
Send "{VOLUME_MUTE}"
}
^F11::
{
Send "{VOLUME_DOWN}"
}
^F12::
{
Send "{VOLUME_UP}"
}
Ctrl + 矢印キー:矢印キー5回連打
Ctrl + hキー :BackSpace
Alt + 1キー :アクティブ画面左寄せ
Alt + 2キー :アクティブ画面中央寄せ
Alt + 3キー :アクティブ画面右寄せ
Ctrl + F10 :音量ミュート
Ctrl + F11 :音量Down
Ctrl + F12 :音量UP
無変換キー:IMEオフ*
変換キー:IMEオン*
*:Windowsの機能で設定。タスクバーの「あ」-「設定」-「キーとタッチのカスタマイズ」
Alt + 数字 で アクティブ画面を移動したときに数ピクセルずれる。画面まわりの影分のピクセルを考慮する必要があるけど放置する。Windows 11のスナップ機能で代替可能(Winキー + 矢印キー)なのでいらなくなる予定。
最大化、最小化、スナップ……[Windows]+矢印キーでウィンドウを自在に操る
https://forest.watch.impress.co.jp/docs/shseri/usefulkeys/1431434.html
デスクトップを分割・複数のアプリを並べる「スナップ レイアウト」がよりスマートに
https://forest.watch.impress.co.jp/docs/news/insiderpre/1563875.html
macOSでは、Rectangle を使用していたのでこれも貼っておこー
Rectangle
https://rectangleapp.com/
Spectacle
https://github.com/eczarny/spectacle
https://ahkscript.github.io/ja/docs/v2/KeyList.htm#IME
AutoHotkey V2.0では、Caps Lockキーが扱えるのかもしれないけど従来どおりChange Keyで置き換えたのでこれも貼っておこー
Change Key
https://forest.watch.impress.co.jp/library/software/changekey
Sysinternals Ctrl2Cap
https://learn.microsoft.com/ja-jp/sysinternals/downloads/ctrl2cap
現在入手不可。ググったけど見つからないので、古いバックアップファイルからコピーした。
Windows VistaでWindows AeroのUIになった頃から使えなくなったフリーソフトが、Windows 10 や 11では問題なく使えたりする。Windowsの互換性すげえなあ。
最近は、仮想デスクトップが使えるからこのたぐいのソフトは要らないかもしれないけど、デスクトップにファイルを置いて作業する人には便利なユーティリティソフトたち。20年以上前に使っていたソフト再び…
要るか要らないかはあなた次第です。
https://www.vector.co.jp/magazine/softnews/100615/n1006151.html
問題なく使えそう。
https://hp.vector.co.jp/authors/VA031384/software/WipeOut.html
Windows XP互換モードで起動可能。
https://chihiro718.jpn.org/software/PopUpIcons/index.html
起動不可か?
You
「懐かしいソフトウェア」を略してなんと言いますか?
ChatGPT
「懐ソフト」ですね。
👍
とりあえず以下のソフトをインストールした。
*:初めてインストールして試用中。
**:通り抜けループ。バックアップファイルからコピーした。
Chromeのメイリオが美しくないのでフォントを変更した。
Noto CJK fonts
https://github.com/notofonts/noto-cjk
日本語フォント
https://github.com/notofonts/noto-cjk/tree/main/Sans/OTF/Japanese
Chromeの拡張機能を追加
Stylus
https://add0n.com/stylus.html
すべてのタグにフォントを指定した。
* {
font-family: 'Noto Sans CJK JP DemiLight';
}
macがいいね…
イベントログ
システムは低電力状態から再開しました。
スリープ時間: 2024-04-27T14:19:51.760377200Z
スリープ解除時間: 2024-04-27T17:21:23.876107000Z
スリープ状態の解除元: デバイス -ACPI Wake Alarm
コントロール パネル\すべてのコントロール パネル項目\電源オプション\プラン設定の編集
「詳細な電源設定の変更」
「スリープ」
「スリープ解除タイマーの許可」
「有効」→「無効」に変更
デバイスマネージャー
HID準拠マウスのプロパティ
「このデバイスで、コンピュータのスタンバイ状態を解除できるようにする」のチェックを外す。
ディスクが分割されていない。C:ドライブだけで全容量を使用している。
システムファイルとデータファイルは、分けておきたいので別途。
「Windows」キー + 「.」キー
初めてこれ使った。Windowsにも文字ビューアある。
https://www.amazon.co.jp/gp/product/B0C5C42G8W/
ミニPCが流行っているようなので3万円で買ってみた。
トリグキー。今のところ問題なく使えている。
備忘録:
Windowsのセットアップは、ローカルユーザーで行うこと。MicrosoftアカウントにログインしてWindowsをセットアップすると意図しないフォルダ名でユーザーが作成される。Microsoftアカウントの先頭5文字で切られるのバグやん。
ユーザーを再作成する方法をググって、Microsoftアカウントからサインアウトして、ローカルユーザーを作成して、OSからサインアウトして、作成したユーザーにサインインして、新たにユーザーを作成して、新しいユーザーにサインインして、Microsoftアカウントにサインインして、旧ユーザーのフォルダを削除するみたい変な作業が発生して草。
あとは、Amazonの書き込みにもあったけどWindowsライセンスがボリュームライセンスなので問い合せしないとライセンス問題が発生するのかもしれない。