2018年01月一覧

WPF TreeView with SelectedPath binding

Windows エクスプローラーが備えているフォルダツリーのようなものを、 WPF を利用している自作アプリケーションで使用したいことがあります。
調べてみるといくつかの実装が見つかりますが、フォルダツリーの実現のためにビューモデルとビューが分離されている本気度の高いものが多く、もう少し手軽なものがないかなと思った次第です。

以前に以下のアドレスで公開されていた方式が割と気に入っていたのですが、現時点においてアクセスが出来なくなってしまいました。
http://khmylov.com/blog/2010/11/wpf-explorer-treeview-with-selectedpath-binding/

ちょっとしたときにはこれで十分だったりしてお気に入り実装だったので、元の記事を自分なりに再解釈してみたいと思います。

続きを読む


Microsoft Store と Thumbnail Handler

Microsoft ストアでデスクトップアプリも配布できるようになったおかげで、一部のシェル拡張も配布出来るようになりました。
現時点においては、サムネイルハンドラやプレビューハンドラ、プロパティハンドラが対応しているようです。 Paint.Net もストアでの配布が始まり、そのタイミングで tga と dds ファイルのサムネイルハンドラが機能するようになったみたいです。
サムネイルハンドラと聞いて、これはちょっと調べておかないとと思ったので、記録として残しておきます。

情報について

元は Desktop Bridge: Creators Update のブログで書かれた内容が最初でした。
従来のデスクトップアプリをストアで配布出来るように、 Desktop Bridge の機能が用意されました。ここでファイルの関連付けや各ハンドラのようなレジストリの変更が必要なものも対応出来るように機能拡張されて使えるようになりました。

続きを読む


Windows10 で x86/x64 インストールディスクをまとめる その2

以前のチャレンジでは UEFI に対応できていない状態だったので、 UEFI 対応のインストールディスクに出来ないかをチャレンジしてみました。
まずは USB メモリに 32bit, 64bit どちらの UEFI からでも使えるようにデータを構築したいと思います。 ただ多くの環境では 64bit UEFI のため、 32bit のほうは出番が少ないと思います。
たまに 32bit UEFI を搭載している場合があるので、そのときのことを考慮しなければ、 UEFI は 64bit のみ、と割り切ると作業が楽になるかもとは思います。

続きを読む


Windows10 で x86/x64 インストールディスクをまとめる

dism を使って wim を操作している際に、実は x86 版と x64 版のインストールディスクも結合できるのではないかと思ったので挑戦してみました。結果は一部課題が残っていますが、悪くはないのかなと思っています。

準備

それぞれのインストールディスクから中身をコピーしておきます。
とりあえず Fドライブに 32bit のディスクが、 Gドライブに 64bit のディスクがセットされているとして、 d:\work ディレクトリ以下にコピーするコマンドは以下のようになります。

よく使うエディションが Professional のものなのでこれだけを取り出して使用することにします。他のエディションも使いたい場合にはそれのインデックス番号を確認して取り出してください。

このようにして取り出すと、 install.wim よりはファイルサイズが若干小さくなりました。容量をケチる方法として、 export-image を使うことも出来そうな気がします。

続きを読む


Windows7 の WindowsUpdate 適用済みディスクを作る (2018/01版)

当ブログで人気のある記事の1つに「Windows7SP1 ディスクに ロールアップKB3125574 を統合する」 がありますが、これは 2016 年夏のものでした。
今でもこの方法で、うまく結合できることは確認しましたが、ロールアップや累積的な更新プログラムが何度か出ているので、手順も更新したほうが良いと感じたのでまとめ直しました。
以降の内容では、 x64 版で作業していますが、 x86 版でもファイル名などの読み替え程度で適用できるようにしています。

関連記事

作業環境

Windows10 Professional 1703 x64 の環境で本記事の作業を行いました。それ以外の環境で当作業を行う場合には、 dism のバージョンが違うことによるオプションの違いが発生するかと思われます。
また、最後の起動ディスクイメージ作成に oscdimg を使用するために、 Windows ADK をインストールしてあります。この中に含まれる Deployment tools をインストールすると oscdimg が使用可能となりました。
USB メモリに起動ディスクを作成する場合には、 oscdimg は不要です。

続きを読む


DirectX11 でマルチフルスクリーン その3

DirectX11 でマルチディスプレイ環境で全てのディスプレイでフルスクリーンモードとしたいのに SetFullscreenState が失敗してしまう件の続報です。
この症状は、 Windows10 Creators Update 適用環境でも発生します。おそらく RTM 版から挙動は変わっていないのでは、と思います。詳しくは、前回までの記事を参照してもらうとして、今回は「どうしてもフルスクリーンモードを使いたいんだ」ということで、1つの提案を出してみたいと思います。

続きを読む



DirectX11 でマルチフルスクリーン

Windwos 10 になってから、 DirectX11 の挙動で妙な点を発見しました。
以前 Windows 8.0 で OpenGL をマルチディスプレイで使った際にも変な動きがありました。それについての詳細情報は以前の日記を参照してください。OpenGL での問題の動きは Windows10 1703 でも発生していないようです。
今回の問題は、 SetFullscreenState が失敗して、各ディスプレイでフルスクリーンに遷移できないというものです。

現挙動の確認

昔ながらのコードが悪いのかと思い、 IDXGIFactory2 を使用して、 CreateSwapChainForHwnd でスワップチェインを作成するようにしてみました。
また、 DXGI_SWAP_CHAIN_FULLSCREEN_DESC にも各ディスプレイから取得した情報で値をセットするようにし、 Windowed メンバを TRUE にした状態で、フルスクリーンのスワップチェインを作成するようにしました。もちろん、各画面に応じて別のウィンドウとなるため、ウィンドウ (HWND) は2つ作成しています。

これでアプリケーションを実行すると、一瞬フルスクリーンモードになるのですが、すぐに解除されてしまいウィンドウモードでの実行となってしまいました。 NVIDIA, Intel ともに同じ動きをしているので、 Microsoft Windows 側の仕様変更が疑われます。

GetFullscreenState で状態を確認して、フルスクリーンモードに再度遷移する、と実装を修正して実行を試みました。結果はある程度はフルスクリーンモード状態になって、その後解除され、再びフルスクリーンモードに遷移して・・・と繰り返す動きでした。

続きを読む