zzz如何获得其他程序的EDIT控件中的内容呢?第一个想法就是使用GetWindowText函数,设定其内容的话就是SetWindowText函数,其实不对,这两个函数对于其他的控件都能够正常工作,唯独对于EDIT控件不行,我在这边困惑了好久,甚至想去逆向一下程序,看看到底有没有发送WM_GETTEXT命令和WM_SETTEXT命令了,幸好有google。。。省却一番功夫。贴一段不能成功的代码
Code
#include <windows.h>
BOOL CALLBACK EnumChildProc(HWND hWnd,LPARAM lParam);
int WINAPI WinMain(HINSTANCE hInstance,HINSTANCE hPrevInstance,LPSTR lpCmdLine,int nCmdShow)
{
char className[]="notepad";
//HWND hWnd=::FindWindow(className,NULL);
HWND hWnd=::FindWindow(NULL,"夏娃");
if(hWnd)
{
::EnumChildWindows(hWnd,EnumChildProc,0);
return 0;
}
MessageBox(NULL,"fail!","fail",MB_OK);
return 0;
}
BOOL CALLBACK EnumChildProc(HWND hWnd,LPARAM lParam)
{
char temp1[256],temp2[256],temp3[256];
::GetClassName(hWnd,temp1,255);
::GetWindowText(hWnd,temp2,255);
::wsprintf(temp3,"classname: %s windowtext: %s",temp1,temp2);
::MessageBox(NULL,temp3,"cwnd",MB_OK);
return true;
}
/*BOOL CALLBACK EnumChildProc(HWND hWnd,LPARAM lParam)
{
char temp1[256],temp2[256];
::GetClassName(hWnd,temp1,255);
if(!::strcmp(temp1,"Edit"))
{
MessageBox(NULL,"Edit","cwnd",MB_OK);
//使用sendmessage
::strncpy(temp1,"fuck",5);
::SendMessage(hWnd,WM_SETTEXT,0,(LPARAM)temp1);
return 0;
}
::wsprintf(temp2,"classname: %s",temp1);
MessageBox(NULL,temp2,"cwnd",MB_OK);
return true;
}*/
黑色部分的程序永远也不会获得EDIT中的内容,对于SetWindowText也是一样的
被注释掉的部分是能够成功的代码,调用了SendMessage函数发送WM_SETTEXT命令到目标程序中,成功了,如果想要获取目标EDIT中的内容的话则需要发送WM_GETTEXT命令,具体的程序还没有试,今天有点累了,明天试了再贴上来:)