如何使用C#操作WinAPI


Windows API是對Windows操作系統的API函數,在C#中調用Windows API的實質是托管代碼對非托管代碼的調用。

主要使用的格式就是:

 

復制代碼
using System.Runtime.InteropServices;

namespace TestWinAPI1
{
class Program
{
static void Main(string[] args)
{
Beep(100, 100);
}


[DllImport("kernel32", CharSet = CharSet.Ansi)]
public static extern bool Beep(int frequery, int duration);
}
}
復制代碼

 

其中的Beep就是Win API的調用,使用[DllImport("kernel32")]屬性進行調用。

這個函數在MSDN中的原本定義是:

 

C++ 
BOOL WINAPI Beep(
__in DWORD dwFreq,
__in DWORD dwDuration
);

 

我們想要調用BeepAPI,就必須:

1.將DWORD對應為C#中的int,相應的參數個數和位置設置正確

2.調用的函數名和WinAPI中的函數名一致

這樣,我們在C#中就可以使用Win API對Windows進行操作。

 

這里幾個資源是使用WindowsAPI不可或缺的:

MSDN:http://msdn.microsoft.com/en-us/library/ee663300(VS.85).aspx

推薦的入門教程:http://www.docin.com/p-4510006.html

 

 

使用WINAPI的難點:

 

1.C++中的各個數據類型如何對應到C#中?

使用C#中的那個數據類型對應那個C++的數據類型沒有唯一的規定,但是應該站在內存使用的角度,選擇內存占用大小一致。

當C++中存在指針的時候,我們可以使用ref來傳遞指針

 

2.如果C++中定義了數據結構如何操作?

我們也應該在C#中定義與之存儲結構一致的數據結構

 

以下是用WinAPI 模擬鼠標定位和單機左鍵的操作:

 

代碼

 

簡要描述:

使用了mouse_event,GetCursorPos,SetCursorPos三個API

mouse_event((uint)MouseEventFlags.LEFTDOWN|(uint)MouseEventFlags.LEFTUP, 0, 0, 0, 0);

代表了單擊左鍵的動作

int setRight = SetCursorPos(27, 881); 中的27,881是屏幕上的絕對位置


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM