Отправить сообщение в скрытое окно не работает - PullRequest
0 голосов
/ 02 декабря 2018

Я хочу отправить сообщение о нажатии на кнопку окна, в которой заголовок «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

iХотите знать, если sendMessage не работает на скрытом окне, есть ли другой способ сделать это ??

спасибо Всем

1 Ответ

0 голосов
/ 02 декабря 2018

Я предполагаю, что вы тщательно проверяете, чтобы убедиться, что ваши FindWindow вызовы не возвращают NULL, когда окно скрыто, прежде чем выполнять код передачи сообщений.

Предполагается, что вы получаете действительные HWND, возвращенные изFindWindow вместо 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 формы.

...