gpt4 book ai didi

c# - PostMessage 到隐藏表单第一次不起作用

转载 作者:塔克拉玛干 更新时间:2023-11-03 00:00:12 24 4
gpt4 key购买 nike

我有一个出现在系统托盘中的 C# WinForms 应用程序。应用程序在加载时隐藏主窗体:

private void MainForm_Load(object sender, System.EventArgs e)
{
Hide();
}

对于相同的主窗体,我覆盖了 WndProc 以捕获自定义窗口消息(该消息已通过 RegisterWindowMessage Win32 API 调用注册到 Windows)。

protected override void WndProc(ref Message m)
{
if (m.Msg == WM_MYCUSTOM_MESSAGE)
{
// Handle custom message
}
}

我从外部 C++ 应用程序使用 PostMessage 广播相同的自定义窗口消息。

UINT msg = RegisterWindowMessage(L"WM_MYCUSTOM_MESSAGE");
PostMessage(HWND_BROADCAST, msg, NULL, NULL);

当我在 C# 应用程序首次启动后执行上述代码时,它没有进入 WndProc。主窗体显示后(通过双击系统托盘图标,本质上执行 Show()),捕获广播消息工作并在使用 隐藏窗体后继续工作隐藏()

谁能解释为什么它在 MainForm_Load 事件处理程序的第一个 Hide() 之后不起作用?我是不是隐藏表格太早了?

EDIT1:它似乎与加载时隐藏无关。即使没有初始隐藏,我的主窗体 WndProc 也只会在隐藏并重新显示后才开始接受广播帖子...

最佳答案

创建一个小型测试应用程序后,我发现 PostMessage()HWND_BROADCAST 如果Form.ShowInTaskbar 设置为 falseSendMessage() 设置为 HWND_BROADCAST

尽管有关向 HWND_BROADCAST 发送或发布消息的 MSDN 说明完全相同。

所以它与隐藏或显示表单无关,这似乎是 Windows API 的另一个未记录的功能。

关于c# - PostMessage 到隐藏表单第一次不起作用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10191707/

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