如何使用c ++ findwindows和sendMessage到c#winform的按钮

时间:2017-08-22 04:54:09

标签: c# c++ sendmessage findwindow

我的c#测试目标winform只有一个按钮,当点击它时,会显示一个messageBox。它看起来像这样:

enter image description here

代码:

    private void button1_Click(object sender, EventArgs e)
    {
        MessageBox.Show("msg");
    }

现在我想使用c ++和win-api来查找窗口并将sendmessage发送到上面的窗体,这是我的代码,第一次在主窗口的第一级子窗口中假设button1:

#include <windows.h>
void main()
{


HWND windowHandle = FindWindowA(NULL, "Form1");   //Can’t find a proccess

if( windowHandle ) 
{
    HWND hwndChild = FindWindowEx(windowHandle, NULL, NULL, NULL);

    while ( hwndChild )
    {
        SendMessage(hwndChild, WM_LBUTTONDOWN, MK_LBUTTON, MAKELPARAM(0, 0));
        Sleep(100);
        SendMessage(hwndChild, WM_LBUTTONUP, MK_LBUTTON, MAKELPARAM(0, 0));

        hwndChild = FindWindowEx(windowHandle, hwndChild, NULL, NULL);
    }
}

return;
}

但这没有效果,c#应用程序的消息不显示。

然后,我假设button1位于mainform的子窗体的第二级,这里是代码:

#include <windows.h>
void main()
{


HWND windowHandle = FindWindowA(NULL, "Form1");   //Can’t find a proccess

if( windowHandle ) 
{
    HWND hwndChild = FindWindowEx(windowHandle, NULL, NULL, NULL);

    while ( hwndChild )
    {
        HWND hwndChildChild = FindWindowEx(hwndChild, NULL, L"Button", NULL);
        if(hwndChildChild)
        {
            SendMessage(hwndChildChild, WM_LBUTTONDOWN, MK_LBUTTON, MAKELPARAM(0, 0));
            Sleep(100);
            SendMessage(hwndChildChild, WM_LBUTTONUP, MK_LBUTTON, MAKELPARAM(0, 0));
            break;
        }
        hwndChild = FindWindowEx(windowHandle, hwndChild, NULL, NULL);
    }
}

return;
}

但这次也没有效果,仍然没有消息框显示。 我的问题是:如何确定button1的mainform的层次结构位置,从搜索我知道有人使用spy ++,如何使用spy ++来知道button1是否是mainform的子窗口,或者是mainform的某个子窗口的子窗口, 等等 。

0 个答案:

没有答案