【问题标题】:sendMessage to a hidden window did not worksendMessage 到隐藏窗口不起作用
【发布时间】:2018-12-02 05:39:13
【问题描述】:

我想在窗口的按钮上发送一个点击消息,它的标题是“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 是否在隐藏窗口上不起作用,还有其他方法吗??

谢谢大家

【问题讨论】:

  • 根据BM_CLICK 文档:“如果按钮在对话框中并且对话框未处于活动状态,则 BM_CLICK 消息可能会失败。”为什么会这样?向隐藏的窗口发送点击(面向视觉的操作)会成功吗?

标签: c++ visual-studio-2010 visual-c++ sendmessage


【解决方案1】:

我假设您正在明智地检查以确保在执行消息传递代码之前隐藏窗口时您的 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 表单应用程序。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2014-06-08
    • 2020-04-17
    • 2017-04-29
    • 2019-07-19
    • 2015-07-07
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多