凯路迪欧是神兽吗:在VC中寻找某个运行中的VB程序的某个文本框并改变其内容

来源:百度文库 编辑:高考问答 时间:2024/05/03 03:14:04
我是一个VB程序员,略懂VC。现在由于使用NSIS写安装程序并需要在安装前实现一些特殊功能,而需要使用VC来做一个DLL,使用__stdcall写函数接口。该函数将会被NSIS调用,并且会寻找某个运行中的VB窗口,并寻找它的其中一个TextBox,改变其内容。用VC写DLL以及寻找VB窗口的句柄我已有相关的资料,现在我的问题是,由于无法从VB的程序中主动的发送TextBox的句柄给VC的DLL,那么,VC的DLL如何检索出这个指定的TextBox?另一个问题就是,如何改变这个文本框的内容(例如使用SendMessage)?给出实例的,再另加100分!
谢谢您的细心回答,不过现在没有办法调试,因为我用NSIS调用我所做的DLL时总出错(即使是一个空的DLL和一个空的函数),我试过用MFC静态库DLL和win32 DLL,都失败了。现在正在查阅有关如果为NSIS做插件的资料。
因为百度知道用得不熟,刚才才发现原来最多只能追加50分的,没有办法给您另外的加上一百分,对不起噢。
希望下次能够帮上您一点小忙。也不会要你的分噢!^_^

你的这个问题可以这样得到解决:

首先你要弄清楚vc的两个函数的用法:

FindWindow(LPCTSTR lpszClassName,
LPCTSTR lpszWindowName );

第二:HWND FindWindowEx(HWND hwndParent,
HWND hwndChildAfter,
LPCTSTR lpszClass,
LPCTSTR lpszWindow
);

两个函数的用法你可以查msdn,仔细的琢磨一下

现在我给出一个例子,希望你能得到启发。

void CFindDlg::OnB()
{
CWnd* pWnd = FindWindow(NULL,"form1");//假设vb窗体的caption是FORM1
if(pWnd!=NULL)
{
HWND pchild=FindWindowEx(pWnd->GetSafeHwnd(),NULL,"ThunderTextBox","Text1");//在这里要使用vc的spy++查
// 看textbox的类名以及其caption
//我这里的是ThunderTextBox以及text1
if (pchild!=0)
{
CWnd p;
p.Attach(pchild);
char BUF[512];
CString sPath="hehehehehehhehe";//改变的内容
lstrcpy(BUF,(LPCTSTR)sPath);
p.SendMessage(WM_SETTEXT,0,(LPARAM)BUF);
p.Invalidate(true);
p.Detach();
}
UpdateData(false);
}

}

你可以好好的试一试,还可以和我联系,祝你好运!