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

在C#中聲明API函數

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

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

一.程序設計開發及運行環境:
1)微軟視窗2000服務器版
2).Net FrameWork SDK Beta 2

二.程序設計的關鍵步驟以及具體的實現方法:

1)首先要創建一個和當前屏幕大小相同的Bitmap對象:

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

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

在C#中聲明API函數,就可以創建和顯示器大小一致的位圖對象,具體實現語句如下:

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

2)根據此位圖創建一個和其一樣的Graphic對象:
通過下面代碼就可以實現此功能:

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

3)獲得當前屏幕和位圖的句柄:

獲得此二個對象的句柄是為了下一步實現對當前屏幕圖象的捕獲,程序中實現的具體捕獲的方法是把當前屏幕捕獲到已經創建的位圖對象中。具體實現代碼如下:

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

4)捕獲當前屏幕:

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

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

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

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

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

【編輯推薦】

  1. 淺談C# Connection對象
  2. C#實現PrintPage方法
  3. 利用Visual C#和C#語言特性
  4. C#管道技術學習經驗
  5. 概述C#復合控件構建
責任編輯:佚名 來源: 博客園
相關推薦

2009-07-31 16:12:10

Windows APIC#

2009-08-03 13:34:57

C#調用Windows

2009-08-28 15:45:32

C#操作Win32 A

2009-09-02 14:18:08

C#聲明COM接口

2009-09-01 18:05:17

C#類型聲明

2009-07-31 16:25:29

C#回調函數API應用

2009-08-11 14:16:00

Winform調用WEC#

2009-07-31 15:47:20

Win32 APIC#

2009-07-31 13:48:34

C# eval()函數

2009-07-31 16:06:50

成員函數構造函數C#

2009-08-11 14:26:56

C#動態調用WebSe

2009-09-02 16:41:56

C#聲明數組

2009-09-04 09:34:03

Java和C#頂層聲明

2009-08-17 13:49:20

C#中調用Window

2009-08-31 09:59:13

C# CreateEm

2009-08-31 10:14:49

C# CreateEm

2009-08-31 10:28:00

C# CreateEm

2009-08-21 10:43:19

FlyTcpFrame

2024-11-20 17:28:00

C#CPU代碼

2009-07-31 14:26:38

JavaScript函C#函數
點贊
收藏

51CTO技術棧公眾號

主站蜘蛛池模板: 日韩精品在线观看一区二区 | 久久久精品国产 | 在线播放国产一区二区三区 | 亚洲日日夜夜 | 国产激情视频网站 | 国产伦精品 | 久久精品国产亚洲一区二区三区 | 国产91亚洲精品 | 久久免费高清 | 亚洲欧洲视频 | 久久免费精品视频 | 久久精品视频亚洲 | 91国产在线播放 | 欧美黄视频 | 一级黄色生活视频 | 国产一区二区在线视频 | 精品1区 | 97超在线视频 | 欧美精品一区在线发布 | 国产精品久久久久久久久久久免费看 | 日韩午夜网站 | 午夜电影网 | 国内自拍视频在线观看 | 97超碰人人草| 精品国产乱码久久久久久图片 | av在线成人| 亚洲视频在线看 | 久久激情五月丁香伊人 | 成人一区av | 久草在线视频中文 | 国产精品久久久久久久久久妞妞 | 精品欧美一区二区三区精品久久 | 黄色毛片在线观看 | 一区二区av| 亚洲欧美日韩久久 | 久久极品 | 国产日韩一区二区三免费 | 精品亚洲二区 | 91欧美激情一区二区三区成人 | 一级视频黄色 | 国产一区二区三区 |