发送消息到隐藏窗口不起作用



我想在窗口的按钮上发送一条点击消息,它的标题是"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时,似乎不起作用!为什么?

注意,当"Form1"被隐藏时,FindWindowExA(...)仍然返回相同的句柄,并且与前一个(当显示时(相等

设置"Form1"的隐藏/显示由以下行完成:

显示:

ShowWindow(HWin,SW_SHOW);

至隐藏:

ShowWindow(HWin,SW_HIDE);

我正在运行VS 2010

我想知道如果sendMessage在隐藏窗口上不起作用,还有其他方法吗??

感谢所有

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

假设您得到的是从FindWindow返回的有效HWND,而不是发送到按钮本身的BM_CLICK消息。尝试向父窗口发送WM_COMMAND消息。

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

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

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

最新更新