-
Notifications
You must be signed in to change notification settings - Fork 0
Development
Orahu01 edited this page Aug 20, 2026
·
2 revisions
AeroWidget は Electron 製のデスクトップアプリです。ネイティブ Windows API 呼び出しには koffi(FFI ライブラリ)を使っています。
git clone https://github.com/Orahu01/aerowidget.git
cd wallpaper
npm install
npm start # 開発モードで起動npm run genicon # アプリアイコンを再生成 (assets/)
npm run dist # Windows 向け exe をビルド (dist/)src/
main/ # メインプロセス
main.js # ウィンドウ管理・IPC・トレイ・全体の配線
config.js # 設定の読み書き (%APPDATA%/aerowidget/config.json)
wallpaperAttach.js # WorkerW へのアタッチ (壁紙の核となる仕組み)
monitors.js # 物理モニタの列挙・Electron ディスプレイとの対応付け
weather.js # Open-Meteo
feeds.js # RSS / 株価 (Yahoo Finance)
media.js # 再生中メディア (SMTC ブリッジ)
lhm.js # Libre Hardware Monitor 連携
stats.js # 内蔵 CPU/メモリ計測
gfonts.js # Google Fonts のダウンロード・管理
updater.js # 自動アップデート (electron-updater)
fullscreen.js # フルスクリーンアプリ検知 (省電力)
heartbeat.js # 定期処理の単一集約タイマー
preload/ # 各ウィンドウ用の contextBridge
renderer/
wallpaper/ # 壁紙ウィンドウ (実際に描画される本体)
settings/ # 設定ウィンドウ
folder/ # フォルダウィジェット (対話可能な小窓)
note/ # メモウィジェット
pomo/ # ポモドーロタイマーウィジェット
assets/
smtc.ps1 # SMTC ブリッジ用 PowerShell スクリプト
docs/
index.html # GitHub Pages の紹介ページ
Wallpaper Engine や Lively Wallpaper と同じ手法です。
-
Progman(デスクトップのルートウィンドウ)に0x052Cメッセージを送ると、WorkerWという不可視ウィンドウが生成されます - Electron のウィンドウを
WS_CHILDスタイルに変更し、アイコンレイヤー (SHELLDLL_DefView) の背面にあるWorkerWへSetParentします - これでウィンドウはデスクトップアイコンの「背面」に表示され、タスクバーやウィンドウ切り替えには現れません
Windows のバージョンによって WorkerW の階層構造が異なる(Win10 型 / Win11 24H2 型)ため、両方のレイアウトを検出して対応しています。
フォルダ・メモ・ポモドーロタイマーは、壁紙とは逆に Progman 直下の最前面(アイコンより上、かつすべてのアプリより下)に配置しています。これにより、デスクトップ上に常駐しつつクリックを受け取れます(Rainmeter と同じ層)。
モニタごとに拡大率 (DPI) が異なる環境では、ウィンドウを子ウィンドウ化した際に Electron 側の DIP(デバイス非依存ピクセル)換算がずれることがあります。実際の物理ピクセルサイズを測定し、目標サイズと合うように DIP 値を逆算して補正する仕組みを入れています(fixAttachedSize / placeFolder の収束ループ)。
- 背景は既定で完全静止(transform アニメーションのみ、CSS のリペイントを伴わない)
- 時計は秒表示が必要な時だけ毎秒 tick し、それ以外は毎分しか起きません
- フルスクリーンアプリ検知は WinEvent フック駆動(ポーリングなし)で、ゲーム中は対象モニタの描画を自動停止します
- メインプロセスの定期処理はすべて
heartbeat.jsの単一タイマーに集約しています。Electron のメインプロセスはsetIntervalが複数あるだけでメッセージポンプが空回りして CPU を消費するため、これを避けています
バグ修正・機能追加の Pull Request を歓迎します。大きな変更を加える前に、Issue で相談していただけるとスムーズです。