5

プログラムで Aero を使用する方法を確認するために、あらゆる場所を調べました。ファイル エクスプローラーや主流のブラウザーがタイトル バーで行うように、自分のウィンドウの背後にあるウィンドウをプレビューする C 関数を見つけることができません。

一部のプログラムは、Windows 7 のタイトル バーに似た画像 (Aero なし) を追加するだけで偽装していますが、私はそれを一種の不正行為だと考えています。以下のリンクでこのコードを見つけました。

[DllImport ("dwmapi.dll" Entry Point = "# 113", SetLastError = true)] 

internal static external DwmpActivateLivePreview uint (uint a, IntPtr b, uint c, uint d); 

[DllImport ("dwmapi.dll" Entry Point = "# 105", SetLastError = true)]

internal static bool external DwmpStartOrStopFlip3D (); 

// Activate Aero peek into the desired Handle 
DwmpActivateLivePreview (1, Handle, 0, 1);

// Disable Aero peek
DwmpActivateLivePreview (0, Handle, 0, 1);

// start or stop the Aero Flip 3D
DwmpStartOrStopFlip3D ();

しかし、それが何を意味するのかわかりません。Aero Peek の実装は、関数で自動的に機能しPreviewWindows(or whatever)ますか?

道に迷いました。

このリンクはオランダ語です。Google 翻訳で実行してください。

Aero ピークやフリップを有効にするかどうかを切り替えたり、マウスをタスクバー アイコンに置いたときにアプリケーションのアイコンを変更したりしようとはしていません。代わりに、自分の背後にあるアプリケーションの現在の画面状態を取得し、それをアプリケーションに表示するための画像として返す関数を探しています。おまけとして、(おそらく)返された画像はぼやけていますか、それともその効果が個別に適用されていますか?名前はエアログラスだと思います。

4

2 に答える 2

1

私が理解しているように、アプリケーションの背後にあるウィンドウの状態 (表示に関して) を取得したいと考えています。以下を実行することでそれを達成できます。

HWND hwnd_behind = GetNextWindow(your_window_handle, GW_HWNDNEXT);

HDC hdc = GetWindowDC(hwnd_behind);

RECT rect;
GetWindowRect(hwnd_behind,rect);

HDC bitmap = MakeABitMapDC();

StretchBlt(bitmap,0,0,dW,dH,hdc,0,0,rect.width,rect.height,SRCCOPY);

Windows がアプリケーションにプレビュー ビットマップを要求したときにビットマップを返すハンドラーにこのコードをプラグインできます。

簡潔にするために、「MakeABitMapDC」などの詳細を残しました。

于 2012-10-31T11:00:46.303 に答える
0

私は迷子になっているので、あなたが理解していないことを確認するのはちょっと大きな領域ですが、とにかくやってみます。

パラメータが何をするのかわからないという意味の場合:

[DllImport ("dwmapi.dll" Entry Point = "# 113", SetLastError = true)] 
internal static external DwmpActivateLivePreview uint (uint a, IntPtr b, uint c, uint d); 

基本的には次のようになります。

  • a:AeroPeekをアクティブにするためのパラメータです。
  • b:AeroPeekが焦点を合わせているハンドルでもありますか。
  • c:トリッキーなものです。ウィンドウのハンドルをそのパラメーターに渡し、TopMostプロパティが設定されている場合、AeroPeekの上部に表示されます。
  • d:dが何をするのかわかりませんが、DwmpActivateLivePreviewを使用した回数は、常に1に設定しています。

したがって、署名は次のようになります。

internal static extern uint DwmpActivateLivePreview(uint active, IntPtr handle, IntPtr onTopHandle, uint d);

DwmpStartOrStopFlip3Dメソッドは、「Windows+タブ」効果をアクティブにします。

[DllImport("dwmapi.dll", EntryPoint = "#105", SetLastError = true)]
internal static extern bool DwmpStartOrStopFlip3D();

ただし、それらを使用するためのものではないため、文書化されていない理由があることを忘れないでください。

たまたまアプリケーション内でAeroPeek効果を使用したい場合は、DWMにあるDwmSetIconicLivePreviewBitmap関数を確認できます。

詳細はこちら:MSDN:DwmSetIconicLivePreviewBitmap関数

于 2012-10-05T08:01:33.533 に答える