Windows11の小さいタスクバー

Windows11では残念なことに「小さいタスクバー」表示が設定から出来なくなりました。
ノートPCなどでは限られたデスクトップ領域を広く使用したいので小さくしたいですよね。

レジストリを直接弄れば小さく出来るのですが、日時やアイコンがはみ出ていてブサイクです。

どうにか出来ないかと調べていると、フリーソフトのTClockを使用すると改善できることが分かりました。
助かりました。
※似たソフトにTTClockというものがありますが、これは全く別のソフト。

UVCカメラ対応

先日、WEBカメラなどUVC規格のカメラを使用する案件を行いました。

いつもはUVCカメラのアクセスはOpenCVで行っていたのですが、OpenCVで露光やフォーカスなどのサポート有無や値範囲の取得方法が分からず(対応いていない?)、しかたないのでDirectShowを使用しました。

DirectShowのCOMオブジェクトを直にアクセスして操作するのはなかなか大変でしたが、良い経験になりました。
ライブラリ化を行ったので今後の案件では楽に使用できそうです。

QRコードの読み込み

今行っている案件で、QRコードの読み込みを実装しています。

QRコードの読み込みにはZXing.Netを使用しましたが、画像の明るさやQRのサイズによって結構読めない場合がありました。
普通にZXing.Netを使用すると以下の結果になり、6個中3個しか読めていないです。見た目にはかなり綺麗にQRコードが撮影できているのですが。

単純に、前処理に大津の2値化を行うだけでもだいぶ精度が良くなりますが、今回はもっと高精度な前処理+ロジックを行うようにしました。詳細は秘密。
結果、全てのQRコードが読めるようになりました。

string型プロパティの複数行入力

TextBoxコントロールのTextプロパティなどはプロパティウィンドウで複数行入力が可能です。
以下の画面のように右端の下矢印ボタンクリックで複数行用の入力ウィンドウがポップアップします。

今回、これと同じ挙動を自作のプロパティで行いたく、調べた結果、以下のように属性指定すると複数行入力が行えることがわかりました。


        [Editor("System.ComponentModel.Design.MultilineStringEditor, System.Design, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a", typeof(System.Drawing.Design.UITypeEditor))]
        public string Text {
            get => _Text;
            set {
                ...
            }
        }

VisualStudioの起動が遅い

弊社で開発している、ある案件のVisualStudioソリューションを開くのが異常に遅い問題があり、
てっきりプロジェクト数が100個くらいあるのでしかたがないと諦めていたのですが、
原因がわかり速くなりました。

問題は「Microsoft Visual Studio Installer Projects」で作成したインストーラプロジェクトでした。
インストーラプロジェクトを含んでいるとVisualStudioソリューションを開いていからマウス操作がまともに行えるようになるまで1分くらいかかっていたのですが、
インストーラプロジェクトを省くとマウス操作が数秒で行えるようになりました。

今は、ソリューションに空のダミーインストーラプロジェクトを含むようにし、インストーラを作成するときだけソリューションファイルを置換してダミーインストーラプロジェクトから本番インストーラプロジェクトに切り替えるようにしました。

もっと早くに気づけばよかった。

C# ファイルがロックされているかを取得

C#でファイルが開かれてロックされているかを取得したかったので.netを調べたが、どうも無いみたい。
無いものは自作。FileInfoクラスのIsLocked拡張メソッドを社内ライブラリに追加しました。
(どこかのサイトを参考に作成したのですが、どこか忘れてしまいました。)

使用頻度は少ないですが、なにかの役にはたつでしょう。


public static bool IsLocked(this FileInfo file) {
    if (file == null) return false;
    if (file.Exists.Not()) return false;
    try {
        using var _ = file.Open(FileMode.Open, FileAccess.ReadWrite, FileShare.None);
    } catch {
        return true;
    }
    return false;
}

macでの開発

iPhoneアプリの開発を今後行っていくため、初めてmacをさわりました。
今までほぼWindowsしか扱ってこなかったので、これまでの常識とは異なることが多く大変ですね。

どうにかこうにかテレワークで開発が行える所まで準備ができ、少しずつ慣れていっているところです。

新しいことを学ぶのは大変ではあるものの楽しくて良いです。
時間が無限にあれば良いのですが、そうは行かないのでまずは既存の開発を前倒しして、早いことiPhone開発を初めたいところです。

社内ライブラリの.net5(.net core系)対応

社内ライブラリを改造し、.net5などの.net core系で動作するようにしました。

社内ライブラリは.net frameworkで作成されています。
本来であれば.net coreに移行するのが良いのですが、それはなかなか大変です。
とりあえずは.net frameworkのままとして、.net coreプロジェクトで使用しても正しく動作するように改造を行いました。

今までの単体テストも全てパスしましたので、とりあえずはこれで当分なんとかはなるだろうと思います。

いずれは、.net coreへの完全移行も考えないと行けないですが、少なくとも長期サポート版の.net6が出てからですね。