gpt4 book ai didi

c# - 使用 NativeWindow 显示任务栏项目

转载 作者:太空狗 更新时间:2023-10-29 23:27:16 26 4
gpt4 key购买 nike

我的应用程序旨在几乎完全通过使用缩略图和跳转列表的 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));

关于c# - 使用 NativeWindow 显示任务栏项目,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2619625/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com