疑似透過で壁紙に溶け込むデスクトップカレンダー AIG-Calendar

AIG-Calendar

少し前にAIに全プログラムコードを書かせてWindows用ソフトウェアを作るという記事を掲載しましたが、正にその成果物が今回紹介するAIG-Calendarです。因みにAIGはAI generatedの略で、このソフトウェアのプログラムの全コードはAIによって生成された物になります。形式上の作者である私はただAIが生成したプログラムコードをコピペしただけです。

特徴として日本の祝日に完全対応。これは必須の機能として実装していますが標準では空の状態なので設定画面からワンクリックで内閣府のサイトから祝日データをダウンロードして反映させる仕組みになっています。また、カレンダーのサイズやフォント、西暦と月、曜日、平日、土曜、日曜、祝日の各フォント色、予定日と当日の背景色をユーザーで指定出来るようにしています。

他に簡易スケジューラと背景を疑似的に透過する機能がありますが、疑似透過機能は訳があって疑似の名前が付くように本当のカレンダー背景の透過ではありません。本来はその方向で進めていたのですが、背景を完全に透過してしまうと日付などのフォントが滲むという問題があり、苦肉の策としてカレンダーの位置の背景をキャプチャしてキャプチャ画像の上に日付を描画する仕組みとなっています。この仕組みだと当然ながら位置を移動したりカレンダーのサイズを変えると背景が不自然な状態になるので、カレンダーを設置する位置とサイズが固まってから行う必要があります。種別は勿論フリーソフトウェアですが、何だか恥ずかしくてオープンソースにはしていません。

動作環境はWindows 11/10で未確認ながら7以上で動く想定です。別途ランタイムのインストールは不要ですが、環境によってはVisual C++ x64再頒布可能パッケージのインストールが必要です。

AIG-Calendarのダウンロードと設定

ここからダウンロードして下さい。ダウンロードした圧縮ファイルを展開すると実行ファイルと設定が書き込まれているcalendar.ini、簡易説明.txtが入っています。簡易説明.txtを除いた2つのファイルで動作しますが、calendar.iniを削除した場合は起動時に自動で生成されます。

展開後のファイル構成

AIG-Calendar.exeを実行すると標準で200 x 200サイズ、フォントにYu Gothic UIが適用されたカレンダーが表示されます。また、システムトレイに常駐するのでトレイアイコンかカレンダー画面の右クリックメニューの「設定」から設定画面を表示。上部は主にカレンダーやフォントのサイズの指定となっていますが余白は外側の淵の余白となります。中部に色の設定、下部に祝日データの取得ボタンが配置されています。色設定は即反映されますがサイズの変更は「OK」で設定画面を閉じる前に一旦右下にある「適用」ボタンで反映させる事が出来ます。

設定画面

冒頭の方でも書いた通り祝日データは初期状態で空なので「更新」ボタンから取得します。「祝日データを更新しますか?」と表示されたら「OK」で取得開始。当年から最新までの祝日データがcalendar.iniファイルに書き込まれて反映されます。仕組み上、年に1回ぐらいでこの操作が必要になります。また、自身でcalendar.iniファイルを直接編集して「2025-09-16=創立記念日」のように登録しておけば独自の休日をカレンダーに反映させる事も出来ます。

祝日データの取得

AIG-Calendar 機能

疑似透過機能

一応AIG-Calendarの目玉機能となっているのが疑似透過機能です。これは実際に背景を透過するのではなく疑似の言葉通り疑似的に透過しているように見せる機能で、設定画面にある「疑似透過キャプチャ」ボタンをクリックするとカレンダー背面の壁紙をキャプチャします。キャプチャした画像は実行ファイルと同じ場所に保存され、その画像を背景に設置して更に上に日付を描画して表示します。繰り返しキャプチャを行った場合は常に画像が上書きされます。また、背景色を設定すると自動で解除となります。

疑似透過表示機能

カレンダー上での操作

カレンダー上でホイール回転により別の月を表示させる事が出来ます。ホイール回転上で翌月以降、下で先月以前を表示しますがホイールクリック(中クリック)で当月へと戻ります。またスケジュールで予定を登録している場合は、その日付をダブルクリックするとポップアップで予定を表示。複数件ある場合も纏めて表示されます。他に右クリックメニューではカレンダー画面の移動の停止やホイール回転による月送り、ダブルクリック、右クリックを停止させるメニューがあります。これはデスクトップ上に配置する上で誤操作を防止する為に付けています。右クリックメニューを停止した場合はカレンダ画面からメニューを開けなくなりますが、トレイアイコンから開く事は出来ます。

予定のポップアップ表示

簡易スケジュール機能

簡易スケジュール機能と銘打ってますがスケジューラと呼べるほどの物ではなく実際には通知タイマーという名称の方が相応しい機能です。この機能は右クリックメニューで「予定一覧」から予定一覧画面を出し、「追加」から「予定編集」画面を表示。日付と時間を入力して「OK」で即登録となります。上でも書いたように登録した予定はカレンダー上でダブルクリックして確認可能。登録した時間になるとダブルクリック時のポップアップとほぼ同じ通知ポップアップが表示されます。

予定の追加

因みに通知ポップアップはぴったりの時間を狙って表示させようとすると高い確率で何十秒か遅延するので、意図的に1分早く通知するように仕込んであります。結果的に指定時間に近い時間に通知されるか30秒ぐらい早めに通知される事がありますが、遅いより少し早い方が弊害が無くて良いかと考えています。それと古くなった通知は次回の起動時に自動で消えるように設計しています。登録した予定はcalendar.iniに記録されますが、起動時に現時間より古い予定を自動削除する仕様になっています。

AIG-Calendar 備考

上で通知のタイミングの件を書きましたが、日付の当日表示の切り替わりはぴったりの時間で仕込んであるので最悪1分近く表示が遅れます。これは1分間隔でしか時間をチェックしていないからですが、カレンダーソフトでわざわざ1秒単位でチェックして負荷を掛けるのは無駄だという設計思想からそうなりました。気にしなければどうって事ない仕様です。

予定の自動削除は本来ユーザーがタイミングを設定出来るべきだと思うのですが、その部分の設定を作るのが面倒で古い予定は自動削除という現仕様になっています。また、日付をダブルクリックでその日の予定を追加出来るようにした方が良かったかなとか思う所が多々ありますが、先に実装した機能を変更する必要が出てきて面倒になったりと、もっと最初からしっかり構想を立てて進めていくべきだったと若干後悔しています。ただそれでも自分が必要としている仕様や機能は実装出来たので満足しています。

AIにコードを生成させて作った物ではあっても想像以上に苦労しました。AIが「完璧に動作します」と自信満々でも動作確認したらエラーが出まくるとか、そもそもエラーでビルド出来ないとか2時間や3時間、何も進展せずに時間を無駄にしただけだった事も少なくなかったです。それでも形になってこうやって公開まで漕ぎ着ける事ができ達成感は得られました。

コメント

タイトルとURLをコピーしました