iT邦幫忙

0

C# 讓PrintScrn失效 + 當按下PrintScrn時,將截取的畫面save

  • 分享至 

  • xImage
  •  

計時器跑跑跑,去看看有沒有人在按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;
    }

圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言