成人免费xxxxx在线视频软件_久久精品久久久_亚洲国产精品久久久_天天色天天色_亚洲人成一区_欧美一级欧美三级在线观看

在C#中聲明API函數(shù)

開發(fā) 后端
這里介紹在C#中聲明API函數(shù)需要使用.Net FrameWork SDK中的名字空間"System.Runtime.InteropServices",此名字空間提供了一系列的類來訪問COM對象,和調(diào)用本地的API函數(shù)。

如果你已經(jīng)了解了Visual Basic或者Delphi等語言是如何來實(shí)現(xiàn)對屏幕圖象捕獲的。那么對于C#來說就簡單多了,是如何實(shí)現(xiàn)這種功能的?本文就來探討一下這個問題。

一.程序設(shè)計(jì)開發(fā)及運(yùn)行環(huán)境:
1)微軟視窗2000服務(wù)器版
2).Net FrameWork SDK Beta 2

二.程序設(shè)計(jì)的關(guān)鍵步驟以及具體的實(shí)現(xiàn)方法:

1)首先要創(chuàng)建一個和當(dāng)前屏幕大小相同的Bitmap對象:

要實(shí)現(xiàn)此操作,首先就要現(xiàn)獲得當(dāng)前顯示器的DC,然后根據(jù)此DC來創(chuàng)建Graphic對象,再由此Graphic對象產(chǎn)生此位圖對象。這樣產(chǎn)生的位圖對象才是和當(dāng)前屏幕大小相一致的。由于要獲得顯示器的DC,利用.Net的類庫是無法實(shí)現(xiàn)的,這需要調(diào)用一個Windows的 API函數(shù)。我們知道視窗所有API都封裝在"Kernel"、"User "和"GDI"三個庫中文件中:其中"Kernel",他的庫名為 "KERNEL32.DLL"。"User "這個類庫在Win32中名叫 "USER32.DLL"。 它主要管理全部的用戶接口。譬如:窗口、菜單 、對話框、圖標(biāo)等等。"GDI"(圖象設(shè)備接口),它在Win32中的庫名為:"GDI32.dll",要獲得顯示器的DC,所調(diào)用的API函數(shù) --CreateDC ( ),就被封裝在此類庫中。而要在C#中聲明API函數(shù)需要使用.Net FrameWork SDK中的名字空間"System.Runtime.InteropServices",此名字空間提供了一系列的類來訪問COM對象,和調(diào)用本地的API函數(shù)。下面是在C#中聲明API函數(shù):

  1. [ System.Runtime.InteropServices.DllImportAttribute ( "gdi32.dll" ) ]  
  2. private static extern IntPtr CreateDC (  
  3. string lpszDriver , // 驅(qū)動名稱  
  4. string lpszDevice , // 設(shè)備名稱  
  5. string lpszOutput , // 無用,可以設(shè)定位"NULL"  
  6. IntPtr lpInitData // 任意的打印機(jī)數(shù)據(jù)  
  7. ) ;  

在C#中聲明API函數(shù),就可以創(chuàng)建和顯示器大小一致的位圖對象,具體實(shí)現(xiàn)語句如下:

  1. IntPtr dc1 = CreateDC ( "DISPLAY" , null , null , ( IntPtr ) null ) ;  
  2. //創(chuàng)建顯示器的DC  
  3. Graphics g1 = Graphics.FromHdc ( dc1 ) ;  
  4. //由一個指定設(shè)備的句柄創(chuàng)建一個新的Graphics對象  
  5. MyImage = new Bitmap ( Screen.PrimaryScreen.Bounds.Width , 
    Screen.PrimaryScreen.Bounds.Height , g1 ) ;  
  6. //根據(jù)屏幕大小創(chuàng)建一個與之相同大小的Bitmap對象  

2)根據(jù)此位圖創(chuàng)建一個和其一樣的Graphic對象:
通過下面代碼就可以實(shí)現(xiàn)此功能:

  1. Graphics g2 = Graphics.FromImage ( MyImage ) ;  

3)獲得當(dāng)前屏幕和位圖的句柄:

獲得此二個對象的句柄是為了下一步實(shí)現(xiàn)對當(dāng)前屏幕圖象的捕獲,程序中實(shí)現(xiàn)的具體捕獲的方法是把當(dāng)前屏幕捕獲到已經(jīng)創(chuàng)建的位圖對象中。具體實(shí)現(xiàn)代碼如下:

  1. //獲得屏幕的句柄  
  2. IntPtr dc3 = g1.GetHdc ( ) ;  
  3. //獲得位圖的句柄  
  4. IntPtr dc2 = g2.GetHdc ( ) ;  
  5. //把當(dāng)前屏幕捕獲到位圖對象中  

4)捕獲當(dāng)前屏幕:

