Windows系统最大的特点就是其图形化的操作界面,其图形化界面是建立在其消息处理机制这个基础之上的。我们平时所有的操作都是通过消息的形式和系统进行交互,比如单击鼠标,选择下拉框等等。也就是说只要我们了解消息的机制,能够模拟出各种消息,就可以模拟我们的手工操作。其实想要实现这个这个工作很简单,因为windows已经给我们提供了很方便的接口。比如我们想模拟文本框的输入,只需调用user32.dll(系统DLL,在C:\WINDOWS\system32下)中的SendMessageA函数。
SendMessageA函数将指定的消息发送到一个或多个窗口。定义大致如下:
LRESULT SendMessage(HWND hWnd,UINT Msg,WPARAM wParam,LPARAM IParam); 参数: hWnd:其窗口程序将接收消息的窗口的句柄。如果此参数为HWND_BROADCAST,则消息将被发送到系统中所有顶层窗口, 包括无效或不可见的非自身拥有的窗口、被覆盖的窗口和弹出式窗口,但消息不被发送到子窗口。 Msg:指定被发送的消息。 wParam:指定附加的消息特定信息。 IParam:指定附加的消息特定信息。 返回值:返回值指定消息处理的结果,依赖于所发送的消息。
我们已经知道了SendMessageA的入参,就可以在WinRunner中引用该函数,以实现文本框的输入。代码如下:
extern int SendMessageA(int hand,int msg,int wParam,string lParam); //声明外部函数 load_dll("User32.dll"); //加载DLL obj_get_info ("{class: edit}", "handle", str_Handle); //获取文本框的句柄 SendMessageA(str_Handle,12,0,"d:\\test.xls"); //发送消息
看到这里,你可能会产生疑问,为什么第2、3个参数是输入12、0,其实这些参数都是有固定含义的,具体可参考MSDN上的定义。需要注意的是,网上给的入参可能是十六进制,在WR中使用时需要转换成十进制。
相关资料:
1、windows消息处理机制
2、SendMessage 3、MSDN 4、SendMessage的参数