高分求解,急!!!!请大家帮忙 FindWindow()获得那个editbox的hwnd,再PostMessage(hwnd, WM_GETTEXT,...);PostMessage(hwnd, WM_SETTEXT,...); 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 呵呵,如果桌面上那个程序不是你自己写的,就未必有IDISPATCH接口,就不能用自动化了。 不会吧,一定要有idispatch才可以的啊。如果不能自动化呢?还有其他的方法吗? zcpro(zcpro)的方法是可以的但PostMessage(hwnd, WM_GETTEXT,...);是不是该改成SendMessage(hwnd, WM_GETTEXT,...);否则字符串还没取就返回了 可是我这个程序里的edit box没有标题,怎么办呢,我只知道用spy++看出来这个edit box的class是ledit,不知道该如何下手了。 那么你再用Spy++看看,看他的父窗口有没有特殊的地方,如果还没有,就再往上找。找的时候最好将他们的逻辑关系搞清楚,例如,他的父窗口有几个EDIT控件,它自己是第几个等等,或者,它的上一个、下一个Sibling控件有没有什么特殊之处……程序里用FindWindow/GetWindow/EnumWindows/EnumChildWindows倒着把它找回来。最后,取文本一定要用SendMessage,绝对不能用PostMessage。 富窗口的Class是"Afx:b:10011:6:490683",不知道是什么东东,还有这个程序里只有一个edit box,你能不能说得详细一点,谢谢。 楼上的能不能说得详细点,getmessage()不是取消息队列里的消息的吗? TCHAR szBuffer[256];HWND hParent = FindWindow(TEXT("Afx:b:10011:6:490683"), NULL);HWND hEdit = FindWindowEx(hParent, NULL, TEXT("EDIT"), NULL);SendMessage(hEdit, WM_GETTEXT, 256, (LPARAM)szBuffer); 楼上的高手,我试了你的程序,可以找到那个edit box了,但是为什么读不进数据,还有,我把FindWindow(),FindWindowEx(),和SendMessage()都加了::,否则好像不能正常编译,不知道对不对。 是不是因为楼上说的没有定义automation啊。 TCHAR szBuffer[256];HWND hParent = FindWindow(TEXT("Afx:b:10011:6:490683"), NULL);HWND hEdit = FindWindowEx(hParent, NULL, TEXT("EDIT"), NULL);//SendMessage(hEdit, WM_GETTEXT, 256, (LPARAM)szBuffer);GetWindowText(hEdit, szBuffer, sizeof(szBuffer) - 1);try again! 进行控件遍历EnumChildWindows(g_hwnd,EnumChildProc,0);//g_hwnd为父窗口BOOL CALLBACK EnumChildProc(HWND hwndChild, LPARAM lParam) { BOOL bGet; char szBuf[256]; GetClassName(hwndChild, szBuf, 256); if(!strcmp(temp,_T("Edit")))// Edit输入框 bGet=1; if(bGet) SendMessage(hwndChild,WM_GETTEXT,256,(LPARAM)szBuf);}填充的方法是差不多的 不行,还是只能取到caption,要么这个窗口不是edit control,msdn里面说other window只能取到window title。 可以找到这个窗口,spy++里面显示的是ledit,但是好像不是eidt框VC中可以用来显示和改写的有哪几种控件啊。 我找到了这个窗口控件的handle,但是取出来的只是window title,好像wm_gettext只能取edit control的内容,而其他的window,只能取到title。 思路就是azuo_lee所说的。你再具体使用一下HWND hEdit = FindWindowEx(hParent, NULL, TEXT("EDIT"), NULL);找到确切的edit。azuo_lee的方法应该是正确的啊。 我的意思是这个窗口,也许不是edit control,所以WM_GETTEXT只能返回window title(MSDN里说的)。 你可以针对不同的控件类型采用不同的处理方法:比如ComboBoxSendMessage( (HWND) hWnd, // handle to destination window CB_GETLBTEXT, // message to send (WPARAM) wParam, // item index (LPARAM) lParam // receives string (LPCSTR));就可以得到值了 我看msdn上的介绍,好像只有edit control,combo box,rich edit box这些可以取到值。不过我总觉得那个窗口很象记事本的里的那个窗口。不知道为什么。 VS2010 简易网络浏览器 CDockablePane Dialog 构造DialogBar问题 多个CListCtrl类中分别排序问题 提示Resource.h: No such file or directory,明明有的啊! 一个棘手的问题 如何更改 CButton 的字休 求助:一个关于在VC++6.0中调用SQLSERVER2000存储过程的问题(百分求助) VC中,有目录对话框吗??如何用? 这个问题好容易 请问关于图像边界的邻域处理方面的问题 哇,竟然还有46分,全给了…… 到底什么是钩子,干什么用呢? 文档/视结构问题
但PostMessage(hwnd, WM_GETTEXT,...);是不是该改成SendMessage(hwnd, WM_GETTEXT,...);否则字符串还没取就返回了
程序里用FindWindow/GetWindow/EnumWindows/EnumChildWindows倒着把它找回来。
最后,取文本一定要用SendMessage,绝对不能用PostMessage。
HWND hParent = FindWindow(TEXT("Afx:b:10011:6:490683"), NULL);
HWND hEdit = FindWindowEx(hParent, NULL, TEXT("EDIT"), NULL);
SendMessage(hEdit, WM_GETTEXT, 256, (LPARAM)szBuffer);
HWND hParent = FindWindow(TEXT("Afx:b:10011:6:490683"), NULL);
HWND hEdit = FindWindowEx(hParent, NULL, TEXT("EDIT"), NULL);//SendMessage(hEdit, WM_GETTEXT, 256, (LPARAM)szBuffer);
GetWindowText(hEdit, szBuffer, sizeof(szBuffer) - 1);try again!
EnumChildWindows(g_hwnd,EnumChildProc,0);//g_hwnd为父窗口
BOOL CALLBACK EnumChildProc(HWND hwndChild, LPARAM lParam)
{
BOOL bGet;
char szBuf[256]; GetClassName(hwndChild, szBuf, 256);
if(!strcmp(temp,_T("Edit")))// Edit输入框
bGet=1;
if(bGet)
SendMessage(hwndChild,WM_GETTEXT,256,(LPARAM)szBuf);
}
填充的方法是差不多的
VC中可以用来显示和改写的有哪几种控件啊。
你再具体使用一下
HWND hEdit = FindWindowEx(hParent, NULL, TEXT("EDIT"), NULL);
找到确切的edit。
azuo_lee的方法应该是正确的啊。
比如ComboBox
SendMessage(
(HWND) hWnd, // handle to destination window
CB_GETLBTEXT, // message to send
(WPARAM) wParam, // item index
(LPARAM) lParam // receives string (LPCSTR)
);就可以得到值了