|
论坛上看到有个大大写了个自动点QTP的RUNERROR窗口的小工具,但是网友们苦于楼主失踪,无法求得原代码,因此自个而按照自己的猜测写了个,各位可以试试,要怎么改就怎么改,要加界面就用VS2005拖一个再将这写放到里面,想点什么就自己改代码咯.有什么错误的话请各位在小弟的BLGG 9527留上训言.
不过注意咯,用作监控的话要加上无限循环::EnumWindows(EnumFunc,0)这个,所以最好起一个线程,在线程函数里加上
while(true){
::EnumWindows(EnumFunc,0);
//为了性能,最好在这加上一句等待
}
用来监控的一定要有循环,要不就失去监控的意义,不过当然各位可以通过其他数据的监控再驱动,如果加上了无限循环,那么会出现阻塞,所以为了避免阻塞,请用线程.
下面是定位窗口子对象并发送消息的代码.
BOOL CALLBACK EnumChildProc(HWND hwndChild,LPARAM lParam)
{
char WndTitle[255];
char szName[255];
::GetWindowText(hwndChild,WndTitle,255);//获取当前子对象的TITLE
::GetClassName(hwndChild,szName,255);//获取当前子对象的CLASSNAME
if((strcmp(WndTitle,"确定") == 0)&&(strcmp(szName,"Button") == 0))//这里也改,你想找TITLE是什么的就自己改,CLASSNAME同理
{
DWORD dw = 1;
dw = dw << 16;
dw +=1;
//下面2句就是对指定的子对象发送消息了,想点击的话可以发送KEY的消息,或者用鼠标消息,反正要做什么就自己查WINUSER.H和MSDN
::PostMessage(hwndChild,WM_LBUTTONDOWN,MK_LBUTTON, dw);
::PostMessage(hwndChild,WM_LBUTTONUP,MK_LBUTTON,dw);
///////////////////////////////////////////////////
}
return true;
}
BOOL CALLBACK EnumFunc(HWND hwnd,LPARAM lParam){
char szName[255];
::GetClassName(hwnd,szName,255);//获取当前窗口的CLASSNAME
if(strcmp(szName,"#32770") == 0)//这里各位可以改,你想找哪个窗口都行,自己该CLASSNAME,当有多个CLASSNAME一样的话,你又想定位,那么你再加上其他判断咯,例如窗口的TITLE.
{
::EnumChildWindows(hwnd,EnumChildProc,0);//这里是枚举"#32770"的窗口下的所有子对象
}
return true;
}
int main(int argc, char* argv[])
{
::EnumWindows(EnumFunc,0);//枚举桌面当前所有WINDOW.
return 0;
}
[ 本帖最后由 mythxhg 于 2008-1-10 18:34 编辑 ] |
|