在用C#编写自动化脚本时遇到各种各样的问题,由于对.net framework不熟悉,有时候要实现一个功能在编写时总会卡在那里一段时间。为了以后在编写不会遇到相同问题,快速解决,所以需要自己好好总结写自己的解决思路,以便后面参考。
对于新手可能会遇到要引用的类不清楚,如要实现截屏功能,我应该使用哪个方法来实现,那么大多数情况可能是网上
百度,
Google;以为百度,Google后看到人家提供了关键代码,就可以实现了,还是too young too naïve,写到自己代码中发现,代码中一大串红色波浪线提醒不存在某个类或方法。看到这么多红色波浪就开始头疼了,不知道这个类或方法需要引用哪个命名空间。可能就有点急了,怎么解决呢?这个方法能正常使用吗?各种疑问萦绕在脑中。
需要总结下自己对于不熟悉C#各种API情况下的解决思路:
1. 首先多去网上找到对应的解决方案。
如我要实现截屏功能,先去搜索C# 截屏相关的信息。找了很多,发现关键代码实现就是下面几行代码:
//屏幕宽
int iWidth = Screen.PrimaryScreen.Bounds.Width;
//屏幕高
int iHeight = Screen.PrimaryScreen.Bounds.Height;
//按照屏幕宽高创建位图
Image img = new Bitmap(iWidth, iHeight);
//从一个继承自Image类的对象中创建Graphics对象
Graphics gc = Graphics.FromImage(img);
//抓屏并拷贝到myimage里
gc.CopyFromScreen(new Point(0, 0), new Point(0, 0), new Size(iWidth, iHeight));
img.Save(sFilePath + testItem+ Guid.NewGuid().ToString() + ".jpg");
要截屏首先要指定屏幕的宽度和高度,那就需要获取屏幕的宽度和高度,第一句和第二句就是获取屏幕的宽和高;第三句就是实例化一个Image对象,创建屏宽和屏高对应的位图,然后第四句通过graphics绘制对应的图片对象,最后将屏幕内容通过Graphics的CopyFromScreen方法将屏幕当前显示的内容copy份,然后保存到指定路径。
2. 然后把关键代码输入,进行调试,看方法是否可以正常实现想要的功能。
//这里的Screen类是需要引用System.Windows.Forms命名空间的
public static void ScreenCapture(string testItem)
{
//屏幕宽
int iWidth = Screen.PrimaryScreen.Bounds.Width;
//屏幕高
int iHeight = Screen.PrimaryScreen.Bounds.Height;
//按照屏幕宽高创建位图
Image img = new Bitmap(iWidth, iHeight);
//从一个继承自Image类的对象中创建Graphics对象
Graphics gc = Graphics.FromImage(img);
//抓屏并拷贝到myimage里
gc.CopyFromScreen(new Point(0, 0), new Point(0, 0), new Size(iWidth, iHeight));
//this.BackgroundImage = img;
//保存位图
//文件的绝对路径
string sFilePath = @"C:\result\bug_screen_capture\";
//验证路径是否存在,不存在则创建
if (!Directory.Exists(sFilePath))
{
Directory.CreateDirectory(sFilePath);
}
img.Save(sFilePath + testItem+ Guid.NewGuid().ToString() + ".jpg");
}
3. 如何解决引入命名空间问题
代码输入到VS中后,发现Screen那是红色标记,提示不存在。点击提示下的可能修复的方案也没有推荐的引入命名空间。
那就要考虑需要先引入Screen对应的命名空间,才可以在代码中使用Screen的命名空间,正常使用Screen这个类,但是由于对Microsoft API不熟悉,发现不知道Screen是放在哪个命名空间下的。用F12导航也失效了,现在就只能借助功能强大的搜索引擎了,可以在搜索引擎中搜索Screen是属于哪个命名空间,也可以查
微软的帮助文档。Microsoft所有的API连接如下:
https://msdn.microsof.com/zh-cn/library/ 中文版
https://msdn.microsoft.com/library 英文版
4.引入对应命名空间
查到Screen类所属的命名空间后,通过VS->项目->引用,然后搜索
Windows,勾选System.Windows.Forms,确定添加后,鼠标指向代码中的Screen后,点击提示的推荐引入的项目命名空间,即可解决这个问题,最后调试运行,解决了截屏问题。
一般系统学习过Microsoft API后,都可以大概了解要使用的类需要引入哪个API。