「Swindom」のVersion 4.4.0 Betaを公開しました。
報告が遅くなりました。
すみません。
●前置き
予定より遅れてしまいました。
システムトレイアイコンや一部のウィンドウの表示が乱れるなどの修正、ディスプレイ情報の自動更新などの機能の追加、などに時間がかかりました。
動作確認するソフトウェアを増やすなどをしたのですが、表示の乱れなどの不具合が見つかったので修正しました。
表示が乱れるウィンドウは残っていますが、いつ解決できるか分からなかったので公開することにしました。
●更新内容
- 設定ファイルの読み込みについて
技術的な内容になってしまうのですが、設定ファイルをデシリアライズ機能で読み込むようにしました。
以前は設定情報を一つずつ取り出していましたが、デシリアライズ機能を利用してまとめて取り出すようにしました。
一つずつ取り出すと、処理の記述が大変、ミスの可能性が高い、などの問題があります。
デシリアライズにも問題はありますが、処理の記述が簡単 (設定情報が増えても読み込み処理を追加する必要がない)、ミスの可能性が低い、などがあります。
XMLのデシリアライズ機能は、上位下位互換性を保てるように処理を記述していない場合、設定情報を追加したり削除した場合に取り出すことができなくなってしまいます。
互換性を保てるようにしておけば良いのですが、不安な部分があったので念のために一つずつ取り出していました。
安定しているJSONに変更した、設定情報が増えたことで管理が大変な状態だった、などが理由でデシリアライズ機能を利用することにしました。
- 言語ファイルと設定ファイルの形式をXMLからJSONに変更。
JSONはXMLと比べて処理の負荷が少なく、ファイルサイズが小さい特徴があります。
これが理由で変更しました。
設定ファイルは、古いバージョンを除いてXML形式を読み込むことができます。
言語ファイルは、XML形式は読み込めません。
- 設定ファイルの拡張子を「.config」から「.ini」に変更。
XMLからJSONに変更したので拡張子を変更しました。
「.ini」のファイルが存在する場合は、「.ini」のファイルを読み込みます。
「.ini」のファイルが存在せず、「.config」のファイルが存在する場合は、「.config」のファイルを読み込みます。
どちらも存在しない場合は、「.ini」のファイルが作成されます。
実行時に旧設定ファイルを削除するかの選択ができます。
- 「指定ウィンドウ」の無効にしている項目のホットキーは処理しないように変更。
各項目で「イベント」や「タイマー」を無効状態にしていればホットキーのみの処理にできるので、処理しないように変更しました。
- 「指定したバージョン以外」の「知らせる」機能を変更。
「指定したバージョン以外」の「知らせる」を「通知」に移動と変更しました。
指定したバージョン以外は処理せずに通知させたい場合は、「指定したバージョン以外」と「通知」の二箇所でバージョンを指定する必要があります。
手間が増えますが、機能が違いますし、処理しない条件を指定せずに通知できるようにするために分けることにしました。
- 「指定ウィンドウ」のバージョン情報の取得を変更。
「指定したバージョン以外」の通知機能を「通知」に分けたので、取得したバージョンの値を直接入れずに、「取得する情報」タブの「バージョン」に入れることにしました。
- ウィンドウ処理後に一部のウィンドウで表示が乱れる不具合を修正。
修正したウィンドウは一部のみで、表示が乱れるウィンドウは残っています。
表示が乱れるウィンドウは「メモ帳」で、イベントの「最小化が開始された」と「「通常のウィンドウ」の状態のみ処理する」が有効の場合に表示が乱れます。
「メモ帳」以外にもありそうですが、私が確認しているものでは「メモ帳」のみになります。
- システムトレイアイコンの表示の不具合を修正。
システムトレイアイコンにマウスポインターを乗せた時に、ツールチップの上にもう一つツールチップが表示されていました。
ツールチップがマウスポインターの位置に表示されずに、画面の左上に表示される場合がありました。
システムトレイアイコンの処理に「Hardcodet NotifyIcon for WPF」を利用していたのですが、「Windows API」に変更しました。
- 全画面ウィンドウの追加判定の設定を追加。
「全画面ウィンドウの追加判定」は、全画面ウィンドウが閉じられても処理が再開されない場合に有効にしてください。
イベントが発生した時に判定しているのですが、一部のウィンドウでイベントが発生せずに停止や再開されない可能性があるので、一定間隔でも判定できるようにする機能です。
念のための追加の判定機能なので、通常は無効にしてください。負荷はほとんどないと思いますが多少の影響はあります。
- 「処理しない条件」に「子ウィンドウ」を追加。
設定、バージョン情報、などのウィンドウが子ウィンドウです (子ウィンドウとして設定されていない場合があります)。
「タイトル名」や「クラス名」を指定している場合は、親ウィンドウと子ウィンドウの文字列が同じ場合を除いて、有効にしなくても子ウィンドウが処理されることはありません。
「ファイル名」のみを指定している場合に有効にすると良いでしょう。
- 「処理しない条件」に「指定したサイズ以外」を追加。
指定したサイズ以外の場合は処理されず、指定したサイズの場合のみ処理されます。
- イベントで処理する機能に「処理の待ち時間 (ミリ秒) (「表示された」のみ)」を追加。
「表示された」イベントのみで発生する問題の対策機能です。
ソフトウェア側の初期化が完了する前にウィンドウの位置やサイズを変更すると、あとから処理されるソフトウェア側の決められた位置やサイズになる、表示が乱れる、処理しない条件を設定していても処理される、などの問題が発生します。
ソフトウェア側の初期化前に位置やサイズを変更することで発生する問題を解決するための機能です。
処理待ちの設定を追加せずに解決できないか探していたのですが、方法を見つけられなかったので処理待ちの設定を追加することにしました。
- 説明を表示する機能を追加。
まだ一部の説明しかないですが、追加予定です。
- ディスプレイが変更された場合に自動で情報を更新する機能を追加 (解像度が変更された場合など)。
ウィンドウの位置やサイズを変更するにはディスプレイの情報が必要なのですが (設定による)、処理の度に情報を取得していると負荷が増えてしまいます。
以前はディスプレイが変更された場合に知らせてくれる方法が分からなかったので、システムトレイアイコンのメニューから更新するようにしていました。更新するまで古いディスプレイの情報で処理するので、更新しない場合は位置やサイズを正しく変更できない問題がありました。
ディスプレイが変更された場合に知らせてくれる方法が分かったので、自動で更新する機能を実装することができました。
念のために手動で更新する機能は残しています。
- システムトレイアイコンをクリックして全ての機能を無効化、無効化した機能を有効化する機能を追加。
以前は実装していたのですが、機能が増えて対応不足になっていたので、機能を削除していました。
●今後について
将来的に、不要、他の機能で代用できる、プラグインで実装、などが理由で機能を削除する場合があります。
未実装の一部要望に関してですが、優先順位が低い (不具合修正などのほうが優先順位が高い)、実装方法が分からない、などで実装できていません。
その他の一部要望に関してですが、検討した結果、需要がほとんどないなどが理由で実装しない機能があります。
すみません。
Comments