カテゴリー別アーカイブ: プログラミング系

今更ながらMultiWallpaperで画像配置がバグる原因が分かった

 それこそ公開当初からMultiWallpaperで画像配置がバグるという報告は頂いていたのですが、自分の環境で再現できずに対応できないままでした。
それが今更ながら自分の環境で再現でき、原因が分かりましたので、時間を見つけて直そうかなぁと思っています。

 一応何が原因かを書いておくと、「System.Windows.Forms.Screenのはなしは信じるな」ということです。
.NET FrameworkのScreenクラスでディスプレイの情報を取得すると、ほとんどの場合はWindowsで認識されている順番と同じ順番で取得できるのですが、環境によっては順番が変わるようです。
自分の環境では問題なかったので同じ順番だと思っていましたが、まあ誰かが同じ順番と明言したわけではないですね…
対策は調べている途中ですが、おそらくWin32 APIでディスプレイの情報を取得するしかないのかなぁと…面倒だなぁ…

Windows 11でもMultiWallpaperは動作します

 Windows 11 Insider Preview(Windows 11 Pro 21H2 Build 22000.51)上でのMultiWallpaperの起動、壁紙設定が行えることを確認しました。
マルチモニタ対応の機能はWindows 10よりも増えているようですが、(Insider Previewの段階では)壁紙関係はWindows 11になっても変更はないようです。

MultiWallpaperのメンテナンスを行いました

 昨日の記事の続きです。

 昨日の記事では、サブディスプレイが高dpiだと正常に動作しませんと書いていましたが、高dpi対応のマニフェストの設定やコンフィグファイルの設定を弄っていたら直りました。
症状としては
https://stackoverflow.com/questions/34619270/monitors-with-different-scaling-gives-gaps-between-screen-bounds

https://developercommunity.visualstudio.com/content/problem/639455/c-screenallscreens-bounds-and-workingarea-values-a.html
あたりと同じなのですが、前者の対策を行った時点では解決していなかった気がします。
後者は違いが分からないけど作り直したら解決したという感じですが、自分もそんな感じです…

 最後になりましたが、タイトルにあるように完了形です。
とりあえずUIのHiDPI環境対応&壁紙設定対応ということで公開したいと思います。
完成度を高めたい気持ちもありますが、適当な間隔で達成感を得ないと続けられないので…

MultiWallpaperのメンテナンスを行おうと思ったけれど…2

 昨日の記事の続きです。
毎日アウトプットするようにしないと絶対に続かない気がするので、文章にしています。

 WinFormsで作成したUIの高dpi環境対応はできそうな感じです。
昨日画面がおかしくなったのは、マニフェストの設定が不十分だったようです。

 壁紙設定の高dpi環境対応は、とりあえず試している環境では動くようになりました。
メインディスプレイが高dpi+サブディスプレイが96dpiという環境です。
サブディスプレイが高dpiだったり、スケーリング比率の違う高dpiディスプレイ同士だったり、ディスプレイ3枚以上だったりといった環境でどうなるかはまだ謎です。
仮想でもこのような環境を構築するのが難しそうなので、どうしようかなぁという感じです。

 ちなみに、Windows 8以降であれば画面別に壁紙を設定できるようになっていますが、自作プログラムからでも画面別に壁紙を設定できるようです。(IDesktopWallpaper::SetWallpaper)
が、アプリ上で画面配置をプレビューするためだけに相変わらず面倒なことをしています…

MultiWallpaperのメンテナンスを行おうと思ったけれど…

 去年夏に給付金で自作PCを組み2010年にマカーになってから10年ぶりにWindowsをメインマシンとして使用しています。
Windows 10を使っていて不快なことはまぁたくさんあるんですが、その中の一つがHiDPI(高dpi)環境非対応アプリの見た目が汚くて不快なことです。
Windows標準ソフトでも多々ありますが…

 そういえばMultiWallpaperも高dpi環境に対応なんてしてなかったよなぁと思い起動してみましたが、当然ながら対応していません。
