5

我的应用程序旨在使用缩略图和跳转列表几乎完全通过 Windows 7 任务栏项目工作。我知道我可以轻松地创建一个Form并简单地隐藏它,但这似乎有点矫枉过正。另外,我想NativeWindow尽可能多地玩弄,因为我以前从未使用过它。

本质上,我有一个名为的类RootWindow,它派生自NativeWindow它将处理热键并希望处理其他所有内容。我根本不需要可见的窗口,而只是处理窗口消息并提供可以附加缩略图和跳转列表的任务栏项目。

CreateParams我需要传递某种特殊选项CreateHandle吗?还是我运气不好?

编辑:嗯,这比我想象的要容易,虽然这不是我想要的。一旦我将NativeWindow' 句柄传递给ShowWindowAPI,任务栏项目就会出现。但是,它也会在屏幕的左上角显示一个窗口。有没有办法在显示任务栏项目的同时摆脱该窗口?

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);

我还为窗口禁用了 Aero Peek,因为它仅用于后台工作。

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 回答