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;

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