c#使用spy进行模拟操作
很无奈,写了很长时间,最后保存时网页失去响应,真是要命呢。本来想就此放弃了,但是想还是粗略的重写一次吧,希望日后可以对朋友有一定的帮助。
Microsoft.Spy工具是一个基础工具,我们简要介绍一下使用方法:
spy在vs有自带的,也可以在网下直接下载。
打开spy工具,主界面如下:

今天我们使用vnc作为一个示例

目标是在server内写入192.168.2.200,并点击Options第二个按钮
第一步,如何获取vnc窗体,使用spy进行窗体查找

拖动查找工具图标到需要的界面上。

这样我们就可以找到需要的窗体。
FindWindow 可以查找第一个主窗体,使和类名或标题。
FindWindowEx可以查找窗体下的控件。
SendMessage向窗体发送消息。


使和窗口搜索查找控件。
  [DllImport("user32.dll", EntryPoint = "FindWindow", SetLastError = true)]
         //参数1:指的是类名。参数2,指的是窗口的标题名。两者至少要知道1个
         public static extern IntPtr FindWindow(string lpClassName, string lpWindowName);
         [DllImport("user32.dll", SetLastError = true, CharSet = CharSet.Auto)]
         public static extern IntPtr FindWindowEx(IntPtr parentHandle, IntPtr childAfter, string lclassName, string windowTitle);
         [DllImport("user32.dll", EntryPoint = "SendMessage", SetLastError = true, CharSet = CharSet.Auto)]
         public static extern IntPtr SendMessage(IntPtr hwnd, uint wMsg, int wParam, string lParam);
         [DllImport("user32.dll", EntryPoint = "SendMessage", SetLastError = true, CharSet = CharSet.Auto)]
         public static extern IntPtr SendMessage(IntPtr hwnd, uint wMsg, int wParam, int lParam);
IntPtr win =FindWindow(null, "VNC Viewer : Connection Details");
if (win != IntPtr.Zero)
{
IntPtr winComboBox = FindWindowEx(win, new IntPtr(), "ComboBox", null);
if (winComboBox != IntPtr.Zero)
{
IntPtr winEdit = FindWindowEx(winComboBox, new IntPtr(), "Edit", null); IntPtr resultEdit = SendMessage(winEdit, 0xC, , "192.168.2.100"); //获取第一个按钮
IntPtr button1 = FindWindowEx(win, new IntPtr(), "Button", "&Options..."); if(button1 != IntPtr.Zero)
SendMessage(button1, 0xF5, , ); //点击事件 if (winEdit != IntPtr.Zero)
{
MessageBox.Show("找到编辑框");
}
//MessageBox.Show("找到下拉框");
}
else
{
//MessageBox.Show("没有找到下拉框");
} MessageBox.Show("已经找到窗体");
}
else
{
MessageBox.Show("没有找到窗体");
}
}
执行结果如下:

如果多个按钮,又没有标题,则只能一个一个的获取,如下
如果哪位朋友还有其它方法,还请多多指教。
IntPtr button1 = FindWindowEx(win, new IntPtr(), "Button", null);
IntPtr button2 = FindWindowEx(win, button1, "Button", null);
c#使用spy进行模拟操作的更多相关文章
- adb模拟操作之event
		
首语: 我们都知道,adb可以对模拟器和root过的真机进行很多操作,例如:模拟点击,输入,截图,手机和PC,数据互传等.这篇要说的就是adb操作模拟器或者真机的输入输出. 0x01 问题 使用adb ...
 - jquery模拟操作——trigger()函数
		
