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图像学习笔记>十字路口交通模拟--操作系统模拟课后小项目
项目的要求很简单: 模拟出十字路口的交通控制情况: 秒. 当东西(或南北)方向红灯时,所有车辆(除了消防车.救护车.警车)均排队等待,当东西(或南北)方向绿灯时,所有车辆按序行驶(不准超车). 制作这 ...
随机推荐
- SQL 截图
- 《算法问题实战策略》-chaper13-数值分析
这一章节主要介绍我们在进行数值分析常用的二分.三分和一个近似求解区间积分的辛普森法. 首先介绍二分. 其实二分的思想很好理解并且笔者在之前的一些文章中也有所渗透,对于二次函数甚至单元高次函数的零点求解 ...
- Java高级特性之枚举学习总结
在Java SE5之前,我们要使用枚举类型时,通常会使用static final 定义一组int常量来标识,代码如下 public static final int MAN = 0; public s ...
- html+javascript实现可拖动弹出层、对话框、可提交
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3c.org ...
- 获取json对象的长度
获取json对象的长度跟获取一个普通对象或数组的方法不一样,json对象没有length属性,不能直接用.length直接获得. function getJsonLength(json){ var j ...
- log4j级别输出
log4j 我们知道: log4j.logger.XX cover ==> log4j.rootLogger log4j.appender.XX.Threshold决定了最低接收级别 也就是说 ...
- C primer plus 读书笔记第四章
本章的标题是字符串的格式化输入/输出,重点介绍输入和输出. 本章的第一段示例代码和上一张示例代码很相近,代码就不贴了,新出现的特性是使用了一个数组来存放字符串,C预处理命令和strlen()函数. 下 ...
- 使用EMOJI表情
因为IOS系统支持日文中的字块编码,所以在UILable,UITextField,UIAlertView等控件中使用emoji表情编码(emoji就是表情符号:词义来自日语(えもじ,e-moji,mo ...
- jsp if else c标签 总结
JSTL标签使用方法 keyword:JSTL标签.<c:choose>.<c:forEach>.<c:forTokens>.<c:if>.<c: ...
- 《C专家编程》第一天
1.2 C语言的早期体验 1)C语言的基本数据类型直接与底层硬件相对应.C语言不存在内置的复数类型.C语言一开始不支持浮点类型,直到硬件系统能够直接支持浮点数之后才增加了对它的支持. 2)auto关键 ...