CEdit::GetWindowText无法获取文本框输入,文本框里面有数据,但获取的是空字符串

OnTheWall 2009-04-08 03:41:58
HWND ghwnd;
BOOL CALLBACK MyEnumWndProc5(HWND hWnd, LPARAM lParam);
BOOL CALLBACK MyEnumWndProc5(HWND hWnd, LPARAM lParam)
{
DWORD id;
GetWindowThreadProcessId(hWnd, &id);
if(id==(DWORD)lParam)
{
ghwnd=hWnd;
return FALSE;
}
return TRUE;
}

int _tmain(int argc, TCHAR* argv[], TCHAR* envp[])
{
int nRetCode = 0;

// initialize MFC and print and error on failure
if (!AfxWinInit(::GetModuleHandle(NULL), NULL, ::GetCommandLine(), 0))
{
// TODO: change error code to suit your needs
_tprintf(_T("Fatal Error: MFC initialization failed\n"));
nRetCode = 1;
}
else
{
// TODO: code your application's behavior here.
ghwnd=NULL;

STARTUPINFO si;
PROCESS_INFORMATION pi;

ZeroMemory(&si, sizeof(STARTUPINFO));
si.cb=sizeof(STARTUPINFO);
CreateProcess(NULL, "E:\\Test\\MyTest1.exe", NULL, NULL, TRUE,NORMAL_PRIORITY_CLASS, NULL, NULL, &si, &pi);

WaitForInputIdle(pi.hProcess, 40000);

EnumWindows((WNDENUMPROC)MyEnumWndProc5, (LPARAM)pi.dwProcessId);

if(ghwnd)
{
char szCaption[256];
GetWindowText(ghwnd, szCaption, 256);
CWnd *window=(CWnd*)GetWindow(ghwnd,NULL);
window->SetWindowPos(NULL,0,0,100,100,NULL);
CEdit *textBox= (CEdit*)window->FindWindowExA(ghwnd,0,"Edit","");
//CEdit *textBox= (CEdit*)window->GetDlgItem(0x00230f62);
CString temp;
textBox->GetWindowText(temp);
cout<<temp;
cin>>new char[256];
}
}
return nRetCode;
}
...全文
1351 12 打赏 收藏 转发到动态 举报
写回复
用AI写文章
12 条回复
切换为时间正序
请发表友善的回复…
发表回复
cnzdgs 2009-04-08
  • 打赏
  • 举报
回复
获取其它进程的窗口文字时,GetWindowText对某些控件无法获取到真正的内容,应该用SendMessage发WM_GETTEXT消息来获取。
OnTheWall 2009-04-08
  • 打赏
  • 举报
回复
window->SetWindowPos(NULL,0,0,100,100,NULL);这一句我写多了,原本没有这一句,我乱写一行测试看看而已,这一句会出错的
OnTheWall 2009-04-08
  • 打赏
  • 举报
回复
[Quote=引用 6 楼 Mackz 的回复:]
你这个是SDK编程,那么GetWindow就是API函数,返回的是HWND,能够直接强制转换为CWnd*指针?下面的代码不出错?就算暂时没出错,也是碰巧了吧。


另外,跨进程读取编辑框内容需要发送WM_GETTEXT消息,而不能通过GetWindowText函数实现。

To retrieve the text of a control in another process, send a WM_GETTEXT message directly instead of calling GetWindowText.
[/Quote]

不是碰巧啊,我调试过很多次都没有出错。

谢谢你的回复,我试试你说的方法吧
#Page# 2009-04-08
  • 打赏
  • 举报
回复
6楼正解,楼主试试
waltsin 2009-04-08
  • 打赏
  • 举报
回复
同意Mackz的说法
zjh824 2009-04-08
  • 打赏
  • 举报
回复
edit控件应该可以取到的...
菜牛 2009-04-08
  • 打赏
  • 举报
回复
你这个是SDK编程,那么GetWindow就是API函数,返回的是HWND,能够直接强制转换为CWnd*指针?下面的代码不出错?就算暂时没出错,也是碰巧了吧。


另外,跨进程读取编辑框内容需要发送WM_GETTEXT消息,而不能通过GetWindowText函数实现。

To retrieve the text of a control in another process, send a WM_GETTEXT message directly instead of calling GetWindowText.
ylywyn136 2009-04-08
  • 打赏
  • 举报
回复
可能需要 注入dll
OnTheWall 2009-04-08
  • 打赏
  • 举报
回复
请教楼上没有什么办法能取到?
fandh 2009-04-08
  • 打赏
  • 举报
回复
好像这样不一定能取到!
OnTheWall 2009-04-08
  • 打赏
  • 举报
回复
执行了,执行过程中没有出错。
ylywyn136 2009-04-08
  • 打赏
  • 举报
回复
up, 代码都执行了吗

15,976

社区成员

发帖
与我相关
我的任务
社区描述
VC/MFC 界面
社区管理员
  • 界面
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