怎样控制他人程序上的ActiveX控件
我们可以用FindWindow和GetDlgItem的方法控制别人的程序,向正在运行中的别人的程序控件中写入数据,发送信息。那是因为他人的程序用的是Windows标准控件,我们知道那些标准控件可以响应什么事件。而且那些标准控件能响应的事件在Windows.h文件中有定义。
可是,当前出现了如下问题:
在别人的程序上有一个叫SpreadSheet的ActiveX控件。是一个二维表网格控件。我在程序中可以加入这个ActiveX控件,也就是说我可以看到这个控件的函数和方法。我还用exescope找到了那些函数的地址。但是现在问题来了。我要如何用这些地址来调用对应的函数呢?
以上是用FindWindow的方法控制他人程序的方法。
char buf[50]={0};
hWnd=::WindowFromPoint(m_ptWndPos); // CPoint(347,241)
if(hWnd) ::SendMessage(hWnd, WM_GETTEXT, 40, (LPARAM)buf);
TRACE("hWnd = %08X , WindowTitle = '%s'\n", hWnd, buf);
if(hWnd && strcmp(buf, m_strErrWndTitle)!=0) // 找到'登录'窗口
{
hWnd2=::GetDlgItem(hWnd, m_nEditID); // 0xB4=QQ密码输入框, 0x3EA=EventTest
if(hWnd2)
{
::SendMessage(hWnd2, WM_GETTEXT, 40, (LPARAM)buf);
TRACE("hWnd2 = %08X , WindowTitle = '%s'\n", hWnd2, buf);
if((nState & 1) == 0)
{
for(int i=0; i<strPwd.GetLength(); i++) // 向目标窗口发送密码
{
::PostMessage(hWnd2, WM_CHAR, strPwd[i], 0);
}
}
Sleep(100);
// 点击'确认'按钮
hWnd2=::GetDlgItem(hWnd, m_nButtonID);
if(hWnd2)
{
::PostMessage(hWnd2, WM_LBUTTONDOWN, 0, 0);
::PostMessage(hWnd2, WM_LBUTTONUP, 0, 0);
nState |= 1; // 发送密码完毕
}
}
}
上面的程序能成功是因为QQ的密码框支持PostMessage函数。
假想一下,如果QQ的密码框是一个ActiveX控件,而他支持的事件我们只知道地址。那么要如何调用呢?这种情况很像调用DLL中的函数。
把我的问题总结成一句话如下:
怎么用函数地址调用ActiveX控件的方法函数。
问题点数:20、回复次数:0Top




