我的c#测试目标winform只有一个按钮,当点击它时,会显示一个messageBox。它看起来像这样:
代码:
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的某个子窗口的子窗口, 等等 。