2

数時間のグーグルの後、この問題に関するコメントを見つけることができませんでした。背景が透明なWindowStyle=Noneウィンドウがあり、透明性を許可し、タスクバーに表示されません。すべて正常です。自分でテストできるように、XAML を次に示します。

<Window x:Class="AltTabTest.Window1"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
x:Name="TestWindow" Title="TestWindow"
WindowStyle="None" AllowsTransparency="True" ResizeMode="NoResize" 
Background="Transparent" ShowInTaskbar="False"
Width="816" Height="820">

<Grid>
    <Border BorderThickness="0" Background="LightBlue" CornerRadius="15" />
</Grid>

このウィンドウをコンパイルして実行したら、次の手順に従ってください。

  1. [デスクトップを表示] をクリックして、すべてのアプリを非表示にします
  2. Alt+Tab で WPF テスト アプリに戻る
  3. 水色の境界領域の外側 (デスクトップ ワークスペース) をクリックします。
  4. WPF Test App が魔法のように消えるのを観察する
  5. 必要に応じて、他の実行中のアプリに Alt+Tab キーを押して、WPF テスト アプリが魔法のように再表示されることを確認します

だから私の質問は、ここで一体何が起こっているのですか?! これは予想される動作ですか?もしそうなら、それを回避する方法はありますか?

Alt + Tabが解決された後、 WPFアプリが本当にフォーカスされていないように感じます。これは Windows 7 でテストされていることに注意してください。Vista または XP でこれをテストすることはできませんでした。アプリに本当にフォーカスを当てる方法が欲しいのですが、それが不可能な場合は、Alt + Tab アクションをトラップして無視する方法があるかどうか疑問に思っています。これが修正しようとしているアプリはロックダウン モードのアプリであるため、ユーザーはデスクトップ上で実行されているアプリから完全に離れることはできません。アドバイス、例、洞察、または正しい方向へのポイントをいただければ幸いです。=)

4

1 に答える 1

1

Spy++ によると、問題は、WindowStyle="None" で設定されたウィンドウが、alt-tab で移動したときに WM_ACTIVATE メッセージを受信しないことです。allowstransparency="true" を設定すると、ウィンドウのヒット テストが無効になるため、青い四角形を超えてクリックすると、デスクトップのヒット テストだけが true を返します。

WM_ACTIVATE が起動されなかったため、MinimizeAllWindowsToDesktop はアクティブなウィンドウを認識せず、デスクトップをクリックしたという通知を受け取ると、ウィンドウがアクティブ化されておらず、デスクトップで何らかの作業を行っていた場合と同じようにデスクトップがレンダリングされます。 (この関数の予想される動作)。

ただし、Win7 でウィンドウが WM_ACTIVATE メッセージを受信しない理由はわかりません。


編集: 気にしないでください。これは、WPF と Windows 7 の単なるバグのようです。この動作は、ウィンドウの設定に関係なく持続します。

于 2009-12-19T01:26:10.760 に答える