WPF アプリケーション上で、F10 キーが押されたことを検出できない

こんにちは、Platform SDK (Windows SDK) サポートチームです。 今回は、WPF アプリケーション上で F10 のキーイベントを検出できない問題についてご案内します。 現象 Microsoft IME による日本語入力が ON の状態では、テキストを全選択してから F10 キーを押下しても、TextCompositionManager.PreviewTextInputStart イベント ハンドラーが呼び出されないケースがあります。 詳細 WPF アプリケーションにおいて、TextBox コントロールなどの日本語入力が可能なコントロールに UIElement.PreviewKeyDown イベント ハンドラーを追加すると、追加したイベント ハンドラー内で任意のキーが押されたタイミングをハンドリングすることが可能です。 ただし、Microsoft IME による日本語入力が ON の状態では、アプリケーションよりも Microsoft IME 側のキー検出が優先されます。 このため、押されたキーのシーケンスによっては、UIElement.PreviewKeyDown イベント ハンドラーが呼び出されないケースがあります。 例として、Microsoft IME による日本語入力が ON の状態で、テキストを全選択して F10 キーを押した場合は、UIElement.PreviewKeyDown イベント ハンドラーは呼び出されません。 なお、TextBox コントロールなどの日本語入力が可能なコントロールに TextCompositionManager.PreviewTextInputStart イベント ハンドラーを追加すると、日本語入力が開始されたタイミングをハンドリングすることが可能です。 この機能を利用すると、Microsoft IME による日本語入力が ON の状態であっても、TextCompositionManager.PreviewTextInputStart イベント…


Graphics.DrawLine メソッドで Panel コントロールに描画した直線が表示されません

こんにちは、Platform SDK (Windows SDK) サポートチームです。 今回は、Graphics.DrawLine メソッドを使って Panel コントロールに描画した直線が表示されない、という現象についてご案内します。 現象 Windows フォーム アプリケーションにおいて、下記 1. ~ 4. のように、予め拡大または縮小した Panel コントロールに対して Graphics.DrawLine メソッドを使って直線を描画すると、描画した直線が想定通り表示されない現象が発生することがあります。 Windows フォーム アプリケーションの Form の上に、Panel コントロールを配置します。 Panel コントロールにおいて、Control.Paint イベントをハンドリングし、3. 以降の処理を行います。 Graphics.Transform プロパティを使って、Panel コントロールを任意のサイズに拡大または縮小します。 Graphics.DrawLine メソッドを使って、Panel コントロールに直線を描画します。 なお本現象は、Windows 10 April 2018 Update (バージョン 1803) で発生することが確認されています。 原因 本現象は、Windows 10 April 2018 Update の GDI+ レンダリング処理の影響で発生しています。 回避策…


Virtual Bytes が、Windows 10 April 2018 Update 適用前後で異なる

こんにちは、Platform SDK (Windows SDK) サポートチームです。Windows 10 April 2018 Update (1803) 適用後、 64 ビットプロセスの Virtual Bytes が以前の OS で返されていた値と比較して大きく異なるようになりました。今回はその件に関してご案内します。 現象 Virtual Bytes はプロセスが使用している仮想アドレス空間の現在のサイズを表していますが、2018 年 4 月 30 日に公開された Windows 10 April 2018 Update (1803) 適用後の環境において、64 ビットプロセスの  Virtual Bytes が大きく異なるようになりました。 原因 Windows 10 April 2018 Update (1803) 適用後の新しいメモリマネージャーにおいて、メタデータ用に予約される仮想メモリのサイズが変更されました。具体的には、64 ビットプロセスにおいて 4 GB 、 32 ビットプロセスにおいては 36 KB が予め確保されます。…


Windows 10 でトースト通知が表示されないことがある

