計時器跑跑跑,去看看有沒有人在按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");
}
}
啟動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 取得鍵盤狀態
{
//做想做的事
}
}
}
void _TimersTimer_Elapsed(object sender, System.Timers.ElapsedEventArgs e)
{
if (GetAsyncKeyState(Keys.PrintScreen) != 0) //' GetAsyncKeyState 取得鍵盤狀態
{
Clipboard.Clear();//' 若按了 Print Screen 鍵, 則清空剪貼簿
}
}
}
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;
}