亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb

首頁 > 編程 > C# > 正文

C#實現QQ截圖功能及相關問題

2019-10-29 21:08:45
字體:
來源:轉載
供稿:網友

對于QQ截圖,肯定是早就有認識了,只是一直沒有去認真觀察這個操作的具體實現步驟。所以這里將自己的記憶中的步驟簡單的寫一下:

習慣性用QQ或者TIM的人,一般是使用Ctrl+Alt+A  快捷鍵(熱鍵)快速實現截圖。

  • Ctrl+Alt+A  進入截圖模式
  • 鼠標左鍵點擊
  • 鼠標拖動對截圖去進行選取
  • 鼠標左鍵彈起
  • 雙擊截圖區域  保存圖片到剪貼板
  • 鼠標右鍵點擊
  • 退出截圖模式

C#,QQ截圖,截圖

因為考慮到截圖模式的時候  一般只能顯示一個窗體  所以就考慮使用單例模式  在ScreenBody窗體中實現以下代碼

1:創建單例 

private static ScreenBody screenBody=null;

2:私有化構造函數

private ScreenBody(){InitializeComponent();}

3:創建靜態方法

private static ScreenBody GetSingle(){if(screenBody==null){screenBody=new ScreenBody();}return screenBody;}

進一步討論一下在Main窗體中的調用  Main中添加了一個button 命名為btnCutter 