WinFormsを使用したC#アプリでも高dpi環境に対応できるようなので、高dpi環境用の設定を追加した状態がこれ。

まともに使えるようにするにはかなりの修正が必要になりそうです…

 そういえばちょっと前にWPFでMultiWallpaperを作り直したことがあったなぁとこちらを試してみたところ、こちらは崩れることはなさそう。
(というかこの作り直してるPCがSurface Pro 3の高dpi環境)
5年以上前のことなのでどこまで機能を付けたのか全く記憶にありませんが、上の画像の状態からまともに使えるようにするよりは楽な可能性があります。
ただ使っているWPF用のリボンUIが全然更新されておらず、Windows 8や10のフラットデザインじゃないんですよね…

 更に良く分かっていませんが今年中に.NET MAUIという新しいマルチプラットフォーム用UIフレームワークが出るとか…
これを待った方が良いような気がしています。
まあWindows 8から標準で画面別に壁紙を設定できるようになったので、そもそもどれだけの方がMultiWallpaperを必要としているのか分かりませんが…

Simple MultiWallpaper Changerバージョンアップしました

 ver.1.11 2017/08/08 ファイルの拡張子により選択される確率が異なっていた問題を修正しました。
今までランダムなつもりがランダムになっていませんでした…申し訳ありません…

 2年ぶりの更新で、また最近プログラムを作っておらず、こんなんで良かったかなぁという感じで色々進めたので、何か不具合ありましたら連絡いただけると助かります。
数年前にMultiWallpaperを作り直そうと思った件も結局止まっています…
最近仕事が忙しいせいか、プログラミング熱どころか何も熱が入らず、やる気が起きません…

 また8月8日は初めてこのウェブサイトを公開した日ということで意味もなく合わせました。
2002年8月8日…15年前…………

Simple MultiWallpaper Changerバージョンアップしました

Windows 10暫定対応として、MultiWallpaperを使って「レジストリを使用」オプションを有効にして壁紙設定していた場合に引き継ぐようにしました。

 しばらく忙しいのでしっかりと確認していませんが、画面位置の取得がなんか変わったようで、MultiWallpaper共々正常に表示するためには「レジストリを使用」する必要があるようです。
手持ちの環境がSurface Pro 3+外部モニタの2画面状態しかないため、環境によっては「レジストリを使用」しても正常に表示されないかもしれませんが…
来月に入れば少し時間が取れそうなので、ちょっと調べてみたいと思います。
ちなみに少し前まで作成していた新MultiWallpaperが完成していたら、Windows 8以降ではIDesktopWallpaperを使うので、Windows 10でも正常に壁紙を設定できていたと思うのですが…

公開中ソフトウェアのWindows 10対応状況について2

 公開中ソフトウェアのWindows 10対応状況についてのページを更新しました。
http://blog.g-sce.com/windows-10/

 Surface Pro 3のイメージバックアップをとり(Windows標準機能だとエラーが出て無理だったのでフリーソフトを入れて…)、Windows 10にバージョンアップしました。
軽く起動と動作を確認したところ、とりあえずの動作は問題なさそうでした。
詳細な動作確認はまた後ほど…

 ついでに作成中のMultiWallpaperも起動してみたところ、こんなことに…7では正常だったのですが…
mw3_win10
WPFのRibbonWindowだと最大化した時に画面からはみ出てしまうので、WindowChromeを使ってなんとか調整していた(参考)んですが、Windows 10ではまた調整が必要な模様…
ウィンドウ枠ぐらい標準で正常に表示できるようにしてほしいものです…

公開中ソフトウェアのWindows 10対応状況について

 公開中ソフトウェアのWindows 10対応状況についてのページを作成しました。
http://blog.g-sce.com/windows-10/

 Windows 10は1年間は無料でアップグレードできるとはいえ、アップグレード元のOSが使えなくなってしまいますし、1年経過後にデバイス構成を変更したら有料でライセンスを購入するしかないようです。
そうすると今手元にある環境でWindows 10を入れてもいいのはSurface Pro 3だけなんですが…
さてさてどうしましょうか…