ø
簡介 本文主要記錄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動態庫中的介面...