C# 让PrintScrn失效 + 当按下PrintScrn时,将截取的画面save

计时器跑跑跑,去看看有没有人在按PrintScrn,如果有抓到就清空剪贴簿.

怎么取得使用者按PrintScrn键

怎么知道有没有在按PrintScrn,我们可以使用User32.dll里面的GetAsyncKeyState方法来读取.

範例1

//加以下 using System.Runtime.InteropServices;//找不到型别或命名空间名称 'dllimport'
        //' 宣告 API GetAsyncKeyState        [DllImport("User32.dll")]        private static extern short GetAsyncKeyState(System.Windows.Forms.Keys vKey); // Keys enumeration                private void button1_Click(object sender, EventArgs e)        {            if (GetAsyncKeyState(Keys.PrintScreen) != 0)    //' GetAsyncKeyState 取得键盘状态            {                MessageBox.Show("(O)你按下的是PrintScreen");            }            else            {                MessageBox.Show("(X)你按下的是PrintScreen");            }        }

加个timer时时去扫

启动AP后,Print Scrn会失效.
winform,新增一个form去执行(在load时呼叫StopPrinScrn)

範例2

//加以下 using System.Runtime.InteropServices;//找不到型别或命名空间名称 'dllimport'using System.Timers;using System.Windows.Forms;
  class StopPrinScrn    {            //' 宣告 API GetAsyncKeyState        [DllImport("User32.dll")]        private static extern short GetAsyncKeyState(System.Windows.Forms.Keys vKey); // Keys enumeration                private System.Timers.Timer _TimersTimer;        private string keyBuffer = string.Empty;        private FrmMsg msg = new FrmMsg();        public StopPrinScrn(System.Windows.Forms.Form  frm)        {            this._TimersTimer = new System.Timers.Timer();            this._TimersTimer.Interval = 200;//1/5 秒 ( 可自行调整 )            this._TimersTimer.Elapsed += new System.Timers.ElapsedEventHandler(_TimersTimer_Elapsed);            this._TimersTimer.SynchronizingObject = frm;//目前的执行绪必须先设为单一执行绪 Apartment (STA) 模式,才能进行 OLE 呼叫。请确认您的 Main 函式上已经标记有 STAThreadAttribute。            this._TimersTimer.Start();                    }         void _TimersTimer_Elapsed(object sender, System.Timers.ElapsedEventArgs e)        {             if (GetAsyncKeyState(Keys.PrintScreen) != 0)    //' GetAsyncKeyState 取得键盘状态            {                 //做想做的事            }        }     }

让PrintScrn失效

        void _TimersTimer_Elapsed(object sender, System.Timers.ElapsedEventArgs e)        {             if (GetAsyncKeyState(Keys.PrintScreen) != 0)    //' GetAsyncKeyState 取得键盘状态            {                 Clipboard.Clear();//' 若按了 Print Screen 键, 则清空剪贴簿             }        }     }

将PrintScrn的图片存起来

       private void _TimersTimer_Elapsed(object sender, System.Timers.ElapsedEventArgs e)        {             if (GetAsyncKeyState(Keys.PrintScreen) != 0)    //' GetAsyncKeyState 取得键盘状态            {                    Save1();                Save2();                Clipboard.Clear();//' 若按了 Print Screen 键, 则清空剪贴簿              }         }        private void Save1()        {                        string ScreenPath =@"E:\123.jpg";            IDataObject d = Clipboard.GetDataObject();            if (d.GetDataPresent(DataFormats.Bitmap))            {                System.Drawing.Bitmap b = (System.Drawing.Bitmap)d.GetData(DataFormats.Bitmap);                b.Save(ScreenPath);            }        }        private void Save2()        {            string fileName = @"E:\" + getDatetimeflowUUID() + ".Png";             Clipboard.GetImage().Save(fileName, System.Drawing.Imaging.ImageFormat.Png);        }        private string  getDatetimeflowUUID()        {            DateTime date =  System.DateTime.Now ;            string ret = date.Year.ToString()+date.Month.ToString()+date.Day.ToString()+date.Hour.ToString()+date.Minute.ToString()+date.Second.ToString();            return ret;    }

关于作者: 网站小编

码农网专注IT技术教程资源分享平台,学习资源下载网站,58码农网包含计算机技术、网站程序源码下载、编程技术论坛、互联网资源下载等产品服务,提供原创、优质、完整内容的专业码农交流分享平台。

热门文章