Windows API 呼叫示例

2022-07-20 07:36:12 字數 3751 閱讀 8800

ø

簡介 本文主要記錄windows api 的呼叫示例,因為這項技術並不常用,屬於c# 中比較孤僻或接觸底層的技術,並不常用。但是有時候也可以借助他完成一些c# 本身不能完成的功能,例如:通過控制代碼獲取其他程式資料,或者向作業系統發出指定的訊息等等。 1.

滑鼠事件api

1)函式原型:void

mouse_event

(long dwflags, long dx, long dy, long cbuttons, long dwextrainfo)

2)函式說明:該函式合成滑鼠的移動和點選事件,並將其插入到事件佇列中。

3)引數:

cbuttons,

正數表示向上滾動,負數表示向下滾動。

其他:參考

【windows api 函式參考手冊】

4)典型示例:

1.模擬滑鼠(滾輪)滾動事件(c# code)

1)函式宣告

[dllimport

("user32.dll"

)]private

static

extern

intmouse_event(

intdwflags,

intdx,

intdy,

intcbuttons,

intdwextrainfo);

2)呼叫**

const

intmouseeventf_wheel = 0x0800;

vartimer =

newsystem.threading.

timer

(new

timercallback

(o =>

", getthreadid()));

}),

null

, 0, 50);

3)執行結果

2.鉤子(hook) api

1)什麼是鉤子:鉤子實際是乙個處理訊息的程式段,通過系統呼叫,把它掛入系統。每當特定的訊息發出,在沒有到達目的視窗前,鉤子程式就先捕獲該訊息,亦即鉤子函式先得到控制權。這時鉤子函式即可以加工處理(改變)該訊息,也可以不作處理而繼續傳遞該訊息,還可以強制結束訊息的傳遞。

2)典型示例

1.使用滑鼠鉤子,獲取其他窗體控制代碼中的文字

1)函式宣告

//////

鉤子委託宣告。

///public

delegate

inthookproc

(int

ncode,

intptr

wparam,

intptr

lparam);

//////

安裝鉤子。

///[dllimport

("user32.dll"

, callingconvention =

callingconvention

.stdcall)]

public

static

extern

intptr

setwindowshookex(

intptr

idhook,

hookproc

lpfn,

intptr

pinstance,

uint

threadid);

//////

解除安裝鉤子。

///[dllimport

("user32.dll"

, callingconvention =

callingconvention

.stdcall)]

public

static

extern

bool

unhookwindowshookex(

intptr

phookhandle);

//////

傳遞鉤子(用於把攔截的訊息繼續傳遞下去,不然其他程式可能會得不到相應的訊息)。

///[dllimport

("user32.dll"

, callingconvention =

callingconvention

.stdcall)]

public

static

extern

intcallnexthookex(

intptr

phookhandle,

intncode,

intptr

wparam,

intptr

lparam);

//////

獲取游標位置,以螢幕座標表示。

///[dllimport

("user32.dll"

, entrypoint =

"getcursorpos"

)] public

static

extern

bool

getcursorpos(

refpoint

point);

//////

獲得包含指定點的視窗的控制代碼。

///[dllimport

("user32.dll"

, entrypoint =

"windowfrompoint"

)] public

static

extern

intptr

windowfrompoint(

point

p);

//////

將指定的訊息傳送到乙個或多個視窗。此函式為指定的視窗呼叫視窗程式,直到視窗程式處理完訊息再返回。

///[dllimport

("user32.dll"

, charset =

charset

.auto, setlasterror =

true

)] public

static

extern

bool

sendmessage(

intptr

hwnd,

intmsg,

intwparam, [

marshalas

(unmanagedtype

.lptstr)]

stringbuilder

lparam);

2)呼叫**

//////

滑鼠鉤子測試。

///public

void

mousehooktest()

", sbstr); }

return

callnexthookex(hhook, ncode, wparam, lparam);

//將訊息向下傳遞

}, currentprocess.mainmodule.baseaddress, 0);

//2.

解除安裝鉤子 if

(hhook !=

intptr

.zero) ,

null

, 60000, 0); }

else

showmessagebox(

"鉤子安裝失敗!"

); }

3)執行結果

C 呼叫windows api示例

這是執行結果 api函式是構築windws應用程式的基石,每一種windows應用程式開發工具,它提 供的底層函式都間接或直接地呼叫了windows api函式,同時為了實現功能擴 展,一般也都提供了呼叫windowsapi函式的介面,也就是說具備呼叫動態連線 庫的能力。visual c 和其它開發...

C 呼叫WINDOWS API 示例

一 呼叫windowsapi。c 下呼叫windows api方法如下 1 引入命名空間 using system.runtime.interopservices 2 引用需要使用的方法,格式 dllimport dll檔案 方法的宣告 dllimport user32.dll private st...

C 呼叫windowsAPI函式

一 呼叫格式 c 在呼叫windowsapi函式介面的時候有一套專門的呼叫流程 首先我們在呼叫api函式的時候必須引用命名空間interopservices using system.runtime.interopservices 例如我們想呼叫windows的kernel32.dll動態庫中的介面...