目录CWAPI1234WindowsapiIntroductionWindowsapiReferenceWindowsapicodeWindowsapiHookWindowsapiIntroductionWINDOWSAPI中包含很多函数,约有1500多个.根据其类别主要分为:窗口及窗口过程、声音及音频控制、位图及位图处理、INI及注册表操作、窗口效果及管理类、字体相关、错误处理、通用对话框、压缩及加密控制、文件及目录操作、剪切板使用、绘图及图形相关、游戏手柄及键盘相关、堆栰操作、图标光标相关、菜单操作、HOOK及消息处理、鼠标控制类、进程及线程管理、文本及字符串操作、时间和定时器管理、端口及网络相关、存储及显示打印设备、多媒体及MCI相关、内存管理、操作系统SHELL、WINDOWS系统信息和其他等。WINDOWS中有3个非常重要的底层DLL文件:KERNEL32.DLL、USER32.DLL和GDI32.DLL。其中KERNEL32.DLL-主要包含用于管理内存、进程和线程的函数;USER32.DLL-中包含的则是用于执行用户界面任务的函数,比如把用户的鼠标点击操作传递给窗口等等.GDI32.DLL-全称是GRAPHICALDEVICEINTERFACE(图形设备接口),包含用于画图和显示文本的函数,比如要显示一个程序窗口,就调用了其中的函数来画这个窗口.WindowsAPI的功能分类文件系统:对文件的基本操作包括文件的创建,打开,读写,关闭,删除,文件属性的更改,目录操作,以及磁盘分卷的操作,镜像文件加密文件系统等。内存管理:主要是内存的分配,共享,释放等内容,包括虚拟内存管理,分页机制,堆管理等。进程线程模块:包括进程主程序(exe),模块,动态链接库,线程的创建,遍历,同步等操作,进程与权限等。设备I/O,驱动程序控制:加载与卸载驱动程序,控制驱动程序,与驱动程序通信等。调试与错误处理:包括如何开发调试器,程序运行错误处理,日志记录,widows可执行文件的结构等。Windows系统消息:包括注册表的操作,打开,读取,植入,创建和删除键值对,还包括系统基本消息的获取和设置,如:系统日志,系统版本,计算机名等。进程间通信:包括使用共享文件进行进程间的通信的方法,使用消息进行进程间通信:使用管道,共享内存等方法。定时器与消息机制:消息机制是windows系统中很重要的一种机制,几乎所有的windows应用程序都在于消息打交道。而windows的消息机制又是依赖于定时器,所以了解消息机制对学习windows开发是至关重要的。WindowsapiReference引用此名称空间,实现引用非托管函数usingSystem.Runtime.InteropServices使用DllImportAttribute特性来引入api函数,注意声明的是空方法,即方法体为空。[DllImport(user32.dll)]publicstaticexternReturnTypeFunctionName(typearg1,typearg2,...);可以使用字段进一步说明特性,用逗号隔开,如:[DllImport(user32.dll,EntryPoint=FindWindow,CallingConvention=CallingConvention.StdCall,CharSet=CharSet.Auto,ExactSpelling=false)]privatestaticexternIntPtrFindWindow(stringClassName,stringWindowNamw);Dlllmport[,,,,]举例属性1234EntryPoint:指示要调用的DLL入口点的名称或序号。如果你的方法名不想与api函数同名的话,要显示指定此参数。CallingConvention:指示向非托管实现传递方法参数时所用的CallingConvention值。CallingConvention.StdCall:被调用方清理堆栈。它是从托管代码调用非托管函数的默认约定。CharSet:用于标识函数调用时所采用的是Unicode还是ANSI版本。ExactSpelling=false:告诉编译器,去决定使用Unicode还是ANSIchartsetCharSet控制调用函数的名称版本及指示如何向方法封送String参数.。此字段被设置为CharSet值之一。如果CharSet字段设置为Unicode,则所有字符串参数在传递到非托管实现之前都转换成Unicode字符。这还导致向DLLEntryPoint的名称中追加字母“W”。如果此字段设置为Ansi,则字符串将转换成ANSI字符串,同时向DLLEntryPoint的名称中追加字母“A”。大多数Win32API使用这种追加“W”或“A”的约定。如果CharSet设置为Auto,则这种转换就是与平台有关的(在WindowsNT上为Unicode,在Windows98上为Ansi)。CharSet的默认值为Ansi。CharSet字段也用于确定将从指定的DLL导入哪个版本的函数。CharSet.Ansi和CharSet.Unicode的名称匹配规则大不相同。对于Ansi来说,如果将EntryPoint设置为“MyMethod”且它存在的话,则返回“MyMethod”。如果DLL中没有“MyMethod”,但存在“MyMethodA”,则返回“MyMethodA”。对于Unicode来说则正好相反。如果将EntryPoint设置为“MyMethod”且它存在的话,则返回“MyMethodW”。如果DLL中不存在“MyMethodW”,但存在“MyMethod”,则返回“MyMethod”。如果使用的是Auto,则匹配规则与平台有关(在WindowsNT上为Unicode,在Windows98上为Ansi)。如果ExactSpelling设置为true,则只有当DLL中存在“MyMethod”时才返回“MyMethod”。Windows数据类型BOOL布尔型变量INT_PTR指向INT类型数据的指针类型LPWSTRUnicode字符串常量BYTE字节类型8位INT3232位符号整型SHORT无符号短整形CHAR8比特字节INT6464位符号整型SIZE_T内存大小CONST常量LONG32位无符号longUCHAR无符号CHARDWORD无符号整型数据32LONGLONG64位符号整型UINT无符号INTDWORD32无符号整型数据32LONG3232位符号长整型ULONG无符号longDWORD64无符号整型数据64LONG6464位符号长整型VOID无类型voidFLOAT浮点数据类型LPARAM消息的L参数HANDLE对象的句柄WPARAM消息的W参数HICON图标的句柄LPCSTRAnsi字符串常量HINSTANCE程序实例句柄LPCWSTRUnicode字符串常量HKEY注册表键句柄LPDWORD指向DWORD类型数据指针HMODULE模块的句柄WCHAR16位Unicode字符HWND窗口句柄WINAPI函数调用方式INT32整形数据WORD16无符号整形键码值,数据类型ISWINDOWSAPICode锁定系统////summary[DllImport(user32.dll)]privatestaticexternboolLockWorkStation();///summary///锁定键盘鼠标输入但不锁定ctr+alt+delete////summary[DllImport(user32.dll)]privatestaticexternboolBlockInput(boolfBlockIt);privatevoidskinButton29_Click(objectsender,EventArgse){boolresult=BlockInput(true);if(result==false){thrownewWin32Exception(Marshal.GetLastWin32Error());}}//根据鼠标位置信息得到鼠标下窗体的句柄值[DllImport(user32.dll)]privatestaticexternIntPtrWindowFromPoint(Pointp);[DllImport(user32.dll)]privatestaticexternintGetClassName(IntPtrhWnd,StringBuilderlpClassName,intnMaxCount);privatevoidskinButton21_Click(objectsender,EventArgse){Pointp;GetCursorPos(outp);inthwnd=WindowFromPoint(p);IntPtrhandle=(IntPtr)hwnd;StringBuildersb=newStringBuilder(256);GetClassName(handle,sb,sb.Capacity);MessageBox.Show(sb.ToString());}///设置鼠标坐标基于屏幕[DllImport(user32.dll)]privatestaticexternboolSetCursorPos(intx,inty);privatevoidskinButton3_Click(objectsender,EventArgse){SetCursorPos(10,10);}[DllImport(user32.dll)]privatestaticexternIntPtrGetActiveWindow();//获得当前活动窗体[DllImport(user32.dll)]publicstaticexternboolSetForegroundWindow(IntPtrhWnd);//设置窗体获得焦点[DllImport(user32.dll)]publicstaticexternIntPtrGetForegroundWindow();//得到当前获得焦点的窗口句柄[DllImport(user32.dll)]导入模拟键盘的方法,第一个值为虚拟键值,第二个参数为扫描不设置,为0,第三个数为按键状态选项keydown为0,如果为keyup则设置成,KEYEVENT_KEYUP,第四个参数一般为0publicstaticexternvoidkeybd_event(bytebVk,bytebScan,intdwFlags,intdwExtraInfo);privatevoidskinButton10_Click(objectsender,EventArgse){IntPtrRevit=GetActiveWindow();SetForegroundWindow(Revit);keybd_event(0x1B,0,0,0);keybd_event(0x1B,0,2,0);keybd_event(0x1B,0,0,0);keybd_event(0x1B,0,2,0);}[DllImport(user32.dll)]privatestaticexternIntPtrGetDesktopWindow();//获得桌面句柄[DllImport(user32.dll)]publicstaticexternIntPtrFindWindow(stringClassName,stringWindowNamw);[DllImport(user32.dll)]publicstaticexternintGetWindowText(inthWnd,StringBuilderlptext,intnCount);[DllImport(user32.dll)]publicstaticexternintEnumWindows(CALLBACK