C# API筆記

/// <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;

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章