/// <summary>
/// 鉤子安裝
/// </summary>
/// <param name="HookType">表示鉤子類型,它是和鉤子函數類型一一對應的。如,WH_KEYBOARD,WH_MOUSE。</param>
/// <param name="methodAddress">鉤子函數入口地址</param>
/// <param name="handler">鉤子函數所在的實例的句柄。對於線程鉤子,該參數爲NULL;對於系統鉤子,該參數爲鉤子函數所在的DLL句柄。 (系統鉤子必須在DLL中)</param>
/// <param name="dwThread">指定鉤子所監視的線程的線程號。對於全局鉤子,該參數爲NULL。其中,全局鉤子函數必須包含在DLL(動態鏈接庫)中,而線程專用鉤子還可以包含在可執行文件中。</param>
/// <returns>所安裝的鉤子句柄</returns>
[DllImport("user32.dll", CharSet = CharSet.Auto, CallingConvention = CallingConvention.StdCall, SetLastError = true)]
public static extern int SetWindowsHookEx(int HookType, procEntry methodAddress,IntPtr handler,int dwThread);
/// <summary>
///交給下一個鉤子
/// </summary>
/// <param name="hhk">鉤子句柄</param>
/// <param name="nCode"></param>
/// <param name="wParam"></param>
/// <param name="lParam"></param>
/// <returns></returns>
[DllImport("user32.dll", CharSet = CharSet.Auto, CallingConvention = CallingConvention.StdCall, SetLastError = true)]
public static extern IntPtr CallNextHookEx(IntPtr hhk, int nCode, Int32 wParam, IntPtr lParam);
/// <summary>
/// 釋放鉤子
/// </summary>
/// <param name="handler">鉤子id</param>
/// <returns></returns>
[DllImport("user32.dll", CharSet = CharSet.Auto, CallingConvention = CallingConvention.StdCall, SetLastError = true)]
public static extern bool UnhookWindowsHookEx(IntPtr handler);
/// <summary>
/// 取得當前線程的線程id
/// </summary>
/// <returns></returns>
[DllImport("kernel32.dll")]
public static extern int GetCurrentThreadId();
/// <summary>
/// 交換鼠標左右鍵
/// </summary>
/// <param name="bswap">非0:交換/0:恢復</param>
/// <returns></returns>
[DllImport("user32.dll", CharSet = CharSet.Auto, CallingConvention = CallingConvention.StdCall, SetLastError = true)]
public extern static int SwapMouseButton(int bswap);
/// <summary>
/// 獲取鼠標雙擊間隔
/// </summary>
/// <returns></returns>
[DllImport("user32.dll", CharSet = CharSet.Auto, CallingConvention = CallingConvention.StdCall, SetLastError = true)]
public extern static int GetDoubleClickTime();
/// <summary>
/// 隱藏和顯示鼠標
/// </summary>
/// <param name="bShow"></param>
/// <returns></returns>
[DllImport("user32.dll", CharSet = CharSet.Auto, CallingConvention = CallingConvention.StdCall, SetLastError = true)]
public extern static bool ShowCursor(bool bShow);
/// <summary>
/// 模擬鼠標事件
/// </summary>
/// <param name="dwFlags">指定鼠標動作</param>
/// <param name="dx">沿x軸移動的像素</param>
/// <param name="dy">沿y軸移動的像素</param>
/// <param name="dwData">當模擬滑輪動作時使用,正值則滑輪向前轉動,負值則滑輪向後轉動</param>
/// <param name="dwExtraInfo">指定與鼠標事件相關的附加32位值</param>
/// <returns></returns>
[DllImport("user32.dll", CharSet = CharSet.Auto, CallingConvention = CallingConvention.StdCall, SetLastError = true)]
public extern static IntPtr mouse_event(Int32 dwFlags, Int32 dx, Int32 dy, Int32 dwData, Int32 dwExtraInfo);
這些API沒有使用過:
[DllImport("user32.dll", CharSet = CharSet.Auto, CallingConvention = CallingConvention.StdCall, SetLastError = true)]
public extern static bool SystemParametersInfo(uint uiAction, uint uiParam, any pvParam, uint fWinIni);
功能:查看或修改系統參數
uiAction:該參數指定要查詢或設置的系統級參數。
uiParam:uiParam 在參數說明中所有爲ulParam均爲錯誤。
pvParam:與查詢或設置的系統參數有關(如int,string等類型均可)。關於系統級參數的詳情,請參考uiAction參數。否則在沒有指明情況下,必須將該參數指定爲NULL。
fWinlni:如果設置系統參數,則它用來指定是否更新用戶配置文件(Profile)。亦或是否要將WM_SETTINGCHANGE消息廣播給所有頂層窗口,以通知它們新的變化內容。
例:
.SystemParametersInfo(112, 0, 用於返回數據的引用, 0);取得鼠標移動速度
SystemParametersInfo(20, 1,路徑, 1);更換桌面壁紙
[DllImport("user32.dll", CharSet = CharSet.Auto,
CallingConvention = CallingConvention.StdCall, SetLastError = true)]
public extern static int FindWindow(string lpClassName,string lpWindowName);
功能:返回指定窗口的句柄
參數:
lpClassName:要返回的窗口的類名稱字符串
lpWindowName:要返回的窗口的名稱
[DllImport("user32.dll", CharSet = CharSet.Auto, CallingConvention = CallingConvention.StdCall, SetLastError = true)]
public extern static int ShowWindow(int hwnd,int nCmdShow)
功能:控制窗口的顯示狀態
參數:
hwnd:指定窗口的句柄
nCmdShow:顯示狀態,該參數的值及說明如下:
隱藏窗口並激活其他窗口。nCmdShow=0。
最大化指定的窗口。nCmdShow=3。
最小化指定的窗口。nCmdShow=6。
激活並顯示窗口。如果窗口最小化或最大化,則系統將窗口恢復到原來的尺寸和位置。在恢復最小化窗口時,應用程序應該指定這個標誌。nCmdShow=9。
在窗口原來的位置以原來的尺寸激活和顯示窗口。nCmdShow=5。
依據在STARTUPINFO結構中指定的SW_FLAG標誌設定顯示狀態,STARTUPINFO 結構是由啓動應用程序的程序傳遞給CreateProcess函數的。nCmdShow=10。
激活窗口並將其最大化。nCmdShow=3。
激活窗口並將其最小化。nCmdShow=2。
窗口最小化,激活窗口仍然維持激活狀態。nCmdShow=7。
以窗口原來的狀態顯示窗口。激活窗口仍然維持激活狀態。nCmdShow=8。
以窗口最近一次的大小和狀態顯示窗口。激活窗口仍然維持激活狀態。nCmdShow=4。
激活並顯示一個窗口。如果窗口被最小化或最大化,系統將其恢復到原來的尺寸和大小。應用程序在第一次顯示窗口的時候應該指定此標誌。nCmdShow=1。
ShowWindow(FindWindow("Shell_TrayWnd", null), 0);
隱藏任務欄[DllImport("user32.dll", CharSet = CharSet.Auto, CallingConvention = CallingConvention.StdCall, SetLastError = true)]
public extern static int FindWindowEx(int hWnd1,int hWnd2,string lpsz1,string lpsz2);
功能:在窗口列表中查找與指定條件相符的第一個子窗口
參數:
hWnd1:在其中查找子窗口的父窗口。如設爲0,表示使用桌面窗口
hWnd2:從此窗口後開始查找
lpsz1:欲搜索的類名,0表示忽略
lpsz2:同上
[DllImport("user32.dll", CharSet = CharSet.Auto,
CallingConvention = CallingConvention.StdCall, SetLastError = true)]
public extern static int GetWindowRect(int
hwnd,ref Rectangle lpRect)
功能:獲得指定窗口的矩陣範圍
參數:
hwnd:指定窗口的句柄
lpRect:用於儲存返回的Rectangle變量
[DllImport("user32.dll", CharSet = CharSet.Auto,
CallingConvention = CallingConvention.StdCall, SetLastError = true)]
private extern static int ExitWindowsEx(int uFlags,int dwReserved)
功能:主要用來退出windows操作系統,並用特定的選項重新啓動
參數:
uFlags:要執行的參數。常用可選值如下:
強迫終止沒有響應的(4)/中止進程,然後註銷(0)/重新引導系統(2)/關閉系統(1)
dwReserved:保留值,一般爲0
[DllImport("user32.dll", CharSet = CharSet.Auto, CallingConvention = CallingConvention.StdCall, SetLastError = true)]
public extern static int GetDesktopWindow()
功能:取得桌面窗口的句柄
[DllImport("user32.dll", CharSet = CharSet.Auto, CallingConvention = CallingConvention.StdCall, SetLastError = true)]
public extern static bool SendMessage(IntPtr hWnd,int wMsg,int wParam,int lParam)
功能:想windows系統發送消息
參數:
hWnd:窗口句柄
wMsg:將要發送的消息
wParam,lParam:消息的參數,視發送的消息而定
實例:hwnd = FindWindow(null, "Form1");
hwnd = FindWindowEx(hwnd, 0, null, "接收");
SendMessage((IntPtr)hwnd, 0xF5, 0, 0);
注:消息0xF5相當於0x201和0x202
[DllImport("user32.dll", CharSet = CharSet.Auto, CallingConvention = CallingConvention.StdCall, SetLastError = true)]
public extern static int InvalidateRect(int hwnd,ref Rectangle lpRect,bool bErase)
功能:屏蔽一個窗口客戶區的全部或部分分區,從而迫使其重畫
參數:
hwnd:待屏蔽窗口的句柄
lpRect:設定待屏蔽部分的一個矩形結構體
bErase:true導致指定的區域在重畫前先刪除
[DllImport("advapi32.dll", CharSet =
CharSet.Auto, CallingConvention = CallingConvention.StdCall, SetLastError = true)]
public extern static bool OpenProcessToken(IntPtr h,int acc,ref IntPtr phtok)
功能:用來打開與進程相關聯的訪問令牌。
參數:
h:要修改訪問權限的進程句柄
acc:指定你要進行的操作類型
phtok:返回的訪問令牌指針
[DllImport("Kernel32.dll", CharSet = CharSet.Ansi,CallingConvention
= CallingConvention.StdCall, SetLastError = true)]
public extern static bool SetSystemTime(ref SYSTEMTIME lpTime);
功能:調整系統時間(管理員權限下)
參數:
lpTime:時間結構體,其定義如下:
[StructLayout(LayoutKind.Sequential)]
public struct SYSTEMTIME
{
public short Year;
public short Mounth;
public short DayOfWeek;
public short Day;
public short Hour;
public short Minute;
public short Second;
public short Miliseconds;
}
[DllImport("Kernel32.dll",
CharSet = CharSet.Ansi,CallingConvention = CallingConvention.StdCall, SetLastError = true)]
public extern static int SetComputerName(string ipComputerName)
功能:修改計算機名稱
參數:
ipComputerName:要修改爲的新計算機名稱。
取得API執行信息:
int n = Marshal.GetLastWin32Error();
string mes = new System.ComponentModel.Win32Exception(n).Message;