浅析如何用C#.NET做屏幕截图软件以及注册全局快捷键(下)

本文详细介绍了如何使用C#.NET编写屏幕截图软件,包括模拟PrintScreen按键获取屏幕快照,利用backgroundWorker避免线程冲突,创建全屏截图窗体SnapForm,以及在窗体上绘制矩形选择区域。此外,还讨论了如何设置自定义鼠标样式和注册全局快捷键,如F3键作为截图热键,并通过WndProc处理系统消息来响应快捷键操作。
摘要由CSDN通过智能技术生成

下面来说第三种方法:模拟PrintScreen按键,访问CliPBoard来获得屏幕截图,继而执行截取操作。

  1、模拟PrintScreen按键为我们省去了很多代码,但刚开始也给我带来了很大的费解,假如你想通过button_click事件调用API来模拟按下 PrintScreen键,然后通过Clipboard.GetImage()去获取剪贴板里面的图片,那样结果只有一个:失败!也许你认为是我们在调用 Clipboard.GetImage()时模拟按键还未完成操作,然后我们在它们中间加个Thread.Sleep(0),很遗憾,结果还是一样。我怀疑是鼠标点击button和模拟PrintScreen按键两者之间的紊乱造成的,在此就不多说废话了,本人想到的解决方法就是使用 backgroundWorker来执行按键处理,这样就分离了窗体线程和模拟按键之间的紊乱问题。

  C#模拟键盘按键的实现:

  模拟键盘要用到user32.dll里面的keybd_event

  原型如下:

[DllImport("user32.dll")]
static extern void keybd_event(
 byte bVk,// 虚拟键值
 byte bScan,// 
硬件扫描码
 uint dwFlags,// 动作标识
 UIntPtr dwExtraInfo// 与键盘动作关联的辅加信息
);

  其中,bVk表示虚拟键值,其实它是一个BYTE类型值的宏,其取值范围为1-254。有关虚拟键值表请在MSDN上使用关键字“Virtual- Key Codes”查找相关资料。bScan表示当键盘上某键被按下和放开时,键盘系统硬件产生的扫描码我们可以MapVirtualKey()函数在虚拟键值与扫描码之间进行转换,一般可以设置为0。dwFlags表示各种各样的键盘动作,应用程序可使用如下一些预定义常数的组合设置标志位,KEYEVENTF_EXETENDEDKEY=1:若指定该值,则扫描码前一个值为OXEO(224)的前缀字节。 DEYEVENTF_KEYUP=2:若指定该值,该键将被释放;若未指定该值,该键交被接下。dwExtralnfo࿱

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值