我想在窗口的按钮上发送一条点击消息,它的标题是"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表单应用程序。