ウィンドウ移動中にアプリケーションからウィンドウ サイズを変更しても、元のサイズに戻ってしまう

こんにちは、Platform SDK (Windows SDK) サポートチームです。 ユーザーによるウィンドウ移動操作とアプリケーションによるウィンドウ サイズ変更が交錯した際の OS の動作についてご案内します。   現象 ユーザーがウィンドウを移動している最中にアプリケーションがウィンドウのサイズを設定すると、アプリケーションが設定したサイズにならず、元の大きさに戻ることがあります。 具体的には、以下のような流れになります。 ユーザーがウィンドウのキャプション上で左マウス ボタンを押し、ウィンドウの移動を開始します。左マウス ボタンは押したままにします。 ファイルの読み込み完了など、なんらかのイベント通知を受けて、アプリケーションがウィンドウのサイズを設定します。 ユーザーがウィンドウの移動を続けます。 このとき、ユーザーがウィンドウを移動し始めたときのウィンドウ サイズに戻ってしまい、アプリケーションが設定したサイズになりません。この状態が左マウス ボタンを離すまで継続し、離したときもアプリケーションが設定したサイズにならず、ユーザーがウィンドウを移動し始めたときのウィンドウサイズに戻ります。   原因 ユーザーがウィンドウを移動している最中にアプリケーションがウィンドウのサイズを変更できない動作は、Windows の既定の動作です。   回避方法 アプリケーションは、WM_ENTERSIZEMOVE メッセージ、および WM_EXITSIZEMOVE メッセージを監視することで、ユーザーによるウィンドウ移動を検知することができます。これらのメッセージを監視してユーザーがウィンドウを移動している間のサイズ変更を保留しておき、操作が終わってからウィンドウ サイズを変更するようにしてください。   補足 ウィンドウを最大化中にアプリケーションがウィンドウのサイズを設定した場合、その後のユーザー操作に依存して結果が変化します。ユーザーが最大化から戻す操作をするとアプリケーションが設定したサイズに戻りますが、最大化から戻さずにそのままウィンドウを移動すると、ウィンドウサイズはアプリケーションが設定したサイズではなく、ウィンドウを最大化する前のサイズに戻ります。最大化中にウィンドウ サイズを変更する場合には、最大化から通常表示に戻してからサイズを設定するようにしてください。 なお、この動作は、ユーザーがウィンドウの移動を開始したと判断したタイミングから発生するようになるため、キャプション上で左マウス ボタンを押したままマウスを動かさなくても移動と判断し、現象が発生することがあります。 また、Windows Server 2008 では、以下の設定により動作が変化しますので、ご注意ください。 コントロール パネルの [システム] にある [システムの詳細設定] をクリックします。 [システムのプロパティ] ダイアログの [詳細設定] を選び、[パフォーマンス] 内の [設定] をクリックします。 [パフォーマンス…


AddPrinterConnection 関数により、ネットワーク プリンターに接続した場合、プリンターアイコンのコンテキスト メニューが複数表示される場合があります。

こんにちは、Platform SDK (Windows SDK) サポートチームです。 今回は、Windows 8 以降の OS において、複数のプログラムから同時に AddPrinterConnection 関数を呼び出した場合に発生する可能性がある問題についてご案内します。   現象 サーバー上のプリンターを使用するため、プログラムから AddPrinterConnection 関数によりプリンターの接続を行う処理を想定します。 サーバー上のプリンターを接続した場合、プリンターアイコンには、通常、以下のようなコンテキスト メニューが表示されます。 しかし、プリンターの接続を行うプログラムを、複数同時に実行した場合、まれに、以下のような表示となる問題が確認されています。   状況 この現象については現在調査中です。 詳細について分かりしだい更新する予定です。   対処方法 本現象が発生した場合の確実な復旧方法は確認できていませんが、以下のいずれかの操作を行った後、スプーラーサービス、または、システムの再起動を行うことで、多くの場合、復旧します。 ・現象が発生しているプリンターアイコンで [デバイスの削除] を選んでプリンターを削除する ・DeletePrinterConnection 関数を複数回呼び出す 上記対処方法でも復旧できない場合は、システムの再起動後に再度対象方法を実施してください。


Windows 10 でタスクバー ボタンのアイコン画像が黒塗りで描画される

こんにちは、Platform SDK (Windows SDK) サポートチームです。 今回は、Windows 10 のタスクバー ボタンのアイコン画像が、■のように黒塗りで描画される現象についてご案内します。   現象 全体が透明なイメージをアイコン画像として利用するアプリケーションを Windows 10 で実行すると、タスクバー ボタンのアイコン画像が、■のように黒塗りで描画される現象が発生します。 なお、この現象は Windows 7 ~ Windows 8.1 では発生しません。 ※ これより以下のイメージでは、例として MFC のデフォルト アイコンを使用しています。 ・不透明色を含むイメージをアイコン画像として利用した場合   ・全体が透明で、不透明色を含まないイメージをアイコン画像として利用した場合   原因 Windows 10 で、タスクバー ボタンの描画を行っている SHELL (Explorer) モジュールの内部処理が変更されたために、発生していると考えられます。 マイクロソフトでは、この現象について現在も調査中です。 詳細については、わかり次第この資料に掲載する予定です。   回避策 アイコン画像として使用するイメージの一部に不透明色を使用することにより、本現象を回避することが可能です。 以下は、右下に 1 ピクセル分だけ不透明色で塗りつぶしを行ったイメージを、アイコン画像として利用した場合の例です。 黄色い円で囲われている部分のように一部不透明色を使用することによって、全体が透明なイメージのアイコン画像に近い外観にすることができます。   ※ 拡大画像


Windows 10 でアイコン オーバーレイが正しく表示されない場合がある

こんにちは、Platform SDK (Windows SDK) サポートチームです。 今回は、Windows 10 において、アイコン オーバーレイ機能が正しく動作しない可能性があることについてご案内いたします。   現象  アイコン オーバーレイは、ファイルやフォルダーのアイコンに、小さいアイコンを組み合わせる機能です。 例えば、OneDrive では、アイコン オーバーレイによって、以下のように、フォルダーのアイコンにチェックマークを追加しています。 この動作は、アプリケーションがアイコン オーバーレイ ハンドラ―を登録することで実現されています。 通常、ファイルやフォルダーの変更が行われると、アイコン オーバーレイ ハンドラ―の IShellIconOverlayIdentifier::IsMemberOf メソッドが呼び出され、そのファイルの状態に合わせた、小さいアイコンを追加します。   しかし、Windows 10 のデスクトップ上に保存された Office 製品 (Word や Excel など) のファイルに関しては、ファイルが更新されても IShellIconOverlayIdentifier::IsMemberOf メソッドが呼び出されない現象が確認されています。 これにより、アイコン オーバーレイ ハンドラ―がファイルの更新を検知できず、小さいアイコンが追加されない状態になります。   なお、「デスクトップ以外の任意のフォルダーに保存された Office 製品のファイル」や「デスクトップ上に保存された Office 製品以外のファイルやフォルダー」については、同様の現象は発生しません。   状況  この現象については現在調査中です。 詳細について分かりしだい更新する予定です。   対処方法  アイコン オーバーレイが正しく表示されない場合は、以下のいずれかの方法で更新を行います。 デスクトップ上でマウスを右クリックし、「最新の情報に更新」メニューにより更新を行います。…


Windows 10 Creators Update において、DateTimePicker コントロールの表示や入力が正しく機能しない場合がある

こんにちは、Platform SDK (Windows SDK) サポートチームです。 今回は、Windows 10 Creators Update において、DateTimePicker コントロールで確認されている問題についてご案内します。   現象 Windows 10 Creators Update において、DateTimePicker コントロールの年月日の入力および表示が正しく機能しない現象が確認されています。 具体的には以下 (A)、(B)、(C) いずれかの条件で DateTimePicker コントロールを使用した際に発生する場合があります。 (A)Win32 の場合、date and time picker controls (B)MFC の場合、CDateTimeCtrl (C)Windows フォーム アプリケーションの場合、DateTimePicker   それぞれのクラスについては以下 MSDN ドキュメントをご参照ください。 About Date and Time Picker Controls < https://msdn.microsoft.com/en-us/library/windows/desktop/bb761726.aspx > CDateTimeCtrl < https://msdn.microsoft.com/ja-jp/library/57f46yyw.aspx > DateTimePicker < https://msdn.microsoft.com/ja-jp/library/system.windows.forms.datetimepicker.aspx…


AddPrinterConnection 関数と DeletePrinterConnection 関数の呼び出しにより、印刷スプーラサービスでメモリリークが発生する可能性がある

こんにちは、Platform SDK (Windows SDK) サポートチームです。 今回は、Windows 8 以降の OS において、印刷スプーラサービス (Spoolsv.exe) でメモリリークが発生する問題についてご案内いたします。   現象 アプリケーションから AddPrinterConnection 関数と DeletePrinterConnection 関数により、プリンターの接続・切断を行った場合、印刷スプーラサービス (Spoolsv.exe) でメモリが20KB、ハンドルが 1 つ増加する可能性があることが確認されています。 本現象は、AddPrinterConnection 関数と DeletePrinterConnection 関数を連続して呼び出すようなアプリケーションを実行した場合に発生します。 なお、AddPrinterConnection 関数と DeletePrinterConnection 関数の呼び出し間隔が数分間空いている場合には、メモリとハンドルの増加がみられない場合もあります。 例えば、ログオン時に AddPrinterConnection 関数を呼び出し、ログオフ時に DeletePrinterConnection 関数を呼び出すようなシナリオの場合、ログオフまでに充分な時間があれば問題は発生しません。   状況 この現象については現在調査中です。 詳細について分かりしだい更新する予定です。   対処方法 一般的なシナリオとして、本問題により、印刷スプーラサービスやシステムが動作できなくなるほどに、メモリが使用されることはありません。 しかし、メモリリークが顕著に見られる場合には、印刷スプーラサービス、または、システムを再起動していただく必要があります。


タッチ ディスプレイのケーブルを抜き差しすると、WPF アプリケーション上でタッチおよびスタイラス操作ができなくなる

こんにちは、Platform SDK (Windows SDK) サポートチームです。 今回は、タッチディスプレイを接続したコンピューターにおいて、タッチやスタイラスで WPF アプリケーションを操作する場合の問題についてご案内します。   現象 コンピューターに接続しているタッチ ディスプレイのケーブルを抜き差しすると、稀に WPF アプリケーション上でタッチおよびスタイラス操作ができなくなる問題が確認されています。 この問題が発生すると、WPF アプリケーションを再起動するまで、WPF アプリケーション上のタッチおよびスタイラス操作が行えなくなります。   詳細 コンピューターに接続しているタッチ ディスプレイのケーブルを抜き差しすると、Windows はデバイスの抜去、接続状態を検出し、全てのトップレベル ウィンドウに対して、新しいデバイスとしてタッチ ディスプレイが有効になったことを通知します。 この通知を受け取った WPF アプリケーションは、アプリケーションで管理・制御しているタッチおよびスタイラス用の内部情報を初期化して、新しいデバイス上でのタッチおよびスタイラス操作に備えます。 ところが、Windows ならびに .Net Framework (WPF) の内部処理において、タッチおよびスタイラス関連の処理が、適切に制御されないという問題がありました。 こうした問題により、新しいデバイスとしてタッチ ディスプレイが接続されたにも関わらず、WPF アプリケーションでは既存の内部情報を適切に初期化することができず、ユーザーがタッチおよびスタイラス操作を行っても、WPF アプリケーションがそれを検出できないという問題が発生します。   原因 本現象は、以下のバージョンの .NET Framework (WPF) および Windows の問題です。 弊社製品の問題によりご不便をおかけしますことを、深くお詫びいたします。 Windows 7 SP1 Windows 8 Windows 8.1 Windows…


.NET Framework のアプリケーションが参照するプロキシ設定を構成する方法

こんにちは、Platform SDK (Windows SDK) サポートチームです。 今回は、HttpWebRequest クラスや WebClient クラスを利用しているアプリケーションで HTTP 通信に失敗する場合のトラブルシュートとして、.NET Framework のアプリケーションが参照するプロキシ設定を構成する方法をご案内します。   .NET Framework のアプリケーションから、HTTP 通信を行うために HttpWebRequest クラスや WebClient クラスを利用するかと思いますが、これらのクラスは既定では Internet Explorer のプロキシ設定を参照しています。 このため、HttpWebRequest クラスや WebClient クラスを利用しているアプリケーションで HTTP 通信に失敗する場合は、Internet Explorer のプロキシ設定もチェックしてみてください。   例えば、HTTP の通信先アドレスを Internet Explorer のアドレスバーに入力してもアクセスに失敗する場合は、Internet Explorer のプロキシ設定が誤っている可能性があります。 また、アプリケーション実行環境のプロキシサーバー側の構成によっては、ローカルネットワーク内のホストへの接続を拒否する設定となっている場合があります。 このような環境では、プロキシサーバーを経由せずに直接通信を行わせるために、Internet Explorer の設定で [ローカル アドレスにはプロキシサーバーを使用しない] をオンにする必要があります。   また、Internet Explorer の設定に依存せず、HttpWebRequest クラスや WebClient クラスが使用するプロキシ設定を直接指定したい場合は、以下の方法をご参照ください。…


独自デスクトップ上で、タッチキーボードを表示することができません

こんにちは、Platform SDK (Windows SDK) サポートチームです。 今回は、Windows 8.1 のタッチキーボード (Tabtip.exe) で確認されている現象についてご案内します。   現象 独自デスクトップ上でタッチキーボードを表示しようとすると、タッチキーボードが既定のデスクトップ (Default デスクトップ) 上で表示される現象が確認されています。   詳細 プログラムから Win32 API の CreateDesktop() を呼び出すと、独自のデスクトップを新しく作成することができます。 この独自デスクトップ上でも、ユーザーは Default デスクトップと同じように、マウスやキーボード、タッチ操作を行うことが可能です。 ところが、Windows 8.1 において独自デスクトップ上でタッチキーボードを表示しようとすると、(独自デスクトップではなく) Default デスクトップ上にタッチキーボードが表示される現象が発生します。 このため、独自デスクトップ上で操作中のユーザーは、タッチキーボードを利用することができません。   原因 マイクロソフトでは、この問題について現在調査中です。 詳細については、わかりしだいこの資料に掲載する予定です。   回避策 独自デスクトップ上では、タッチキーボードの代わりに、スクリーンキーボード (Osk.exe) のご利用をご検討ください。 なお、ShellExecute() を呼び出すと、プログラムから現在のデスクトップ上にスクリーンキーボードを表示することが可能です。 このようなプログラムを独自デスクトップ上で実行することで、プログラムを経由してスクリーンキーボードを独自デスクトップ上に表示させることができます。


Windows 8 以降のタッチキーボードの表示動作について

こんにちは、Platform SDK (Windows SDK) サポートチームです。 今回は、Windows 8 以降のタッチキーボードの表示動作についてご案内します。 Windows 8 以降の OS では、タッチ キーボードの表示に関する動作が変更されています。   Windows 7: テキスト ボックスにフォーカスを移動すると、自動的に Tablet PC 入力パネルが表示される Windows 8 以降: デスクトップ アプリケーションの場合、テキスト ボックスにフォーカスを移動するだけではなく、明示的にタスク バーにあるタッチ キーボードのアイコンをタッチ、もしくはスタイラスでクリックすると、タッチ キーボードが表示される これにより、アプリケーションによっては自動的にタッチ キーボードや手書きパネルが表示されない事象が発生することを確認しています。   対処策としては、アプリケーションにてサポートされた方法はなく、手動でタスクバーのタッチキーボードアイコンをクリックし、タッチキーボードや手書きパネルを表示して利用する必要があります。当該アイコンは、デスクトップ上のタスクバーを右クリックし、[タッチ キーボード ボタンを表示] のチェックをオン (画面1) にすることで、アイコン (画面2) が表示されるようになります。こちらからユーザー操作を促すようにしてください。 画面 1 画面 2 なお Windows 10 Anniversary Update (1607) で “タブレットモードでなく、キーボードが接続されていないときに、手書きパネルを表示する” 設定が追加されましたのでシナリオに応じて適宜ご利用ください。当該設定は、[設定]…