我們是通過當(dāng)前屏幕保存到創(chuàng)建的位圖對象中來實(shí)現(xiàn)的,具體的實(shí)現(xiàn)過程中是通過Windows的一個API函數(shù)--Bitblt。我想大多數(shù)程序員對此API函數(shù)一定不陌生,因?yàn)樵赪indows的圖象編程中,會在很多地方使用到此函數(shù)。這個API函數(shù)和上面介紹的那個API函數(shù)一樣,也是被封裝在"GDI32.dll"中的,下面是在C#中聲明API函數(shù):

  1. [ System.Runtime.InteropServices.DllImportAttribute ( "gdi32.dll" ) ]  
  2. private static extern bool BitBlt (  
  3. IntPtr hdcDest , // 目標(biāo)設(shè)備的句柄  
  4. int nXDest , // 目標(biāo)對象的左上角的X坐標(biāo)  
  5. int nYDest , // 目標(biāo)對象的左上角的X坐標(biāo)  
  6. int nWidth , // 目標(biāo)對象的矩形的寬度  
  7. int nHeight , // 目標(biāo)對象的矩形的長度  
  8. IntPtr hdcSrc , // 源設(shè)備的句柄  
  9. int nXSrc , // 源對象的左上角的X坐標(biāo)  
  10. int nYSrc , // 源對象的左上角的X坐標(biāo)  
  11. System.Int32 dwRop // 光柵的操作值  
  12. ) ;  

5)把當(dāng)前屏幕保存到硬盤,并釋放句柄:

  1. g1.ReleaseHdc ( dc3 ) ;  
  2. //釋放屏幕句柄  
  3. g2.ReleaseHdc ( dc2 ) ;  
  4. //釋放位圖句柄  
  5. MyImage.Save ( "c:\\MyJpeg.jpg" , ImageFormat.Jpeg ) ;  

我們可以根據(jù)自己的要求把當(dāng)前屏幕以不同的文件格式來保存,在本文中介紹的程序是以"jpg"文件來保存的,你可以通過修改"Save"方法的第二個參數(shù)來改變保存到硬盤的文件類型,譬如,如果第二個參數(shù)為"ImageFormat.Gif",那么你保存到硬盤的文件就為"GIF"文件了。對于其他文件格式可以參考.Net FrameWork SDK,里面有詳細(xì)的介紹。

【編輯推薦】

  1. 淺談C# Connection對象
  2. C#實(shí)現(xiàn)PrintPage方法
  3. 利用Visual C#和C#語言特性
  4. C#管道技術(shù)學(xué)習(xí)經(jīng)驗(yàn)
  5. 概述C#復(fù)合控件構(gòu)建
責(zé)任編輯:佚名 來源: 博客園
相關(guān)推薦

2009-08-03 13:34:57

C#調(diào)用Windows

2009-07-31 16:12:10

Windows APIC#

2009-08-28 15:45:32

C#操作Win32 A

2009-09-01 18:05:17

C#類型聲明

2009-07-31 16:25:29

C#回調(diào)函數(shù)API應(yīng)用

2009-09-02 14:18:08

C#聲明COM接口

2009-08-11 14:16:00

Winform調(diào)用WEC#

2009-07-31 15:47:20

Win32 APIC#

2009-07-31 13:48:34

C# eval()函數(shù)

2009-08-11 14:26:56

C#動態(tài)調(diào)用WebSe

2009-09-04 09:34:03

Java和C#頂層聲明

2009-09-02 16:41:56

C#聲明數(shù)組

2009-07-31 16:06:50

成員函數(shù)構(gòu)造函數(shù)C#

2009-08-31 10:28:00

C# CreateEm

2009-08-17 13:49:20

C#中調(diào)用Window

2009-08-31 09:59:13

C# CreateEm

2009-08-31 10:14:49

C# CreateEm

2009-09-03 17:57:06

C#聲明事件

2009-08-21 10:43:19

FlyTcpFrame

2024-11-20 17:28:00

C#CPU代碼
點(diǎn)贊
收藏

51CTO技術(shù)棧公眾號

主站蜘蛛池模板: 国产在线1 | 亚洲一区久久 | 久久88| 一级毛片在线播放 | 成av人电影在线 | 激情欧美一区二区三区 | 欧美成人hd | 国产精品无 | 国产激情在线 | 高清色视频| 国产精品免费在线 | 中文字幕福利 | 精品二区 | 国产一区免费视频 | 日本午夜一区二区三区 | 香蕉久久a毛片 | 国产日韩久久久久69影院 | 99久久精品免费看国产免费软件 | 国产99久久精品一区二区永久免费 | 久久精品一 | 国产欧美一区二区在线观看 | 久久久久久久久中文字幕 | 久久麻豆精品 | 免费毛片在线 | 国产婷婷综合 | 久在线 | 九九免费视频 | 喷水毛片| 亚洲欧美一区二区三区在线 | 国产精品久久 | 成人影院免费视频 | 日韩精品视频在线播放 | 国产精品毛片久久久久久久 | 精品美女久久久久久免费 | 中文字幕乱码一区二区三区 | 毛片网站在线观看 | 欧美日韩综合一区 | 亚洲福利在线观看 | 中文字幕在线视频免费观看 | 久久久久国色av免费观看性色 | 久久久国产精品网站 |