private void btnCutter_Click(object sender,EventArgs e){ //新建一個和屏幕大小相同的圖片img 也可以用BitMapimage img=new Bitmap(Screen.AllScreens[0].Bounds.Width,Screen.AllScreens[0].Bounds.Height);//創建一個畫板 讓我們可以在畫板上畫圖 大小和屏幕大小一樣大Graphics g=Graphics.FromImage(img); //將屏幕圖片拷貝到空白圖片imgg.CopyFromScreen(new Point(0,0),new Point(0,0),Screen.AllScreens[0].Bounds.Size);//創建截圖窗體ScreenBody body=ScreenBody.GetSingle();//指示窗體的背景圖片為屏幕圖片body.BackGroundImage=img;body.ShowDialog();}

對于窗體ScreenBody

聲明全局變量

private bool CatchStart;//判斷鼠標是否按下private bool CatchFinished;//判斷矩形是否繪制完成private Point DownPoint;//鼠標按下的點private Image baseMap;//最基本的圖片private Rectangle CatchRectangle;  

必須要實現的那幾個事件

鼠標按下MouseDown

 private void ScreenBody_MouseDown(object sender, MouseEventArgs e)  {   //鼠標左鍵按下就是開始畫圖,也就是截圖   if (e.Button == MouseButtons.Left)   {    if (CatchStart == false)    {     CatchStart = true;     //保存此時的坐標     DownPoint = new Point(e.X, e.Y);    }   }  }

鼠標移動 MouseMove

 private void ScreenBody_MouseMove(object sender, MouseEventArgs e)  {   //確保截圖開始   if (CatchStart)   {    //新建一個圖片,讓它與屏幕圖片相同    Bitmap copyBmp = (Bitmap)baseMap.Clone();    //鼠標按下時的坐標    Point newPoint = new Point(DownPoint.X, DownPoint.Y);    //新建畫板和畫筆    Graphics g = Graphics.FromImage(copyBmp);    Pen p = new Pen(Color.Azure, 1);//畫筆的顏色為azure 寬度為1    //獲取矩形的長度     int width = Math.Abs(e.X - DownPoint.Y);    int height = Math.Abs(e.Y - DownPoint.Y);    if (e.X < DownPoint.X)    {     newPoint.X = e.X;    }    if (e.Y < DownPoint.Y)    {     newPoint.Y = e.Y;    }    CatchRectangle = new Rectangle(newPoint, new Size(width, height));    g.DrawRectangle(p, CatchRectangle);    //釋放目前的畫板    g.Dispose();    p.Dispose();    //從當前窗體創建新的畫板    Graphics g1 = this.CreateGraphics();    //將剛剛所畫的圖片畫到截圖窗體上去    //為什么不直接在當前窗體畫圖呢???    //如果直接解決將矩形畫在窗體上,會造成圖片抖動而且有多個矩形    //這樣實現也屬于二次緩沖技術    g1.DrawImage(copyBmp, new Point(0, 0));    g1.Dispose();    //釋放拷貝圖片 防止內存被大量的消耗    copyBmp.Dispose();   }

鼠標彈起 Mouseup

 /// <summary>  /// 鼠標左鍵彈起事件  /// </summary>  /// <param name="sender"></param>  /// <param name="e"></param>  private void ScreenBody_MouseUp(object sender, MouseEventArgs e)  {   if (e.Button == MouseButtons.Left)   {    //如果截圖已經開始,鼠標左鍵彈起設置截圖完成    if (CatchStart)    {     CatchStart = false;     CatchFinished = true;    }   }  }

鼠標雙擊

 private void ScreenBody_MouseDoubleClick(object sender, MouseEventArgs e)  {   if (e.Button==MouseButtons.Left&&CatchFinished)   {    //新建一個矩形大小相同的空白圖片    Bitmap CatcheBmp = new Bitmap(CatchRectangle.Width, CatchRectangle.Height);    Graphics g = Graphics.FromImage(CatcheBmp); ;       //把basemap中指定的部分按照指定大小畫到空白圖片上    //CatchRectangle指定的baseMap中指定的部分    //第二個參數指定繪制到空白圖片的位置和大小    //畫完后CatchedBmp不再是空白圖片,而是具有與截取的圖片一樣的內容    g.DrawImage(baseMap, new Rectangle(0, 0, CatchRectangle.Width, CatchRectangle.Height));    //將圖片保存到剪切板中    Clipboard.SetImage(CatcheBmp);    g.Dispose();    CatchFinished = false;    this.BackgroundImage = baseMap;    CatcheBmp.Dispose();    this.DialogResult = DialogResult.OK;    this.Close();   }  }

鼠標右鍵 退出截圖

/// <summary>  /// 鼠標右鍵點擊結束截圖  /// </summary>  /// <param name="sender"></param>  /// <param name="e"></param>  private void ScreenBody_MouseClick(object sender, MouseEventArgs e)  {   if (e.Button == MouseButtons.Right)   {    this.DialogResult = DialogResult.OK;    this.Close();   }  }

最復雜的熱鍵注冊  自己也是去網上看的  Main窗體中

聲明枚舉

[FlagsAttribute] public enum KeyModifiers {  None = 0,  Ctrl = 2,  Shift = 4,  WindowsKey = 8 }

然后在類中編輯一下代碼

 //在C#中引用命名空間System.Runtime.InteropServices;來加載非托管類user32.dll  /*  * RegisterHotKey函數原型及說明:  * BOOL RegisterHotKey(  * HWND hWnd,   // window to receive hot-key notification  * int id,   // identifier of hot key  * UINT fsModifiers, // key-modifier flags  * UINT vk   // virtual-key code);  * 參數 id為你自己定義的一個ID值  * 對一個線程來講其值必需在0x0000 - 0xBFFF范圍之內,十進制為0~49151  * 對DLL來講其值必需在0xC000 - 0xFFFF 范圍之內,十進制為49152~65535  * 在同一進程內該值必須唯一參數 fsModifiers指明與熱鍵聯合使用按鍵  * 可取值為:MOD_ALT MOD_CONTROL MOD_WIN MOD_SHIFT參數,或數字0為無,1為Alt,2為Control,4為Shift,8為Windows  * vk指明熱鍵的虛擬鍵碼  */  [System.Runtime.InteropServices.DllImport("user32.dll")] //申明API函數  public static extern bool RegisterHotKey(   IntPtr hWnd, // handle to window   int id, // hot key identifier   uint fsModifiers, // key-modifier options   Keys vk // virtual-key code  );  [System.Runtime.InteropServices.DllImport("user32.dll")] //申明API函數  public static extern bool UnregisterHotKey(   IntPtr hWnd, // handle to window   int id // hot key identifier  );

再接著

 private void Form1_Load(object sender, EventArgs e)  {   uint ctrlHotKey = (uint)(KeyModifiers.Alt | KeyModifiers.Ctrl);   // 注冊熱鍵為Alt+Ctrl+C, "100"為唯一標識熱鍵   RegisterHotKey(Handle, 100, ctrlHotKey, Keys.A);  }  //熱鍵按下執行的方法  private void GlobalKeyProcess()  {   this.WindowState = FormWindowState.Minimized;   //窗口最小化需要一定的時間 使用線程   Thread.Sleep(200);   btnCutter.PerformClick();  }  protected override void WndProc(ref Message m)  {   //如果m.Msg的值為0x0312那么表示用戶按下了熱鍵   const int WM_HOTKEY = 0x0312;   switch (m.Msg)   {    case WM_HOTKEY:     if (m.WParam.ToString()=="100")     {      GlobalKeyProcess();     }     break;    default:     break;   }   base.WndProc(ref m);  }  private void Form1_FormClosing(object sender, FormClosingEventArgs e)  {   // 卸載熱鍵   UnregisterHotKey(Handle, 100);  }

熱鍵的功能就能實現。但是我遇到了很多問題  首先是basemap  沒有初始化值

C#,QQ截圖,截圖C#,QQ截圖,截圖

這些問題  還有待解決?。。?/p>

以上就是本文的全部內容,希望對大家的學習有所幫助,也希望大家多多支持VEVB武林網。


注:相關教程知識閱讀請移步到c#教程頻道。
發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb
日韩中文字幕第一页| 一本色道久久88综合日韩精品| 久久久精品一区二区三区| 国产精品91一区| 精品久久久一区| 国产亚洲一区精品| 欧美成人精品h版在线观看| 久久黄色av网站| 欧美精品国产精品日韩精品| 欧美激情精品久久久久久蜜臀| 日韩中文在线中文网在线观看| 伊人伊人伊人久久| 亚洲亚裔videos黑人hd| 亚洲欧美日韩在线高清直播| 日本高清不卡在线| 亚洲最新在线视频| www.亚洲一二| 国产精品久久一区| 91高清视频在线免费观看| 日本成人在线视频网址| 久热99视频在线观看| 国产成人啪精品视频免费网| 欧美日韩国产色视频| 日韩精品在线免费播放| 国产在线拍偷自揄拍精品| 奇米成人av国产一区二区三区| 亚洲www永久成人夜色| 一区二区欧美亚洲| 久久av红桃一区二区小说| 欧美日韩免费一区| 亚洲欧洲在线观看| 国产一区二区日韩精品欧美精品| 狠狠躁18三区二区一区| 欧美亚洲国产视频| 国内精品久久久久久影视8| 日韩精品视频观看| 成人亚洲综合色就1024| 高清欧美性猛交xxxx| 亚洲性日韩精品一区二区| 亚洲免费视频在线观看| 国产精欧美一区二区三区| 成人羞羞国产免费| 欧美日韩一区二区在线| 91午夜理伦私人影院| 久久国产精品99国产精| 欧美日韩国产成人在线观看| 亚洲最大av在线| 久久夜色撩人精品| 亚洲综合色激情五月| 国产精品视频永久免费播放| 亚洲男人第一av网站| 亚洲综合中文字幕68页| 国产精品久久久91| 2019中文字幕免费视频| 欧美一区二粉嫩精品国产一线天| 午夜欧美不卡精品aaaaa| 久久777国产线看观看精品| 欧美在线亚洲在线| 成人免费观看a| 久久影视电视剧免费网站清宫辞电视| 在线精品视频视频中文字幕| 欧美wwwwww| 中文字幕视频一区二区在线有码| 久久视频在线免费观看| 成人久久一区二区三区| 98精品国产高清在线xxxx天堂| 66m—66摸成人免费视频| 欧美极品少妇与黑人| 日韩视频欧美视频| 亚洲性日韩精品一区二区| 久久久91精品国产一区不卡| 2019亚洲日韩新视频| 国产丝袜高跟一区| 国产精品视频网站| 日本久久久久久久久久久| 欧美三级欧美成人高清www| 欧美成人免费小视频| 韩国v欧美v日本v亚洲| 日本一区二区不卡| 欧美最顶级丰满的aⅴ艳星| 亚洲国产精彩中文乱码av在线播放| 午夜伦理精品一区| 国产一区二区三区视频| 疯狂蹂躏欧美一区二区精品| 日韩免费在线播放| 久久久久亚洲精品国产| 亚洲人成电影在线| 欧美日韩福利在线观看| 亚洲黄色有码视频| 伊人久久久久久久久久久久久| 欧美激情在线有限公司| 日韩美女免费视频| 亚洲精品成人免费| 久久精品亚洲热| 亚洲精品国产拍免费91在线| 国产日韩欧美在线播放| 亚洲国产日韩欧美综合久久| 亚洲第一精品自拍| 最近2019中文字幕第三页视频| 国产+人+亚洲| 亚洲性夜色噜噜噜7777| 国产精品99久久久久久白浆小说| 国产精品久在线观看| 中文字幕亚洲字幕| 国产中文日韩欧美| 性亚洲最疯狂xxxx高清| 久久久久久久久久久91| 亚洲欧洲偷拍精品| 91在线免费网站| 欧美国产日本在线| 国产精品久久久久999| 欧美另类在线观看| 96精品视频在线| 日日噜噜噜夜夜爽亚洲精品| 国产98色在线| 亚洲精品在线不卡| 国产欧美日韩高清| 青青青国产精品一区二区| 97久久精品视频| 国产噜噜噜噜噜久久久久久久久| 色综久久综合桃花网| 国产精品久久婷婷六月丁香| 国产精品久久久久久久7电影| 国产精品偷伦免费视频观看的| 日韩中文字幕视频| 日韩欧美在线中文字幕| 色悠久久久久综合先锋影音下载| 中文字幕9999| 最近2019年中文视频免费在线观看| 91精品国产高清自在线| 国产国产精品人在线视| 成人xvideos免费视频| 国产mv免费观看入口亚洲| 久久成人国产精品| 国产精品ⅴa在线观看h| 精品人伦一区二区三区蜜桃网站| 国产欧美精品一区二区| 日韩成人在线电影网| 日韩精品视频免费在线观看| 国产精品久久久久久av福利软件| 亚洲精选在线观看| 欧美在线视频一二三| 国产精品视频网| www.亚洲一二| 国产亚洲人成网站在线观看| 成人精品在线观看| 日韩精品一区二区视频| 俺去啦;欧美日韩| 精品国产91久久久久久老师| 欧美黑人一级爽快片淫片高清| 热草久综合在线| 日本免费在线精品| 国产亚洲精品激情久久| 亚洲乱码国产乱码精品精| 91豆花精品一区| 国产在线视频不卡| 亚洲成年人在线| 国产成+人+综合+亚洲欧洲| 国产美女高潮久久白浆| 国产视频欧美视频| 一区二区三区在线播放欧美| 88国产精品欧美一区二区三区| 久久免费精品日本久久中文字幕| 亚洲女同性videos|