如何使用C 操作WinAPI

2021-09-23 20:15:02 字數 2683 閱讀 2652

windows api是對windows作業系統的api函式,在c#中呼叫windows api的實質是託管**對非託管**的呼叫。

主要使用的格式就是:

using

system.runtime.interopservices;

namespace

testwinapi1

[dllimport(

"kernel32

", charset

=charset.ansi)]

public

static

extern

bool

beep(

intfrequery,

intduration);}}

其中的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:

推薦的入門教程:

使用winapi的難點:

1.c++中的各個資料型別如何對應到c#中?

使用c#中的那個資料型別對應那個c++的資料型別沒有唯一的規定,但是應該站在記憶體使用的角度,選擇記憶體占用大小一致。

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

2.如果c++中定義了資料結構如何操作?

我們也應該在c#中定義與之儲存結構一致的資料結構

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

namespace

testwinapi1

class

program

[dllimport(

"user32.dll

", charset

=charset.auto)]

public

static

extern

bool

getcursorpos(

refpoint point);

[dllimport(

"user32.dll

", charset

=charset.auto, exactspelling

=true

)]public

static

extern

intptr getcursor();

[dllimport(

"user32")]

public

static

extern

intsetcursorpos(

intx,

inty);

[dllimport(

"user32.dll")]

static

extern

void

mouse_event(

uint

dwflags,

uint

dx,

uint

dy,

uint

dwdata,

intdwextrainfo);

[flags]

public

enum

mouseeventflags:

uint

//////

checks for the currently active window then simulates a mouseclick

///

///which button to press (left middle up)

///the window to send to

public

static

void

mouseclick(

string

button,

string

windowname)

//////

simulates a mouse click see

///

///which button to press (left middle up)

public

static

void

mouseclick(

string

button)}}

} 簡要描述:

使用了mouse_event,getcursorpos,setcursorpos三個api

mouse_event((uint)mouseeventflags.leftdown|(uint)mouseeventflags.leftup, 0, 0, 0, 0);

代表了單擊左鍵的動作

int setright = setcursorpos(27, 881); 中的27,881是螢幕上的絕對位置

ps:使用api可以做一些遊戲的小外掛程式,比如模擬滑鼠,鍵盤的操作...嘿嘿

如何使用C 操作WinAPI

windows api是對windows作業系統的api函式,在c 中呼叫windows api的實質是託管 對非託管 的呼叫。主要使用的格式就是 using system.runtime.interopservices namespace testwinapi1 dllimport kernel3...

WinAPI程式如何使用CString

cstring 是乙個很強大的類,功能強大,可以節省很多 可是cstring好像在mfc或atl中才可以使用,winapi程式可以使用這個類嗎?其實也是可以的。只需要引入 atlstr.h 標頭檔案即可。include測試 環境 vs2010 c win32 api程式 include includ...

win API 操作 ini 檔案

1.getprivateprofileint 從私有初始化檔案獲取整型數值 2.getprivateprofilestring 從私有初始化檔案獲取字串型值 3.writeprivateprofilestring寫字串到私有初始化檔案 4.getprofileint從win.ini 獲取整數值 5....