向隐藏 window 发送消息无效

sendMessage to a hidden window did not work

我想在 window 的按钮上发送一条点击消息,它的标题是 "Form1",按钮的标题是 "button1" 这是我的代码:

我用 SPY++ 检查了这个句柄似乎是正确的..

    #include "stdafx.h"
    #include <windows.h>
    #include <conio.h>

    int main()
    {
     while(1)
     {
       HWND HWin, btn;
       HWin = FindWindowExA(NULL,NULL,NULL,"Form1");
       btn = FindWindowExA(HWin,0,NULL,"button1");
       SendMessage(btn,BM_CLICK,0,0);
       _getch();
      }
    }

此代码运行良好,一切都很好...但是当 "Form1" 设置为隐藏时,sendMessage 似乎不起作用!为什么???

注意 FindWindowExA(...) 仍然 return 相同的句柄,而 "Form1" 被隐藏,并且与之前的句柄相同(当显示时)

设置 "Form1" 的 hidden/show 是通过以下行完成的:

显示:

    ShowWindow(HWin,SW_SHOW);

隐藏:

    ShowWindow(HWin,SW_HIDE);

我 运行 使用 VS 2010

我想知道 sendMessage 是否不能在隐藏的情况下工作 window 还有其他方法吗??

谢谢大家

我假设您正在明智地检查以确保在执行消息传递代码之前隐藏 window 时您的 FindWindow 调用不会返回 NULL。

假设您正在获取从 FindWindow 返回的有效 HWND,而不是发送到按钮本身的 BM_CLICK 消息。尝试向父 window.

发送 WM_COMMAND 消息
if (HWin && btn)
{
    LONG ctrlId = GetWindowLong(btn, GWL_ID);
    SendMessage(HWin, WM_COMMAND, MAKEWORD((WORD)ctrlId, BN_CLICKED), (LPARAM)btn);
}

如果应用程序本身处于隐藏时不期望点击通知的状态,则您可能会出现一些非常奇怪的行为。

我认为这适用于 win32 应用程序或对话框。不确定 .NET 表单应用程序。