计时器跑跑跑,去看看有没有人在按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; }