Windows API 呼叫示例
Ø 簡介
本文主要記錄 Windows API 的呼叫示例,因為這項技術並不常用,屬於 C# 中比較孤僻或接觸底層的技術,並不常用。但是有時候也可以藉助他完成一些 C# 本身不能完成的功能,例如:通過控制代碼獲取其他程式資料,或者向作業系統發出指定的訊息等等。
提示:關於 Windows API 的函式有很多,不需要將所有的函式都非常瞭解,筆者也只是將用到過的函式記錄下來,方便以後需要時可以快速編寫。
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 int mouse_event(int dwFlags, int dx, int dy,
2) 呼叫程式碼
const int MOUSEEVENTF_WHEEL = 0x0800;
var timer = new System.Threading.Timer(new TimerCallback(o =>
{
mouse_event(MOUSEEVENTF_WHEEL, 0, 0, 500, 0);
WriteLine(string.Format("滑鼠已滾動,執行緒:{0}", GetThreadId()));
}),
3) 執行結果
2. 鉤子(Hook) API
1) 什麼是鉤子:鉤子實際是一個處理訊息的程式段,通過系統呼叫,把它掛入系統。每當特定的訊息發出,在沒有到達目的視窗前,鉤子程式就先捕獲該訊息,亦即鉤子函式先得到控制權。這時鉤子函式即可以加工處理(改變)該訊息,也可以不作處理而繼續傳遞該訊息,還可以強制結束訊息的傳遞。
2) 典型示例
1. 獲取其他程式中的控制元件值