こんにちは、Platform SDK (Windows SDK) サポートチームです。 今回は、Windows 10 においてトースト通知が表示されない現象についてご案内します。   現象 Windows 10 上で動作するアプリケーションから API 等を用いてトースト通知しても、稀に期待したタイミングで表示されない場合があります。   背景 Windows 8 以降、トースト通知と呼ばれる機能が提供されました。 OS やアプリケーションが発する通知を画面右端に表示し、ユーザーに通知やアクションを促すことができます。 Windows 10 では、トースト通知に関する仕様変更があり、バルーン通知をトースト通知に変換する機能が既定となっています。   原因 トースト通知が期待する表示にならない原因として、ユーザー プロファイルの破損が考えられます。 ユーザー プロファイルは、OS よってユーザー アカウントごとに作成される領域で、ユーザー アカウントに紐付けられたファイルやシステム設定を管理します。 たとえば、トースト通知等、Windows の機能やアプリケーションによっては、ユーザー プロファイル配下のファイルやレジストリで各種情報を管理している場合があります。 このため、何らかの理由によりユーザー プロファイル配下の各種情報の整合性に問題が生じた場合、当該機能が正常に機能しなくなります。 残念ながら、ユーザー プロファイル内に不整合が生じた原因をあとから調査することは困難です。   対処方法 ユーザー プロファイルの破損が原因で、トースト通知を表示できない現象が発生した場合、OS の設定やアプリケーション側の実装等で対処することはできません。 この問題が発生した場合には、以下の手順にて、新しいユーザー プロファイルを作成して復旧することをご検討ください。 1. 整合性に問題が生じているユーザー プロファイルを削除します。 現象が発生しているユーザー アカウント以外のアカウントで、再現端末へログオンします。 コントロール パネルの…


ICopyHook::CopyCallback ハンドラ関数へ通知される pszDestFile が空になる

こんにちは、Platform SDK (Windows SDK) サポートチームです。 今回は、ICopyHook::CopyCallback ハンドラ関数で確認されている不具合についてご案内します。 現象 Windows 10 version 1803 (RS4) において、フォルダーのコピー操作時に呼び出される ICopyHook::CopyCallback ハンドラー関数に対して、コピー先フォルダーを示す pszDestFile が正しく通知されず、常に空になります。 以前のバージョンの Windows では、pszDestFile にコピー先フォルダーの情報がセットされていました。 開発したアプリケーションにおいて、このハンドラーを使用してコピー先の監視を行っていたり、コピー先の場所によってフォルダーのコピーを抑止していた場合には、期待される結果が得られなくなります。 この現象は、コピー操作に限らず、移動操作の場合にも発生いたします。 原因 この現象は、Windows 10 version 1803 (RS4) におけるシェル コンポーネントの不具合によって発生します。 回避策 この問題の回避策はありません。 状況 この問題は次期バージョンの Windows 10 RS5 にて修正される予定です。進展があり次第、本ブログを更新予定です。 参考情報 ICopyHook::CopyCallback https://msdn.microsoft.com/ja-jp/library/windows/desktop/bb776048.aspx Technorati Tags: SDK


LoadImage 関数が負の高さをもつビットマップの読み込みに失敗する

こんにちは、Platform SDK (Windows SDK) サポートチームです。 今回は、Win32 API である LoadImage 関数の不具合についてご案内します。 現象 Windows 10 において、アプリケーションから負の高さをもつビットマップ ファイルを指定して LoadImage 関数を実行すると、ビットマップがロードできずに失敗し、NULL が返ります。Windows 7 では成功し、ビットマップがロードできていました。 原因 この現象は、LoadImage 関数の不具合によって発生します。関数内において、ビットマップの高さとして負数があり得ることを考慮していないことが原因です。 回避策 現在、この問題を修正する予定がありません。 GDI+ など、ほかの API を利用することを検討してください。 参考情報 LoadImageW function https://docs.microsoft.com/ja-jp/windows/desktop/api/winuser/nf-winuser-loadimagew Using Images, Bitmaps, and Metafiles https://msdn.microsoft.com/ja-jp/library/windows/desktop/ms533815.aspx Bitmap class https://msdn.microsoft.com/ja-jp/library/windows/desktop/ms534420.aspx,


WPF アプリケーションにおいて文字入力可能なコントロールを無効化した場合の挙動について

