我想在标题为“ 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(...)
在“ Form1”被隐藏时仍返回相同的句柄,并且与先前的句柄相同(显示时)
通过以下几行设置“ Form1”的隐藏/显示:
显示:
ShowWindow(HWin,SW_SHOW);
隐藏:
ShowWindow(HWin,SW_HIDE);
我正在VS 2010上运行
我想知道sendMessage是否不能在隐藏窗口上工作吗?
感谢所有
答案 0 :(得分:0)
我假设您正在明智地检查以确保在执行消息传递代码之前隐藏窗口时,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表单应用程序。