1

デスクトップの端の1つにドッキングできるWPFアプリケーションを作成しています。これを行うには、画面の同じ端に5px幅の透明なウィンドウである「EdgeWindow」を配置します。マウスがその上に移動すると、アプリケーションのウィンドウがポップアップ表示されます。

問題は、「EdgeWindow」が「Topmost」に設定されている間、他のWindowsアプリケーションもウィンドウを「Topmost」に設定することです。これは、EdgeWindowが一部のウィンドウの下に表示される可能性があることを意味します。私が知る限り、EdgeWindowを上に保つ保証された方法はないようです。

私のアプリケーションはすでに'ApplicationDesktopToolbar( http://www.codeproject.com/KB/shell/csdoesshell3.aspxに似ています)なので、そのインフラストラクチャを使用してウィンドウをポップアップして削除するかどうかを判断する方法があるのではないかと期待していました。 'EdgeWindow'の完全なものですが、役立つものは何も見つかりませんでした。

4

2 に答える 2

1

私が使用することになった解決策は、マウスの位置の変化をリッスンし、ウィンドウが端に近づいたらポップアップすることでした。もちろん、カーソルがアプリケーションの外に出ると、通常のWPFマウスリスニングは機能しません。

オリジナル私はWH_MOUSE_LLを計画しましたが、Windows 7では、何らかの理由で接続されているフックの登録が解除されることがあるため、この機能はWindows7ではうまく機能しないようです。

最終的には、「RawInput」(http://www.codeproject.com/KB/system/rawinput.aspx)を使用することになりました。これは非常にうまく機能します。この例は、キーボード入力イベントを取得する方法のみを示していますが、代わりにマウス移動イベントをリッスンするように変更することはそれほど難しくありませんでした。

于 2011-01-29T00:09:13.367 に答える
0

ShAppBarクラスを使用して、同様のプロジェクトを実行しようとしました。ShAppBarクラスを使用している場合は、最上位のウィンドウを非表示にする必要はありません。また、提供したコードへのリンクには次のものが含まれているようです。

GetAutoHideBar            = 0x00000007,    
// Registers or unregisters an autohide appbar for an edge of 

// the screen. 

SetAutoHideBar            = 0x00000008,    
// Notifies the system when an appbar's position has changed. 

WindowPosChanged          = 0x00000009,    
// Sets the state of the appbar's autohide and always-on-top 

// attributes.

SetState                  = 0x0000000a        

これは機能しませんか?

于 2011-01-20T22:00:49.613 に答える