こんにちは、Platform SDK (Windows SDK) サポートチームです。 今回は、WPF アプリケーションにおいて、文字入力可能なコントロールの IsEnabled プロパティを False に設定した場合の挙動についてご案内します。   現象 WPFのコントロールは、IsEnabled プロパティを False に設定してすることによりそのコントロールを無効化することが可能です。 この場合、マウスやタブ キー等で選択やフォーカスを設定することができなくなり、TextBoxBase クラスから派生した TextBox クラスや ComboBox クラス等の文字入力可能なコントロールでは文字を入力できない状態になります。 しかしながら、テキストを設定してあるコントロールに対して右クリック等によりコンテキスト メニューを表示するとメニューアイテムとして変換候補が含まれますが、この表示された変換候補から選択すると、コントロール内の文字列が選択した文字列に変更されます。 具体的には、以下のスクリーンショットのとおり、TextBox に表示された「TextBox」という文字列が、コンテキスト メニューにある「TextBox」を選択するとその文字列に変更されています。 ↓   原因 WPF では、コントロールの IsEnabled プロパティの状態によらず候補が表示されます。   回避策 コンテキスト メニューの表示は WPF 内で実装しており、IsReadOnly プロパティが True の場合はコンテキスト メニューを表示しません。 このため、IsEnabled プロパティを False に設定するのに加え、IsReadOnly プロパティを True に設定することにより、意図していないコントロール内の文字列編集を防ぐことが可能です。   参考情報…


System.Security.Cryptography.Xml.SignedXml.LoadXml メソッドの更新について

こんにちは、Platform SDK (Windows SDK) サポートチームです。2018 年 5 月 8 日に公開された CVE-2018-0765 のセキュリティ更新に伴い、 System.Security.Cryptography.Xml.SignedXml.LoadXml  メソッドに行われた変更についてご案内します。 現象 2018 年 5 月 8 日に公開された CVE-2018-0765 のセキュリティの更新をインストールいただいた環境にて System.Security.Cryptography.Xml.SignedXml.LoadXml メソッドを利用して署名用の XML ファイルをロードした場合、Reference 要素 および Transform 要素が一定数以上定義されていると、「CryptographicException: 間違った形式の SignedInfo/Reference 要素です。」 例外が発生します。具体的な上限は以下の通りになります。 ・Reference 要素内の Transform 要素が 10 以上。 ・SignedInfo 要素内の Reference 要素が 100 以上。 原因 この上限はセキュリティ強化のために行われており、例外の発生は想定された動作になります。これまで Reference 要素 および Transform 要素は無制限に定義可能でしたが、セキュリティ攻撃に利用される危険性があると判断し、攻撃を防ぐために上限を設定しました。この情報は下記資料に公開しています。 CVE-2018-0765…


FlowDirection プロパティを RightToLeft に設定した場合の問題について

こんにちは、Platform SDK (Windows SDK) サポートチームです。 今回は、XAML を使用するアプリケーションにおいて、FlowDirection プロパティを RightToLeft に設定した場合の問題についてご案内します。   現象 Store アプリ、UWP アプリ、WPF アプリ で FlowDirection プロパティを RightToLeft に設定して文字列を表示すると、Windows Forms アプリ と異なる表示結果になる場合があります。 例えば、以下のような XAML を Store アプリ、UWP アプリ、WPF アプリ で実装することを想定します。 <TextBlock Text=”String(100)” FlowDirection=”RightToLeft” /> <TextBlock Text=”String(100)…” FlowDirection=”RightToLeft”/> <TextBlock Text=”Windows 10Professional” FlowDirection=”RightToLeft” Language=”en-US”/> <TextBlock Text=”Windows 10Professional” FlowDirection=”RightToLeft” Language=”ar-SA”/> 以下は、実行時のスクリーンショットですが、上から、Store アプリ、UWP アプリ、WPF アプリ、Windows Forms アプリのウインドウになります。…


Windows 10 version 1803 (April 2018 Update) で、日本語版 Microsoft IME を無効化すると、タッチ キーボードが起動しない

こんにちは、Platform SDK (Windows SDK) サポートチームです。 今回は、Windows 10 version 1803 (April 2018 Update) において日本語版 Microsoft IME を無効化した場合、タッチ キーボード (Tabtip.exe) が起動しない現象についてご案内します。   現象 IME のコンテキスト (HIMC 値) の状態には、ON/OFF/Disable の三つの状態があります。 ON : 日本語入力が可能なコンテキスト OFF : 日本語入力が不可能なコンテキスト (英数のみ入力可能なコンテキスト) Disable : IME を介した日本語、英数いずれの入力も不可能なコンテキスト (直接入力は可) これまでの Windows 10 では、TextBox 等の編集可能なコントロールをタッチした場合、IME のコンテキストが上記三つの状態のいずれであっても、タッチ キーボードが起動しました。 しかしながら、Windows 10 version 1803 (April 2018 Update) では、編集可能なコントロールの IME…