5

私のアプリケーションは、サムネイルとジャンプリストを使用して、Windows7のタスクバーアイテムをほぼ完全に処理することを目的としています。簡単に作成してForm非表示にできることはわかっていますが、これはやり過ぎのようです。NativeWindowそれに、今まで使ったことがないので、できるだけいじってみたいです。

基本的に、私には、ホットキーと、できれば他のすべてを処理するRootWindow派生クラスがあります。NativeWindow表示されているウィンドウはまったく必要ありませんが、ウィンドウメッセージを処理し、サムネイルやジャンプリストを添付できるタスクバーアイテムを提供するためのものです。

CreateParams渡す必要のある特別なオプションはありますCreateHandleか?それとも私は運が悪いのですか?

編集:まあ、それは私が望んでいたものではありませんが、私が思っていたよりも簡単でした。NativeWindowのハンドルをAPIに渡すShowWindowと、タスクバーアイテムが表示されました。ただし、画面の左上隅にもウィンドウが表示されます。タスクバーアイテムを表示したまま、そのウィンドウを削除する方法はありますか?

public class RootWindow : NativeWindow {
    public const int SW_SHOWNOACTIVATE = 4;

    [DllImport("User32.dll")]
    private static extern int ShowWindow(IntPtr hWnd, short cmdShow);

    public RootWindow() {
            CreateHandle(new CreateParams());
            ShowWindow(this.Handle, SW_SHOWNOACTIVATE);
    }
}
4

1 に答える 1

4

秘訣は、ウィンドウのスタイルをWS_POPUPに設定することでした。

const int WS_POPUP = unchecked((int)0x80000000);
const int SW_SHOWNOACTIVATE = 4;

CreateHandle(new CreateParams() {
    Style = WS_POPUP
});

ShowWindow(Handle, SW_SHOWNOACTIVATE);

また、バックグラウンド作業のためだけにあるため、ウィンドウのAeroPeekを無効にしました。

const int DWMNCRP_ENABLED = 2;
const int DWMWA_DISALLOW_PEEK = 11;

int policy = DWMNCRP_ENABLED;
DwmSetWindowAttribute(Handle, DWMWA_DISALLOW_PEEK, ref policy, sizeof(int));
于 2010-04-15T20:12:40.200 に答える