http://www.sufeinet.com/plugin.php?id=keke_group

苏飞论坛

 找回密码
 马上注册

QQ登录

只需一步,快速开始

分布式系统框架(V2.0) 轻松承载百亿数据,千万流量!讨论专区 - 源码下载 - 官方教程

HttpHelper爬虫框架(V2.7-含.netcore) HttpHelper官方出品,爬虫框架讨论区 - 源码下载 - 在线测试和代码生成

HttpHelper爬虫类(V2.0) 开源的爬虫类,支持多种模式和属性 源码 - 代码生成器 - 讨论区 - 教程- 例子

查看: 3380|回复: 0

[基类库] 如何使用api实现alt+printscreen功能并保存

[复制链接]
发表于 2015-5-4 21:11:12 | 显示全部楼层 |阅读模式
1金钱
如果使用windows form,这一功能已经实现。
但是我想使用class,生成dll后供其他程序调用,这样的代码怎么写?
以下代码是基于class的,生成dll被其他程序调用后有问题,但是不知道怎么解决。问题有:
1. 第一次调用dll时,clipboard中没有任何数据
2. 第二次及后续的调用中,可以实现保存截屏图片,但是无法清空clipboard中的数据。

[C#] 纯文本查看 复制代码
public void CaptureWindow(string fileName, ImageFormat imageFormat, string printType)
        {
            AltPrintScreen_API(printType);
            int i = 0;
            if (User32.OpenClipboard(IntPtr.Zero))
            {                
                IntPtr hMem = User32.GetClipboardData(2);
                while (hMem.ToInt32() == 0 && i < 3)
                {
                    if (i == 2) throw new IndexOutOfRangeException("Error0:Can't Get Image" + hMem.ToString()); //由此判断出第一次调用此dll时,clipboard中并没有任何数据
                    AltPrintScreen_API(printType);
                    hMem = User32.GetClipboardData(2);
                    i = i + 1;
                }
                new Bitmap(Image.FromHbitmap(hMem), Image.FromHbitmap(hMem).Width, Image.FromHbitmap(hMem).Height).Save(fileName, imageFormat);
                User32.EmptyClipboard(); //在第二次调用此dll及后续的调用中,clipboard中的数据仍然保留,并没有被清空
                User32.CloseClipboard();
            }
        }

public static void AltPrintScreen_API(string printType)
        {
            //Alt - VK_MENU - 18
            //PrintScreen - VK_SNAPSHOT - 44
            try
            {
                if (printType == "AltPrintScreen")
                {
                    KeyDown_API(18);
                    KeyDown_API(44);
                    Application.DoEvents();
                    KeyUp_API(18);
                    KeyUp_API(44);
                }
                else if (printType == "PrintScreen")
                {
                    KeyDown_API(44);
                    Application.DoEvents();
                    KeyUp_API(44);
                }
            }
            catch(Exception)
            {
                throw new Exception("Error PrintScreen: Check Print Type");
            }
        }




1. 开通SVIP会员,免费下载本站所有源码,不限次数据,不限时间
2. 加官方QQ群,加官方微信群获取更多资源和帮助
3. 找站长苏飞做网站、商城、CRM、小程序、App、爬虫相关、项目外包等点这里
您需要登录后才可以回帖 登录 | 马上注册

本版积分规则

QQ|手机版|小黑屋|手机版|联系我们|关于我们|广告合作|苏飞论坛 ( 豫ICP备18043678号-2)

GMT+8, 2024-11-24 06:23

© 2014-2021

快速回复 返回顶部 返回列表