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;
}

解决方案 »

  1.   

    你这个是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. 
      

  2.   

    window->SetWindowPos(NULL,0,0,100,100,NULL);这一句我写多了,原本没有这一句,我乱写一行测试看看而已,这一句会出错的
      

  3.   

    获取其它进程的窗口文字时,GetWindowText对某些控件无法获取到真正的内容,应该用SendMessage发WM_GETTEXT消息来获取。