我也发一点心得:如何给另外一个程序的编辑框中发送文字
经常在网上看到有朋友问:如何给另外一个程序的编辑框中发送文字?怎么得到别的程序的某个编辑框中的文本内容?回答的朋友也只是笼统地回:用FindWindow()和EnumChildWindows()这两个函数。很少有直接提供代码的,昨夜抽空写了段代码,供大家学习和参考!因本人水平实在不怎么样,代码还很粗糙,在XP系统、VC++ 6.0下总算运行无误,没有在其它环境下试过,有什么bug或不足之处欢迎大家批评指正!!
1 先在你工程中的.cpp文件加上如下函数:
BOOL CALLBACK EnumProc( HWND hWnd, LPARAM )
{
TCHAR szClass[128]; //用来存放找到子窗口的类名
do
{
GetClassName(hWnd, szClass, sizeof(szClass)); //得到子窗口的类名
if(lstrcmp(szClass, "Edit") == 0) //判断该子窗口是否是编辑框
{
char buf[]="终于被我找到了吧!把这段话发过去^_^"; //这里改成你要发送的文字
CWnd::FromHandle(hWnd)->SendMessage(WM_SETTEXT,strlen(buf),(LPARAM)buf);
AfxMessageBox("哇,主人你真是英明神武、文承武德、料事如神!\n偶找到编辑框那丫的,话已传过去了!");
break;
}
hWnd=::GetNextWindow(hWnd,GW_HWNDNEXT); //查找下一个子窗口
} while(NULL!=hWnd); //一直找到最后一个子窗口
return FALSE;
}
2 接着在你的按钮响应函数中加上如下代码:
void CMMDlg::OnButton1()
{
// TODO: Add your control notification handler code here
HWND hWnd =::FindWindow(NULL,"DlgDemo"); //这里假设你要找的程序的窗口标题为“DlgDemo”
if (NULL != hWnd)
EnumChildWindows(hWnd, EnumProc, 0);
else
AfxMessageBox("什么破对话框,找不到,就是找不到:( \n你那么有能耐,要找自己找!");
}
3 上面的代码只发送文本给目标对话框中的第一个编辑框,如果要发给多个编辑框中的某一个,那代码还要自己完善一下,主要找到编辑框后,再得到它的窗口位置和大小,并根据这个来判断是不是你要找的编辑框。