版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
C#WINDOWSAPIaeeasyexpansionApplicationProgrammingInterfaceC#WindowsAPI目录CWAPI
1234WindowsapiIntroductionWindowsapi
ReferenceWindowsapicodeWindowsapiHookC#WindowsAPI1WindowsapiIntroductionWINDOWSAPI中包含很多函数,约有1500多个.根据其类别主要分为:窗口及窗口过程、声音及音频控制、位图及位图处理、INI及注册表操作、窗口效果及管理类、字体相关、错误处理、通用对话框、压缩及加密控制、文件及目录操作、剪切板使用、绘图及图形相关、游戏手柄及键盘相关、堆栰操作、图标光标相关、菜单操作、HOOK及消息处理、鼠标控制类、进程及线程管理、文本及字符串操作、时间和定时器管理、端口及网络相关、存储及显示打印设备、多媒体及MCI相关、内存管理、操作系统SHELL、WINDOWS系统信息和其他等。WINDOWS中有3个非常重要的底层DLL文件:KERNEL32.DLL、USER32.DLL和GDI32.DLL。其中KERNEL32.DLL-主要包含用于管理内存、进程和线程的函数;USER32.DLL-中包含的则是用于执行用户界面任务的函数,比如把用户的鼠标点击操作传递给窗口等等.GDI32.DLL-全称是GRAPHICALDEVICEINTERFACE(图形设备接口),包含用于画图和显示文本的函数,比如要显示一个程序窗口,就调用了其中的函数来画这个窗口.C#WindowsAPIWindowsAPI的功能分类文件系统:对文件的基本操作包括文件的创建,打开,读写,关闭,删除,文件属性的更改,目录操作,以及磁盘分卷的操作,镜像文件加密文件系统等。内存管理:主要是内存的分配,共享,释放等内容,包括虚拟内存管理,分页机制,堆管理等。进程线程模块:包括进程主程序(exe),模块,动态链接库,线程的创建,遍历,同步等操作,进程与权限等。设备I/O,驱动程序控制:加载与卸载驱动程序,控制驱动程序,与驱动程序通信等。调试与错误处理:包括如何开发调试器,程序运行错误处理,日志记录,widows可执行文件的结构等。Windows系统消息:包括注册表的操作,打开,读取,植入,创建和删除键值对,还包括系统基本消息的获取和设置,如:系统日志,系统版本,计算机名等。进程间通信:包括使用共享文件进行进程间的通信的方法,使用消息进行进程间通信:使用管道,共享内存等方法。定时器与消息机制:消息机制是windows系统中很重要的一种机制,几乎所有的windows应用程序都在于消息打交道。而windows的消息机制又是依赖于定时器,所以了解消息机制对学习windows开发是至关重要的。C#WindowsAPI2Windowsapi
Reference引用此名称空间,实现引用非托管函数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);C#WindowsAPIDlllmport[,,,,]举例属性1234EntryPoint:指示要调用的DLL入口点的名称或序号。
如果你的方法名不想与api函数同名的话,要显示指定此参数。CallingConvention:指示向非托管实现传递方法参数时所用的CallingConvention值。CallingConvention.StdCall:被调用方清理堆栈。它是从托管代码调用非托管函数的默认约定。CharSet:用于标识函数调用时所采用的是Unicode还是ANSI版本。ExactSpelling=false:告诉编译器,去决定使用Unicode还是ANSIC#WindowsAPIchartsetCharSet控制调用函数的名称版本及指示如何向方法封送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”。C#WindowsAPIWindows数据类型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无符号整形C#WindowsAPI键码值,数据类型C#WindowsAPI3ISWINDOWSAPICodehttp://pinvoke.netC#WindowsAPI
///<summary>
///锁定系统///</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);
}C#WindowsAPI
[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();//获得桌面句柄C#WindowsAPI[DllImport("user32.dll")]publicstaticexternIntPtrFindWindow(stringClassName,stringWindowNamw);[DllImport("user32.dll")]publicstaticexternintGetWindowText(inthWnd,StringBuilderlptext,intnCount);[DllImport("user32.dll")]publicstaticexternintEnumWindows(CALLBACKcall,intlParam);publicdelegateboolCALLBACK(inthwnd,intlparam);[DllImport("user32.dll")]publicstaticexternboolEnumChildWindows(IntPtrwindow,EnumWindowProccallback,IntPtrlparam);publicdelegateboolEnumWindowProc(IntPtrhWnd,IntPtrparameter);[DllImport("user32.dll")]publicstaticexternintSendMessage(IntPtrhWnd,intMsg,IntPtrwParam,intlParam);[DllImport("user32.dll")]publicstaticexternIntPtrFindWindowEx(IntPtrhwndParent,IntPtrhwndChildAfter,stringlpszClass,stringlpszWindow);C#WindowsAPIclasspropertyButton
{[DllImport("user32.dll")]publicstaticexternIntPtrFindWindow(stringClassName,stringWindowNamw);[DllImport("user32.dll")]publicstaticexternintGetWindowText(inthWnd,StringBuilderlptext,intnCount);[DllImport("user32.dll")]publicstaticexternintEnumWindows(CALLBACKcall,intlParam);publicdelegateboolCALLBACK(inthwnd,intlparam);[DllImport("user32.dll")]publicstaticexternboolEnumChildWindows(IntPtrwindow,EnumWindowProccallback,IntPtrlparam);publicdelegateboolEnumWindowProc(IntPtrhWnd,IntPtrparameter);[DllImport("user32.dll")]publicstaticexternintSendMessage(IntPtrhWnd,intMsg,IntPtrwParam,intlParam);[DllImport("user32.dll")]publicstaticexternIntPtrFindWindowEx(IntPtrhwndParent,IntPtrhwndChildAfter,stringlpszClass,stringlpszWindow);publicconstintWM_CLICK=0x00f5;publicstaticIntPtrRevit=IntPtr.Zero;publicstaticIntPtrEdit=IntPtr.Zero;C#WindowsAPIpublicstaticintSetEdit()
{CALLBACKcb=BackCallHwnd;EnumWindows(cb,0);if(Revit!=IntPtr.Zero)
{EnumWindowProcchildProc=FindChildEditHwnd;EnumChildWindows(Revit,childProc,IntPtr.Zero);if(Edit!=IntPtr.Zero)
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 环保设施安全隐患管理制度
- 交通运输安全风险辨识与应对制度
- 建筑施工企业薪酬管理制度
- 乐惠国际:乐惠国际2022年一季度报告
- 烤架刮削器清洁用品市场洞察报告
- 服装和纺织品用气味中和剂产品入市调查研究报告
- 医用水床市场发展现状调查及供需格局分析预测报告
- 建筑施工安全合作协议样本
- 公司之间借款协议书范文
- 个人房屋抵押借款合同书样本
- 期中阶段性练习(一~四单元)(试题)-2024-2025学年五年级上册数学苏教版
- 医疗设备供货安装调试培训、售后组织方案
- 2024年云南德宏州州级事业单位选调工作人员历年高频难、易错点500题模拟试题附带答案详解
- 2024年秋新鲁科版三年级上册英语课件 Unit 6 lesson 1
- 英语国家概况-Chapter10-government解析
- 2024年浙江省中考英语试题卷(含答案)
- 2024-2030年中国AGV机器人行业发展分析及发展前景与趋势预测研究报告
- 2025年山东省春季高考模拟考试英语试卷试题(含答案+答题卡)
- 中国小型高低温试验箱行业市场现状分析及竞争格局与投资发展研究报告(2024-2030版)
- 人教版英语2024七年级上册全册单元测试卷
- 2024年秋新北师大版七年级上册数学教学课件 5.2.2 用移项法解一元一次方程
评论
0/150
提交评论