在页面中很多效果需要触发才能实现,比如click后的弹窗.但有时我们无法点击或是跳过用户触发,就像网页中那些可恶的广告弹窗 trigger函数可以实现模拟操作.譬如常用的点击动作,我们可以这样, $( ...
 - jQuery中的模拟操作
		
jQuery中的模拟操作主要是通过trigger来触发,相当于页面加载完成后不需要用户点击按钮,就可以自动触发页面中的相关事件. trigger(type,[data])可以用来模拟触发自定义事件的触 ...
 - 剑指Offer——Java实现栈和队列的互模拟操作
		
剑指Offer--Java实现栈和队列的互模拟操作 栈模拟队列 题目:JAVA实现用两个栈来实现一个队列,完成队列的Push和Pop操作.队列中的元素为int类型. 思路:其实就是把队列正常入 ...
 - jQuery 模拟操作
		
1.常用模拟 有时,需要通过模拟用户操作,来达到单击的效果.例如在用户进入页面后,就触发 click 事件,而不需要用户去主动单击.在 jQuery 中,可以使用 trigger() 方法完成模拟操作 ...
 - 第一百七十一节,jQuery,高级事件,模拟操作,命名空间,事件委托,on、off 和 one
		
jQuery,高级事件,模拟操作,命名空间,事件委托,on.off 和 one 学习要点: 1.模拟操作 2.命名空间 3.事件委托 4.on.off 和 one jQuery 不但封装了大量常用的事 ...
 - jq模拟操作
		
1.常用模拟 trigger() $('#btn').trigger('click'); 当页面加载完,点击事件就会完成 上面也可以简写成:$('#btn').click(); 2.触发自定义事件 t ...
 - Android自动化框架 模拟操作 模拟测试
		
转自:http://bbs2.c114.net/home.php?mod=space&uid=1025779&do=blog&id=5322 几种常见的Android自动化测试 ...
 - <JAVA图像学习笔记>十字路口交通模拟--操作系统模拟课后小项目
		
项目的要求很简单: 模拟出十字路口的交通控制情况: 秒. 当东西(或南北)方向红灯时,所有车辆(除了消防车.救护车.警车)均排队等待,当东西(或南北)方向绿灯时,所有车辆按序行驶(不准超车). 制作这 ...
 
随机推荐
- Robot Framework学习资料
			
robot user guide:http://robotframework.org/robotframework/#user-guide robot selenium 详细介绍:http://pan ...
 - Java 8 中新的 Date 和 Time 类入门详解
			
这篇文章主要是java8中新的Date和Time API的实战.新的Date和Time类是java开发者社区千呼万唤始出来的.Java8 之前存在的Date类一直都受人诟病,很多人都会选择使用第三方的 ...
 - Flas-SQLAchemy数据库操作使用学习笔记
			
Flas-SQLAchemy数据库操作使用学习笔记 Flask-SQLALchemy 是一个给你的应用添加 SQLALchemy 支持的 Flask 扩展.SQLALchemy 是Python语言的S ...
 - html5中input新增type值的使用
			
二狗在最近的项目以html5和webapp为主,并接触到了input新增type值的使用,下面就把这些玩意一一以实例列举出来 一:type = date:定义日期:年-月-日 input type=& ...
 - java—— 文件操作
			
目录: 1.博文链接 2. 1.博文链接 向文件未追加内容:流操作通过BufferedWriter向文件末尾追加内容的几种常用方法
 - android窗体动画:activity启动从底部向上滑动出现,关闭的时候从顶部向下滑动消失的动画实现
			
在IOS系统里,我们打开app都是有启动动画的,这样子在打开一个新窗体,用户感觉有个过渡动画,体验效果很好,不会觉得很突然就冒出一个窗体,下面就实现一个android 的activity启动和关闭动画 ...
 - 菜鸟学习 - Unity中的热更新 - LuaInterface用户指南
			
[由于学习,所以翻译!] 1.介绍 LuaInterface 是 Lua 语言和 Microsoft.NET 平台公共语言运行时 (CLR) 之间的集成库. 非常多语言已经有面向 CLR 编译器和 C ...
 - 数据库日期类型转换–HSQL
			
最近遇到要用HSQL查询离某个时间的后十分钟的记录,不像Oracle和SqlServer中可以直接有函数转换,而是直接通过'+'来得到 Hsql Document -- standard forms ...
 - Java实现BASE64编解码
			
Java实现BASE64编解码 作者:chszs,转载需注明.博客主页:http://blog.csdn.net/chszs BASE64和其它类似的编码算法通经常使用于转换二进制数据为文本数据,其目 ...
 - vim 开发配置(转载)
			
原文:http://www.cnblogs.com/ma6174/archive/2011/12/10/2283393.html 花了很长时间整理的,感觉用起来很方便,共享一下. 我的vim配置主要有 ...