我的应用程序旨在使用缩略图和跳转列表,几乎完全通过Windows 7任务栏项工作。我知道我可以轻松地创建一个Form
并将其隐藏起来,但这似乎有点过头了。另外,我想尽可能多地使用NativeWindow
,因为我以前从未使用过它。
本质上,我有一个名为RootWindow
的类,该类从NativeWindow
派生而来,它将处理热键,并希望处理其他所有内容。我根本不需要可见的窗口,只需要一些东西即可处理窗口消息并提供任务栏项,我可以将缩略图和跳转列表附加到该项。
我需要传递给CreateParams
某种特殊的CreateHandle
选项吗?还是我不走运?
编辑:好吧,尽管这并不是我想要的,但它比我想象的要容易。一旦将NativeWindow
的句柄传递给ShowWindow
API,任务栏项就会出现。但是,它还在屏幕的左上角显示一个窗口。在仍然显示任务栏项的同时,有什么方法可以摆脱该窗口?
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);
}
}
最佳答案
技巧是将窗口的样式设置为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));