运用API函数获取系统信息
易语言获取窗口信息的方法

易语言获取窗口信息的方法介绍在易语言中,获取窗口信息是一项常见的操作。
通过获取窗口信息,我们可以了解窗口的属性、位置、大小等,从而对窗口进行进一步的操作和处理。
本文将深入探讨易语言中获取窗口信息的方法,包括使用系统API和易语言自带的函数等多种方式。
使用系统API获取窗口信息系统API是操作系统提供的一组函数,通过调用这些函数可以获取各种系统信息。
在易语言中,我们可以利用系统API来获取窗口信息。
以下是一些常用的系统API函数:EnumWindows函数EnumWindows函数用于枚举所有当前正在运行的顶级窗口。
通过回调函数,我们可以获取到每个窗口的句柄,从而进一步获取窗口的信息。
以下是使用EnumWindows函数获取窗口信息的基本步骤: 1. 定义一个回调函数,用于处理每个窗口的信息。
2. 调用EnumWindows函数,传入回调函数的地址。
3. 在回调函数中,获取窗口的信息。
下面是一个使用EnumWindows函数获取窗口信息的示例代码:declare function EnumWindows lib "User32.dll" (lpEnumFunc as function, lParam as intptr) as longdeclare function GetWindowText lib "User32.dll" alias "GetWindowTextA" (hwnd as intptr, lpString as ptr, nMaxCount as long) as longdeclare function GetWindowTextLength lib "User32.dll" alias "GetWindowTextLeng thA" (hwnd as intptr) as longfunction EnumWindowsProc(hwnd as intptr, lParam as intptr) as long dim buffer as byte ptrdim textLength as longdim windowText as stringtextLength = GetWindowTextLength(hwnd) + 1buffer = string(textLength)GetWindowText(hwnd, buffer, textLength)windowText = @bufferprint "窗口句柄: " + str(hwnd)print "窗口标题: " + windowTextprint "-----------------------"return 1end functionenumResult = EnumWindows(@EnumWindowsProc, 0)在上面的示例代码中,我们定义了一个回调函数EnumWindowsProc,用于处理每个窗口的信息。
qt程序中中获取系统位数的方法

qt程序中中获取系统位数的方法1.引言1.1 概述在编写Qt程序时,有时我们需要根据系统的位数来进行一些特定的操作或适配。
系统位数指的是操作系统所使用的CPU的位数,常见的有32位和64位系统。
在很多情况下,我们需要判断当前系统的位数,以便选择合适的操作方式或库文件。
本文将介绍在Qt程序中获取系统位数的方法,帮助读者更好地理解和处理这一问题。
文章接下来将分为引言、正文和结论三个部分。
引言部分将对本文的主题进行概述和说明,正文部分将介绍什么是系统位数,并详细讲解获取系统位数的方法。
最后,在结论部分将对整篇文章进行总结,并展望未来在Qt程序开发中的应用前景。
接下来,我们将逐一介绍本文的各个部分,希望读者能够通过本文对Qt程序中获取系统位数的方法有一个全面而深入的了解。
文章结构是指文章的组织框架和段落安排。
一个良好的文章结构能够帮助读者更好地理解和跟随文章的内容。
本文将按照以下结构展开:1. 引言1.1 概述:介绍Qt程序中获取系统位数的需求和重要性。
1.2 文章结构:阐述本文的组织框架和段落安排。
1.3 目的:明确本文的目标和意义。
2. 正文2.1 什么是系统位数:解释系统位数的定义和作用。
2.2 获取系统位数的方法:详细介绍获取系统位数的多种方法,包括从注册表、环境变量、系统API等方面进行获取。
3. 结论3.1 总结:对文章的主要内容进行总结,并重申获取系统位数的重要性。
3.2 结果展望:展望未来,探讨更多关于系统位数获取的发展趋势和可能的改进方法。
通过这样的文章结构,读者可以清晰地了解到本文的框架和内容安排,帮助他们更好地理解和解答关于Qt程序中获取系统位数的问题。
1.3 目的本文的目的是介绍在Qt程序中如何获取系统的位数。
随着计算机技术的发展,不同系统的位数也有所区别,例如32位和64位。
在开发过程中,获取系统的位数是一项非常重要的任务,特别是当我们需要根据系统位数来选择合适的库、组件或者进行一些相应的配置时。
windows函数大全-应用

Windows API函数大全(1)Windows API函数大全(2)Windows API函数应用实例----利用Windows API函数和注册表获取系统信息(Delphi 程序实例)(3)VB中调用Windows API函数检测当前系统环境(VB 程序实例)(4)实用的windows API函数一、Windows API函数大全1)网络函数2)消息函数3)文件处理函数4)打印函数5)文本和字体函数6)菜单函数7)位图、图标和光栅运算函数8)绘图函数9)设备场景函数10)硬件与系统函数11)进程和线程函数12)控件与消息函数1.Windows API----网络函数WNetAddConnection 创建同一个网络资源的永久性连接WNetAddConnection2 创建同一个网络资源的连接WNetAddConnection3 创建同一个网络资源的连接WNetCancelConnection 结束一个网络连接WNetCancelConnection2 结束一个网络连接WNetCloseEnum 结束一次枚举操作WNetConnectionDialog 启动一个标准对话框,以便建立同网络资源的连接WNetDisconnectDialog 启动一个标准对话框,以便断开同网络资源的连接WNetEnumResource 枚举网络资源WNetGetConnection 获取本地或已连接的一个资源的网络名称WNetGetLastError 获取网络错误的扩展错误信息WNetGetUniversalName 获取网络中一个文件的远程名称以及/或者UNC(统一命名规范)名称WNetGetUser 获取一个网络资源用以连接的名字WNetOpenEnum 启动对网络资源进行枚举的过程2. Windows API----消息函数BroadcastSystemMessage 将一条系统消息广播给系统中所有的顶级窗口GetMessagePos 取得消息队列中上一条消息处理完毕时的鼠标指针屏幕位置GetMessageTime 取得消息队列中上一条消息处理完毕时的时间PostMessage将一条消息投递到指定窗口的消息队列PostThreadMessage 将一条消息投递给应用程序RegisterWindowMessage 获取分配给一个字串标识符的消息编号ReplyMessage 答复一个消息SendMessage调用一个窗口的窗口函数,将一条消息发给那个窗口SendMessageCallback 将一条消息发给窗口SendMessageTimeout 向窗口发送一条超时消息SendNotifyMessage 向窗口发送一条消息3.Windows API----文件处理函数(windows将网卡、串口等硬件设备当作文件对待)CloseHandle关闭一个内核对象。
vb api函数使用手册

vb api函数使用手册VB API(Application Programming Interface,应用程序编程接口)是一种供开发者使用的工具,它为开发者提供了一套标准的函数和方法,以便与特定软件或系统进行交互和通信。
VB API函数使用手册为开发者提供了相关的文档和说明,以帮助他们使用API中的函数进行编程。
以下是VB API函数使用手册的一些主要内容。
1.引言-简要介绍VB API及其作用;-提供VB API函数使用手册的目的和范围;-确定读者的预期水平和目标。
2.准备环境-提供VB API函数使用的开发环境和工具;-介绍如何安装和配置VB API;-提供示例代码和演示项目,以帮助开发者快速上手。
3. API函数基础知识-解释API函数的基本概念和术语;-介绍API函数的语法和参数;-提供示例代码,以帮助开发者理解和使用函数。
4. API函数列表-详细列出所有可用的API函数;-每个函数提供函数名称、参数说明和返回值说明;-提供示例代码,以帮助开发者了解函数的用途和使用方法。
5.常见问题和错误处理-列出开发者在使用API函数时常见的问题和错误;-提供解决方案和错误处理技巧;-提醒开发者注意事项和最佳实践。
6.附录-提供额外的参考资料和资源链接;-列出相关的文档和教程;-提供支持和联系信息,以便开发者获得进一步的帮助。
编写VB API函数使用手册时,需要注意以下几点:1.使用简单明了的语言和术语,以便开发者容易理解和掌握;2.提供丰富的示例代码和演示项目,以帮助开发者实际运用API函数;3.使用图表、表格和代码块等辅助工具,以提高可读性和易用性;4.按照逻辑顺序组织内容,以便开发者可以系统性地学习和参考。
总结:VB API函数使用手册是帮助开发者学习和使用VB API函数的重要工具。
它提供了必要的文档和说明,以帮助开发者理解API函数的用途和使用方法。
编写VB API函数使用手册需要使用简明清晰的语言,提供丰富的示例代码,并按照逻辑顺序组织内容,以便开发者可以轻松地掌握和应用API函数。
vc++ 参考API函数

Windows API
1.控件与消息函数
AdjustWindowRect 给定一种窗口样式,计算获得目标客户区矩形所需的窗口大小
AnyPopup 判断屏幕上是否存在任何弹出式窗口
ArrangeIconicWindows 排列一个父窗口的最小化子窗口
AttachThreadInput 连接线程输入函数
GetWindowContextHelpId 取得与窗口关联在一起的帮助场景ID
GetWindowLong 从指定窗口的结构中取得信息
GetWindowPlacement 获得指定窗口的状态及位置信息
GetWindowRect 获得整个窗口的范围矩形,窗口的边框、标题栏、滚动条及菜单等都在这个矩形内
SetWindowText 设置窗口的标题文字或控件的内容
SetWindowWord 在窗口结构中为指定的窗口设置信息
ShowOwnedPopups 显示或隐藏由指定窗口所有的全部弹出式窗口
ShowWindow 控制窗口的可见性 ShowWindowAs来自nc 与ShowWindow相似
GetCommandLine 获得指向当前命令行缓冲区的一个指针
GetComputerName 取得这台计算机的名称
GetCPInfo 取得与指定代码页有关的信息
GetCurrencyFormat 针对指定的“地方”设置,根据货币格式格式化一个数字
GetCursor 获取目前选择的鼠标指针的句柄
SetRectEmpty 将矩形设为一个空矩形
SetWindowContextHelpId 为指定的窗口设置帮助场景(上下文)ID
WindowsAPI函数地址的获取

API函数地址的获取by Hume/CVC.QB前言:病毒没有什么可怕的,也并不象想像中的复杂,病毒就象是双刃剑,恶意使用就会带来恶果,我木人对于此类行为深恶痛绝!我们研究不是为了破坏而是为了知己知彼,另外病毒中确实也有很多高超的技巧值得我们学习,这才是我们的目的所在,我绝没有教唆人犯罪的意图。
—点理论:这是一个老题目了,如果我们不用任何引入库,能否在程序中调用api函数?当然可以!方法有很多,你可能早就知道了,如果你巳经了解T,就此打住,这是为还不了解这一技术而写.另外这也是病莓必用的技巧之一,如果你对病毒技术感兴趣,接着看下去.这里假设你了解PE的基本结构,如果还不憧,找点资料来看看,到处都是呦.在几乎每个病谁的开头都用下面的语句:call deltadelta:pop ebpsub ebp,offset deltamov dword p tr[ebp+offset appBase],ebp让我们考虑一下程序的执行情况,如果下面的代码由编洋器自动编译连接,那么程序执行的基址一般是400000h,如果是在Nt下执行,那么基址可能不同,比如从lOOOOOh开始,不用担心,操作系统的Loader 会自动为你重定位.但是这里停下来让我们看一下,如果你想要把这段代码附加到其他程序的后面并想让其正确执行的话,就不是那么简单了,因为你的代码可能要从555588h处开始执行,而在没有得到宿主程序许可的情况下期望操作系统自动为你修正偏移错误是不可能的,既然有非常的目的,就得费点力气,自己搞定重定位.而上面的代码就是首先得到eip指针,也是delta在程序执行时的实际偏移,然后减掉代码头到delta的偏移从而得到你的代码的真正基址,后面对于偏移的操作都应以这个真正的偏移为准.这就是你上面看到的.如果不明白,就仔细想一下,nothing difficult!下面的例子演示了这一点,并没有全部重定位,因为这只是技术演示.现在回到木文的正式内容,要想获得api的地址,得首先获得诸如kernel32.dll,user32.dll的基址,然后再找到真正的函数地址.如何获得基址和函数地址呢昵?有几种方法1)搜寻宿主的引入表获得GetModuleHandleA函数和GetProcAddress的地址,然后通过他返回系统dll的基址.因为很多程序都要使用这两个函数,因此在某些情况下是可行的,如果宿主没有使用GetProcAddress,那你就不得不搜寻Export表了.2)直接获得kernel32.dll的基址,然后再搜寻Export表获得GetProcAddress和LoadLibraryA的地址,然后我们就能得到任何想调用的函数地址.3)硬编码调用函数,比如在9X下GetModuleHandleA的地址一般是BFI-7****.第一种和第三种方法存在兼容性的问题,假如宿主没有调用GetModuleHandleA,那么你就不能获得基址,别的就更别想了...硬编码问题更大,操作系统不同则不能运行了,比如9X下可能在有些计算机上正常,但肯定不能在Nt/2K下运行...第二种方法兼容性比较好,因此作以介绍.一点背景:在PE Loader装入我们的程序启动后堆栈顶的地址是是程序的返回地址,肯定在Kernel中!因此我们可以得到这个地址,然后向低地址缩减验证一直到找到模块的起始地址,验证条件为PE头不能大于4096bytes・PE header的ImageBase值应该和当前指针相等,嘿嘿.简单吧,而且兼容性还不错.要获得Api的地址首先要获得GetModulellandle,LoadLibraryA,GetProcAddress的地址,这是通过搜索Export表来实现的,具体原理就是PE Export表的结构,如果了解了PE结构就很简单了.下面我加了点注释,没有优化代码,是为了便于理解.好,这一部分结束了!代码举例:这是一个例子,没有用任何预引入函数,加了一条invoke InitConimonControls是为了在2K下也能正常运行,否则不能在2K下不加载!程序得到MessageBoxA的地址然后显示一个消息框,目的在于演示,重要部分加了注释,很好明白.注意连接时加入/section:,text,RUE选项。
WindowsAPI函数大全(完整)
WindowsAPI函数⼤全(完整)Windows API函数⼤全,从事软件开发的朋友可以参考下1. API之⽹络函数WNetAddConnection 创建同⼀个⽹络资源的永久性连接WNetAddConnection2 创建同⼀个⽹络资源的连接WNetAddConnection3 创建同⼀个⽹络资源的连接WNetCancelConnection 结束⼀个⽹络连接WNetCancelConnection2 结束⼀个⽹络连接WNetCloseEnum 结束⼀次枚举操作WNetConnectionDialog 启动⼀个标准对话框,以便建⽴同⽹络资源的连接WNetDisconnectDialog 启动⼀个标准对话框,以便断开同⽹络资源的连接WNetEnumResource 枚举⽹络资源WNetGetConnection 获取本地或已连接的⼀个资源的⽹络名称WNetGetLastError 获取⽹络错误的扩展错误信息WNetGetUniversalName 获取⽹络中⼀个⽂件的远程名称以及/或者UNC(统⼀命名规范)名称WNetGetUser 获取⼀个⽹络资源⽤以连接的名字WNetOpenEnum 启动对⽹络资源进⾏枚举的过程2. API之消息函数BroadcastSystemMessage 将⼀条系统消息⼴播给系统中所有的顶级窗⼝GetMessagePos 取得消息队列中上⼀条消息处理完毕时的⿏标指针屏幕位置GetMessageTime 取得消息队列中上⼀条消息处理完毕时的时间PostMessage 将⼀条消息投递到指定窗⼝的消息队列PostThreadMessage 将⼀条消息投递给应⽤程序RegisterWindowMessage 获取分配给⼀个字串标识符的消息编号ReplyMessage 答复⼀个消息SendMessage 调⽤⼀个窗⼝的窗⼝函数,将⼀条消息发给那个窗⼝SendMessageCallback 将⼀条消息发给窗⼝SendMessageTimeout 向窗⼝发送⼀条消息SendNotifyMessage 向窗⼝发送⼀条消息3. API之⽂件处理函数CloseHandle 关闭⼀个内核对象。
获取进程句柄的方法
获取进程句柄的方法获取进程句柄是在编程过程中常常需要的操作之一,可以通过不同的方法来实现。
下面列举了十种获取进程句柄的方法:1. 使用Windows API函数OpenProcess来获取进程句柄。
OpenProcess函数是Windows提供的一个用于打开进程的函数,可以通过指定进程ID或进程名称来获取进程句柄。
2. 使用Windows API函数GetCurrentProcess来获取当前进程的句柄。
GetCurrentProcess函数是Windows提供的一个用于获取当前进程句柄的函数,可以直接调用该函数获取当前进程的句柄。
3. 使用Windows API函数CreateToolhelp32Snapshot和Process32First/Process32Next来获取进程句柄。
这种方法是通过遍历系统中所有进程的方式来获取进程句柄,可以通过指定进程ID 或进程名称来筛选需要的进程。
4. 使用Windows API函数EnumProcesses来获取所有进程的ID,然后再使用OpenProcess函数来获取进程句柄。
这种方法是通过遍历系统中所有进程的方式来获取进程句柄,可以获取系统中所有进程的句柄。
5. 使用Windows API函数QueryFullProcessImageName来获取进程的完整路径,然后再使用OpenProcess函数来获取进程句柄。
QueryFullProcessImageName函数是Windows提供的一个用于获取进程完整路径的函数,可以通过指定进程ID或进程句柄来获取进程的完整路径。
6. 使用Windows API函数GetWindowThreadProcessId来获取窗口所属进程的ID,然后再使用OpenProcess函数来获取进程句柄。
GetWindowThreadProcessId函数是Windows提供的一个用于获取窗口所属进程ID的函数,可以通过指定窗口句柄来获取窗口所属进程的ID。
API函数SendMessage参数即Windows消息详解
当光标在一个窗口的非客户区内移动时发送此消息给这个窗口 非客户区为:窗体的标题栏及窗 的边框体
#DeFine WM_NCLBUTTONDOWN 0xA1
当光标在一个窗口的非客户区同时按下鼠标左键时提交此消息
#DeFine WM_NCLBUTTONUP 0xA2
当用户释放鼠标左键同时光标某个窗口在非客户区十发送此消息
#DeFine WM_NCLBUTTONDBLCLK 0xA3
当用户双击鼠标左键同时光标某个窗口在非客户区十发送此消息
#DeFine WM_NCRBUTTONDOWN 0xA4
当用户按下鼠标右键同时光标又在窗口的非客户区时发送此消息
当button, combo box, list box, list view control, or menu item 被创建时#DeFine WM_VKEYTOITEM 0x2E
此消息有一个LBS_WANTKEYBOARDINPUT风格的发出给它的所有者来响应WM_KEYDOWN消息#DeFine WM_CHARTOITEM 0x2F
#DeFine WM_GETICON 0x7F
此消息发送给某个窗口来返回与某个窗口有关连的大图标或小图标的句柄
#DeFine WM_SETICON 0x80
程序发送此消息让一个新的大图标或小图标与某个窗口关联
#DeFine WM_NCCREATE 0x81
当某个窗口第一次被创建时,此消息在WM_CREATE消息发送前发送
当系统颜色改变时,发送此消息给所有顶级窗口
#DeFine WM_ENDSESSION 0x16
当系统进程发出WM_QUERYENDSESSION消息后,此消息发送给应用程序,通知它对话是否结束
VC++API函数小全
博客站点这是第一篇文章通过ADO操作Access数据库»VC++API函数小全VC++/gy8396 发表于2005-10-26, 20:10VC++API小查窗口处理2.1 窗口简介2.2.1 创建普通窗口(CreateWindow、CreateWindowEx)2.2.2 关闭窗口(CloseWindow)2.2.3 销毁窗口(DestroyWindow)2.3 窗口之间的关系2.3.1 父子关系(SetParent、GetParent、IsChild)2.3.2 遍历窗口(EnumWindow、EnumWindowProc、EnumChildWindows、En umChildProc)2.3.3 获取指定的子窗口(ChildWindowFromPoint、ChildWindowFromPointEx) 2.3.4 获得特定的窗口(GetWindow、GetTopWindow、GetNextWindow、GetD esktopWindow)2.4 窗口的大小、位置和布局2.4.1 获取窗口大小(GetWindowRect、GetClientRect)2.4.2 调整窗口大小(AdjustWindowRect、AdjustWindowRectEx)2.4.3 设置和获取窗口位置(SetWindowPos)2.4.4 移动窗口位置(MoveWindow)2.4.5 设置一组窗口位置(BeginDeferWindowPos、DeferWindowPos、EndDefe rWindowPos)2.4.6 设置和获取窗口布局(SetWindowPlacement、GetWindowPlacement) 2.4.7 设置和获得视口坐标起点(SetViewportOrgEx、GetViewportOrgEx)2.4.8 设置和获取视口坐标范围(SetViewportExtEx、GetViewportExtEx)2.4.9 设置和获取窗口坐标起点(SetWindowOrgEx、GetWindowOrgEx)2.4.10 设置和获取窗口坐标范围(SetWindowExtEx、GetWindowExtEx)2.4.11 坐标起点的偏移操作(OffsetViewportOrgEx、OffsetWindowOrgEx) 2.5 显示窗口2.5.1 显示单个窗口(ShowWindow、ShowWindowAsync、OpenIcon)2.5.2 弹出式窗口(ShowOwnedPopups、GetLastActivePopup)2.5.3 显示子窗口(CascadeWindows、TileWindows、ArrangeIconicWindows) 2.5.4 判断各种显示状态(IsIconic、IsWindowVisible、IsZoomed)2.6 窗口属性2.6.1 设置和获取窗口名(SetWindowText、GetWindowText、GetWindowText Length)2.6.2 设置和获取窗口标记长字(SetWindowLong、GetWindowLong)2.6.3 设置和获取前台窗口(SetForegroundWindow、GetForegroundWindow)2.7 对话框2.7.1 创建对话框(DialogBox、CreateDialog、CreateDialogIndirect、Message Box、MessageBoxEx、MessageBoxIndirect)2.7.2 获取控件及其ID(GetDlgItem、GetDlgCtrlID)2.7.3 设置获取控件的显示文本(SetDlgItemText、SetDlgItemInt、GetDlgIte mText、GetDlgItemInt)2.7.4 获取下一个TAB控件(GetNextDlgTabItem)2.7.5 对话框过程(DefDlgProc、DialogProc)2.7.6 对话框坐标和屏幕坐标间的转换(MapDialogRect)2.7.7 撤销对话框(EndDialog)2.8 其他2.8.1 查找窗口(FindWindow、FindWindowEx)2.8.2 设置窗口Z坐标(BringWindowToTop)2.8.3 确定窗口属性(IsWindow、IsWindowUnicode)2.8.4 设置和获取激活态窗口(SetActiveWindow、GetActiveWindow)2.8.5 窗口闪烁(FlashWindow)2.8.6 获取指定点处的窗口(WindowFromPoint)2.8.7 遍历线程所有窗口(EnumThreadWindows、EnumThreadWndProc)设备上下文——DC3.2.1 创建DC(CreateDC、CreateCompatibleDC)3.2.2 撤销DC(ReleaseDC、DeleteDC)3.2.3 获得窗口DC(GetWindowDC、GetDC、GetDCEx)3.2.4 保存和恢复DC(SaveDC、RestoreDC)3.3 设置和获取DC的各种属性3.3.1 获得DC起始点坐标(GetDCOrgEx)3.3.2 设置显示配置(ChangeDisplaySettings、ChangeDisplaySettingsEx) 3.3.3 遍历显示设备和其配置(EnumDisplayDevices、EnumDisplaySettings) 3.3.4 设置和获取DC画刷颜色(SetDCBrushColor、GetDCBrushColor)3.3.5 设置和获取DC画笔颜色(SetDCPenColor、GetDCPenColor)3.3.6 设置和获取DC中各种对象(SelectObject、GetCurrentObject)3.3.7 获取DC中对象的信息(GetObject、GetObjectType、GetStockObject) 3.4 区域操作3.4.1 新建椭圆区域(CreateEllipticRgn、CreateEllipticRgnIndirect)3.4.2 新建多边形区域(CreatePolygonRgn、CreatePolyPolygonRgn)3.4.3 新建矩形区域(CreateRectRgn、CreateRectRgnIndirect)3.4.4 新建圆矩形区域(CreateRoundRectRgn)3.4.5 区域之间的操作(EqualRgn、ExcludeUpdateRgn)3.4.6 区域上绘图操作(FillRgn、FrameRgn、InvertRgn、PaintRgn)3.5 裁剪操作3.5.1 设置和获取裁剪区域(SelectClipRgn、SelectClipPath、GetClipRgn、Ext SelectClipRgn)3.5.2 裁剪区域间的运算(ExcludeClipRect、IntersectClipRect、OffsetClipRgn) 3.6 坐标变换3.6.1 客户区坐标与屏幕坐标的变换(ClientToScreen、ScreenToClient)3.6.2 设备坐标与逻辑坐标的变换(DPtoLP、LPtoDP)3.6.3 窗口间的坐标变换(MapWindowPoints)3.7 颜色和调色板3.7.1 创建新调色板(CreatePalette)3.7.2 启用调色板(SelectPalette、RealizePalette)3.7.3 设置和获取调色板颜色条目(SetPaletteEntries、GetPaletteEntries)3.7.4 设置系统调色板的工作方式(SetSystemPaletteUse)3.7.5 设置和获取颜色调整(SetColorAdjutstment、GetColorAdjustment)3.7.6 获取匹配颜色(GetNearestColor、GetNearestPaletteIndex)3.8 其他3.8.1 滚动窗口(ScrollDC)3.8.2 偏移操作(OffsetRect、OffsetRgn)3.8.3 点、矩形和区域的关系(PtInRegion、PtVisible、RectInRegion、RectVisi ble)3.8.4 缩放视口和窗口大小(ScaleViewportExtEx、ScaleWindowExtEx)3.8.5 由给定DC获取相联系的窗口(WindowFromDC)3.8.6 获取特定设备的信息(GetDeviceCaps)3.8.7 撤销DC中的对象(DeleteObject)基本画图函数4.1.1 点(SetPixel、SetPixelV、GetPixel)4.1.2 线(LineTo、LineDDA、LineDDAProc、MoveToEx、Polyline、PolylineT o)4.1.3 曲线(PolyBezier、PolyBezierTo、PolyDraw)4.1.4 弧(AngleArc、Arc、ArcTo、SetArcDirection、GetArcDirection)4.1.5 椭圆(Ellipse)4.1.6 弦(Chord)4.1.7 矩形(Rectangle、Roundrect、DrawEdge、DrawFocusRect、FillRect) 4.1.8 多边形(Polygon、PolyPolygon、PolyPolyline)4.1.9 饼图(Pie)4.2 路径相关函数4.2.1 启动和终止路径绘图(BeginPath、EndPath)4.2.2 曲线到直线(FlattenPath)4.2.3 填充路径(FillPath、StrokeAndFillPath)4.2.4 边界处理(StrokePath、WidenPath)4.2.5 封闭路径(CloseFigure)4.2.6 获取路径区域(PathToRegion)4.2.7 获取路径(GetPath)4.2.8 撤销路径(AbortPath)处理DC对象4.3.1 新建画笔(CreatePen、CreatePenIndirect、ExtCreatePen)4.3.2 新建画刷(CreateBrushIndirect、CreateHatchBrush、CreateDIBPatter nBrushPt、CreatePatternBrush、CreateSolidBrush、GetSysColorBrush) 4.3.3 设置和获取背景颜色和模式(GetBkColor、GetBkMode、SetBkColor、Set BkMode)4.4 图元文件4.4.1 创建图元文件(CreateEnhMetaFile、CreateMetaFile)4.4.2 复制图元文件(CopyEnhMetaFile、CopyMetaFile)4.4.3 打开图元文件(GetEnhMetaFile)4.4.4 关闭图元文件(CloseEnhMetaFile、CloseMetaFile)4.4.5 撤销图元文件(DeleteEnhMetaFile、DeleteMetaFile)4.4.6 绘制图元文件(PlayEnhMetaFile)4.5 其他4.5.1 启动和终止绘图(BeginPaint、EndPaint)4.5.2 获取需更新区域(GetUpdateRect、GetUpdateRgn)4.5.3 绘图操作生效(InvalidateRect、InvalidateRgn、ValidateRect、Validate Rgn)4.5.4 设置和获取最大绘图缓冲(GdiSetBatchLimit、GdiGetBatchLimit)4.5.5 刷新缓冲(GdiFlush)4.5.6 设置和获取窗口可绘图区域(SetWindowRgn、GetWindowRgn)4.5.7 禁止在窗口绘图(LockWindowUpdate)4.5.8 绘制桌面(PaintDesktop)4.5.9 更新窗口(RedrawWindow)4.5.10 撤销绘图操作(CancelDC)4.5.11 描绘标准控件(DrawFrameControl)4.5.12 设定画图效果(DrawState、DrawStateProc)4.5.13 设置和获取系统颜色(SetSysColors、GetSysColor)位图和图标5.2.1 创建位图(CreateBitmap、CreateBitampIndirect、CreateCompatible、Bitmap、CreateDIBitmap、CreateDIBSection、LoadBitmap、LoadImage) 5.2.2 创建图标(CreateIcon、LoadIcon、LoadCursorFromFile)5.2.3 撤销图标(DestoryIcon)5.3 设置和获得位图和图标的各种属性5.3.1 设置和获取位图的位数据(SetBitmapBits、GetBitmapBits)5.3.2 设置和获取DIB(SetDIBits、GetDIBits)5.3.3 设置和获取DIB颜色表(SetDIBColorTable、GetDIBColorTable)5.3.4 设置和获取位图的大小(GetBitmapDimensionEx、SetBitmapDimension Ex)5.3.5 获取图标信息(GetIconInfo)5.4 位块操作5.4.1 各种位块操作方式(BitBlt、PatBlt、PlgBlt、StretchBlt、MaskBlt、Trans parentBlt)5.4.2 设置和获取位操作模式(SetROP2、GetROP2、SetStretchBltMode、GetS tretchBltMode)5.5 其他5.5.1 复制位图和图标(CopyImage、CopyIcon)5.5.2 从文件中搜寻图标(ExtractIcon、ExtractIconEx、ExtractAssociatedIcon) 5.5.3 显示图标(DrawIcon、DrawIconEx)菜单处理6.1 菜单的简单操作6.1.1 生成新菜单(CreateMenu、CreatePopupMenu)6.1.2 装载菜单(LoadMenu、LoadMenuIndirect)6.1.3 撤销菜单(DestoryMenu、DeleteMenu、RemoveMenu)6.1.4 获取菜单(GetMenu、GetSubMenu、GetSystemMenu)6.1.5 增添菜单(AppendMenu)6.2 菜单项处理6.2.1 设置和获取菜单项信息(SetMenuItemInfo、GetMenuItemInfo)6.2.2 设置和获取缺省菜单项(SetMenuDefautlItem、GetMenuDefaultItem) 6.2.3 获取菜单项的ID(GetMenuItemID)6.2.4 获取菜单项数(GetMenuItemCount)6.2.5 获取菜单项的范围大小(GetMenuItemRect)6.2.6 高亮显示菜单项(HiliteMenuItem)6.2.7 菜单项属性(CheckMenuItem、EnableMenuItem、CheckMenuRadioIte m)6.2.8 添加菜单项(InsertMenuItem)6.2.9 获取某点处的菜单项(MenuItemFromPoint)6.3 其他6.3.1 设置窗口的菜单(SetMenu)6.3.2 判定句柄是否指向菜单(IsMenu)6.3.3 上下文菜单(TrackPopupMenu、TrackPopupMenuEx)6.3.4 显示菜单条(DrawMenuBar)6.3.5 图形菜单项(SetMenuItemBitmaps)文件处理7.1 创建、读写和撤销文件7.1.1 创建文件(CreateFile、lcreat、GetTempFileName)7.1.2 设置文件读写位置(SetFilePointer、_llseek、_lseek)7.1.3 写入文件(WriteFile、lwrite、hwirte)7.1.4 异步写入文件(WriteFileEx、FileIOCompletionRoutine)7.1.5 读入文件(ReadFile、_lread、_hread)7.1.6 异步读入文件(ReadFileEx)7.1.7 复制文件(CopyFile、CopyFileEx、CopyProgressRoutine)7.1.8 更改文件名(MoveFile、MoveFileEx)7.1.9 关闭文件(CloseHandle、_lclose)7.1.10 删除文件(DeleteFile)7.2 设置和获得文件的各种信息7.2.1 获取文件大小(GetFileSize)7.2.2 获取文件类型(GetFileType)7.2.3 设置和获取文件时间信息(SetFileTime、GetFileTime)7.2.4 获取文件版本信息(GetFileVersionInfo、GetFileVersionInfoSize、VerQu eryValue)7.2.5 是否可执行文件(GetBinaryType)7.2.6 长文件名和短文件名的转换(GetFullPathName、GetShortPathName) 7.2.7 由文件句柄获取文件信息(GetFileInformationByHandle)7.2.8 设置文件结束标志(SetEndOfFile)7.2.9 设置和获取文件属性(SetFileAttributes、GetFileAttributes)7.3 目录处理7.3.1 创建新目录(CreateDirectory、CreateDirectoryEx)7.3.2 删除目录(RemoveDirectory)7.3.3 获取系统路径(GetSystemDirectory)7.3.4 获取临时路径(GetTempPath)7.3.5 获取Windows完整目录(GetWindowsDirectory)7.3.6 设置和获取当前目录(SetCurrentDirectory、GetCurrentDirectory)7.4 文件查找7.4.1 查找第一个文件(FindFirstFile)7.4.2 查找下一个文件(FindNextFile)7.4.3 查找指定文件(SearchPath)7.4.4 查找结束(FindClose)7.5 磁盘信息7.5.1 获取可用逻辑驱动器(GetLogicalDrives)7.5.2 获取可用逻辑驱动器信息(GetLogicalDriveStrings)7.5.3 设置和获取卷标信息(SetVolumeLabel、GetVolumeInformation)7.5.4 获取磁盘空闲空间(GetDiskFreeSpace、GetDiskFreeSpaceEx)7.5.5 获取磁盘类型(GetDriveType)7.6 压缩文件7.6.1 初始化内部缓冲区(LZInit)7.6.2 打开压缩文件(LZOpenFile)7.6.3 读入压缩文件(LZRead)7.6.4 压缩文件指针定位(LZSeek)7.6.5 获取压缩文件大小(GetCompressedFileSize)7.6.6 获取压缩文件全名(GetExpandedName)7.6.7 复制和解压缩文件(LZCopy)7.6.8 关闭压缩文件(LZClose)7.7 其他7.7.1 设置和获取字符集(SetFileApisToANSI、SetFileApisToOEM、AreFileApi sANSI)7.7.2 联系文件和I/O端口(CreateIoCompletionPort、PostQueuedCompletion Status、GetQueuedCompletionStatus)7.7.3 更新文件缓冲区(FlushFileBuffers)7.7.4 加锁和解锁文件(LockFile、LockFileEx、UnlockFile、UnlockFileEx)7.7.5 撤销文件IO(CancelIO)7.7.6 比较文件时间信息(CompareFileTime)7.7.7 设备IO操作(DeviceIoControl)7.7.8 DOS时间转换为Win32时间(DosDateTimeToFileTime)7.7.9 Win32时间转换为Dos时间(FileTimeToDosDateTime)7.7.10 Win32时间转换本地时间(FileTimeToLocalFileTime)同步8.1 同步对象8.1.1 生成同步对象(CreateEvent、CreateMutex、CreateSemaphore、Create WaitableTimer)8.1.2 打开同步对象(OpenEvent、OpenMutex、OpenSemaphore、OpenWait able Timer)8.1.3 关键段(EnterCriticalSection、LeaveCriticalSection、DeleteCritiaclSec tion)8.2 关键区段8.2.1 初始化关键区段(InitializeCriticalSection、InitializeCriticalSectionAnd SpinCount)8.2.2 非阻塞进入关键区段(TryEnterCriticalSection)8.2.3 设置关键区段的计数(SetCriticalSecitonSpinCount)8.3 原子性访问变量8.3.1 原子性比较(InterlockedCompareExchange)8.3.2 原子性交换(InterlockedExchange)8.3.3 原子性增加(InterlockedIncrement、InterlockedExchangeAdd)8.3.4 原子性减少(InterlockedDecrement)8.4 等待事件发生8.4.1 触发一个事件并等待另一个事件(SignalObjectAndWait)8.4.2 等待单个事件发生(WaitForSingleObject、WaitForSingleObjectEx)8.4.3 等待多个事件发生(WaitForMultipleObjects、WaitForMultipleObjectsEx) 8.4.4 等待消息(MsgWaitForMultipleObjects、MsgWaitForMultipleObjectsEx) 8.5 其他8.5.1 设置事件状态(SetEvent、ResetEvent、PulseEvent)8.5.2 释放互斥量(ReleaseMutex)8.5.3 释放信号灯(ReleaseSemaphore)8.5.4 设置可等待定时器状态(SetWaitableTimer、CancelWaitableTimer)处理文本和字体9.1 文本9.1.1 显示文本(DrawText、DrawTextEx、TextOut、ExTextOut、TabbedText Out、GrayString、OutputProc、PolyTextOut)9.1.2 设置和获取文本属性(SetTextAlign、GetTextAlign、SetTextColor、GetT extColor)9.1.3 调整和获取字符间距(SetTextCharacterExtra、GetKerningPairs)9.1.4 获得字符串的宽和高(GetTextExtentPoint32、GetTabbedTextExtent) 9.1.5 获取字符串的信息(GetCharacterPlacement)9.1.6 调整字符串(SetTextJustification)9.3 字体9.3.1 创建新字体(CreateFont、CreateFontIndirect、CreateScalableFontRes ource)9.3.2 在系统中添加和删除字体(AddFontResource、RemoveFontResource) 9.3.3 获取字体的宽度(GetCharABCWidths、GetCharWidth、GetCharWidth32、GetCharWidthFloat、GetCharaABCWidthsFloat)9.3.4 获取字体的各种信息(GetTextMetric、GetFontLanguageInfo)9.3.5 字体的宽高比( GetAspectRatioFilterEx、SetMapperFlags)9.3.6 获取字体的字型名(GetTextFace)9.3.7 遍历系统字体(EnumFontFamiliesEx、EnumFontFamiExProc)第10章硬件和系统10.1 键盘10.1.1 设置和获取键盘布局(ActivateKeyboardLayout、GetKeyboardLayout、GetKey boardLayoutList、GetKeyboardLayoutName)10.1.2 装载和卸载键盘布局(LoadKeyBoardLayout、UnloadKeyBoardLayout) 10.1.3 获得和设置键盘状态(GetKeyboardState、SetKeyboardState)10.1.4 获得键盘类型(GetKeyboardType)10.1.5 获得按键名(GetKeyNameText)10.1.6 获得按键状态(GetKeyState、GetAsyncKeyState)10.1.7 虚拟按键到扫描码(MapVirtualKey、MapVirtualKeyEx)10.1.8 虚拟按键到ASCII码(ToAscii、ToAsciiEx)10.1.9 虚拟按键到Unicode(ToUnicode、ToUnicodeEx)10.1.10 字符到虚拟按键(VkKeyScan、VkKeyScanEx)10.1.11 OEM码到扫描码(OemKeyScan)10.1.12 注册和撤销系统热键(RegisterHotKey、UnregisterHotKey)10.1.13 插入键盘事件(SendInput、keybd_event)10.2 鼠标10.2.1 获得鼠标输入点序列(GetMouseMovePoints)10.2.2 获得和设置双击间隔(GetDoubleClickTime、SetDoubleClickTime) 10.2.3 鼠标左右键设置(SwapMouseButton)10.2.4 鼠标捕获和释放(SetCapture、GetCapture、ReleaseCapture)10.2.5 捕获离开和滑过事件(TrackMouseEvent)10.2.6 插入鼠标事件(mouse_event)10.2.7 探测拖动(DragDetect)10.3 光标10.3.1 新建和撤销光标(CreateCursor、LoadCursorFromFile、DestroyCursor) 10.3.2 设置和获取光标(SetCursor、GetCursor)10.3.3 设置和获取光标位置(SetCursorPos、GetCursorPos)10.3.4 设置和获取光标活动范围(ClipCursor、GetClipCursor)10.3.5 显示光标(ShowCursor)10.3.6 设置系统光标(SetSystemCursor)10.4 时钟10.4.1 设置和获取系统时间(SetSystemTime、GetSystemTime、GetSystemTi meAsFileTime)10.4.2 设置和获取当地时间(SetLocAltime、GetLocAltime)10.4.3 获取自启动以来的微秒数(GetTickCount)10.4.4 获取和设置系统调整时间( GetSystemTimeAdjustment、SetSystemTi meAdjustment)10.4.5 设置和获取时区信息(SetTimeZoneInformation、GetTimeZoneInforma tion)10.4.6 获取高精度时间(QueryPerformanceCounter、QueryPerformance Fre quency)10.4.7 设置定时器(SetTimer)10.4.8 设置定时器回调函数(TimerProc)10.4.9 撤销定时器(KillTimer)10.5 系统信息10.5.1 获取系统各种度量信息(GetSystemMetrics)10.5.2 设置和获取系统参数(SystemParametersInfo)10.5.3 确定处理器的特性(IsProcessorFeaturePresent)10.5.4 获取和设置计算机名(GetComputerName、SetComputerName)10.5.5 获取用户名(GetUserName)10.5.6 获取操作系统版本信息(GetVersionEx)10.5.7 获取系统信息(GetSystemInfo)第11章Windows 消息11.1 消息系统概述11.2 消息处理11.2.1 发送消息(SendMessage、SendMessageCallback、SendNotifyMessage、SendMessageTimeout、PostThreadMessage、PostMessage、PostQutiMe ssage、BroadcastSystemMessage)11.2.2 回复消息(ReplyMessage)11.2.3 获取消息(GetMessage、WaitMessage、PeekMessage)11.2.4 处理消息(TranslateMessage、DispatchMessage)11.2.5 设置和获取消息的附加信息(SetMessageExtraInfo、GetMessageExtra Info)11.2.6 获取消息的伴随信息(GetMessagePos、GetMessageTime)11.2.7 注册新窗口消息(RegisterWindowMessage)11.3 消息队列11.3.1 获取队列状态(GetQueueStatus)11.3.2 获取队列中输入消息状态( GetInputState)11.4 其他11.4.1 是否重入(InSendMessage、InSendMessageEx)进程和线程12.1 进程和线程概述12.2 进程12.2.1 创建新进程(CreateProcess、CreateProcessAsUser)12.2.2 获取进程对象(OpenProcess)12.2.3 获取进程起始信息(GetStartupInfo)12.2.4 设置和获取工作集大小(SetProcessWorkingSetSize、GetProcessWorki ngSetSize)12.2.5 设置和获取进程的优先级(SetPriorityClass、GetPriorityClass)12.2.6 进程的动态优先级(SetProcessPriorityBoost、GetProcessPriorityBoost) 12.2.7 设置和获取退出参数(SetProcessShutdownParameters、GetProcessSh utdownParameters)12.2.8 获取进程的退出代码(GetExitCodeProcess)12.2.9 设置和获取环境参数(GetEnvironmentStrings、SetEnvironmentVariable、GetEnvironmentVariable、FreeEnvironmentVariable)12.2.10 获取进程的时间信息(GetProcessTime)12.2.11 获取进程的版本信息(GetProcessVersion)12.2.12 获取当前进程(GetCurrentProcess、GetCurrentProcessID)12.2.13 等待进程空闲(WaitForInputIdle)12.2.14 结束进程(ExitProcess、TerminateProcess)12.2.15 获取命令参数(GetCommandLine、CommandLineToArgvW)12.3 线程12.3.1 创建新线程(CreateThread)12.3.2 设置和获得线程优先级(SetThreadPriority、GetThreadProority)12.3.3 线程的调度(SuspendThread、SwitchToThread、ResumeThreadExitT hread 、TerminateThread、Sleep、SleepEx)12.3.4 设置线程的输入队列(AttachThreadInput)12.3.5 线程的动态优先级( SetThreadPriorityBoost、GetThreadPriorityBoost)12.3.6 获取线程的时间信息(GetThreadTimes)12.3.7 获取线程的退出码(GetExitCodeThread)12.4 调试12.4.1 调试指定进程(DebugActiveProcess)12.4.2 设置断点(DebugBreak)12.4.3 等待异常发生(WaitForDebugEvent)12.4.4 重新启动线程(ContinueDebugEvent)12.4.5 设置调试级别(SetDebugErrorLevel)12.4.6 发送一串字符给调试器(OutputDebugString)12.4.7 是否处于被调试态(IsDebuggerPresent)12.4.8 控制转移到调试器(FatalExit)12.4.9 设置和获取线程上下文(SetThreadContext、GetThreadContext) 12.4.10 获取线程选择子的描述符(GetThreadSelectorEntry)12.4.11 读写进程内存(WriteProcessMemory、ReadProcessMemory) 12.5 线程局部数据区12.5.1 分配(TlsAlloc)12.5.2 释放(TlsFree)12.5.3 设置和获取变量值(TlsSetValue、TlsGetValue)12.6 进程间通信12.6.1 创建映射文件(CreateFileMapping)12.6.2 打开映射文件(OpenFileMapping)12.6.3 映射文件到内存(MapViewOfFile、MapViewOfFileEx)12.6.4 撤销映射(UnmapViewOfFile)。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
运用API函数获取系统信息API函数是构筑Windows应用程序的基石,是Windows编程的必备利器。
每一种Windows应用程序开发工具都提供了间接或直接调用了Windows API函数的方法,或者是调用Windows API函数的接口,也就是说具备调用动态连接库的能力。
Visual C#和其它开发工具一样也能够调用动态链接库的API函数。
本文中笔者就结合实例向大家介绍在Visual C#中如何调用各种返回值的API,该实例就是一个通过API函数调用获取系统信息的程序。
在Visual C#中调用API的基本过程:首先,在调用API之前,你必须先导入System.Runtime.InteropServices这个名称空间。
该名称空间包含了在Visual C#中调用API的一些必要集合,具体的方法如下:using System.Runtime.InteropServices;在导入了名称空间后,我们要声明在程序中所要用到的API函数。
我们的程序主要是获取系统的相关信息,所以用到的API函数都是返回系统信息的。
先给出在Visual C#中声明API的方法:其中,"DllImport"属性用来从不可控代码中调用一个方法,它指定了DLL的位置,该DLL中包含调用的外部方法;"kernel32"设定了类库名;"public"指明函数的访问类型为公有的;"static"修饰符声明一个静态元素,而该元素属于类型本身而不是指定的对象;"extern"表示该方法将在工程外部执行,同时使用DllImport导入的方法必须使用"extern"修饰符;最后GetWindowsDirectory函数包含了两个参数,一个为StringBuilder类型的,另一个为int类型的,该方法返回的内容存在于StringBuilder类型的参数中。
同时,因为我们在这里使用到了StringBuilder类,所以在程序的开始处,我们还得添加System.Text这个名称空间,方法同上。
其他几个API函数的声明如下:以上几个API的作用分别是获取系统路径,获得CPU相关信息,获得内存的相关信息,获得系统时间等。
在声明完所有的API函数后,我们发现后三个函数分别用到了CPU_INFO、MEMORY_INFO、SYSTEMTIME_INFO等结构,这些结构并非是.Net内部的,它们从何而来?其实,我们在用到以上API调用时均需用到以上结构,我们将函数调用获得的信息存放在以上的结构体中,最后返回给程序输出。
这些结构体比较复杂,但是如果开发者能够熟练运用,那么整个API世界将尽在开发者的掌握之中。
以下就是上述结构体的声明://定义以下各结构//定义CPU的信息结构[StructLayout(LayoutKind.Sequential)]public struct CPU_INFO{public uint dwOemId;public uint dwPageSize;public uint lpMinimumApplicationAddress;public uint lpMaximumApplicationAddress;public uint dwActiveProcessorMask;public uint dwNumberOfProcessors;public uint dwProcessorType;public uint dwAllocationGranularity;public uint dwProcessorLevel;public uint dwProcessorRevision;}//定义内存的信息结构[StructLayout(LayoutKind.Sequential)]public struct MEMORY_INFO{public uint dwLength;public uint dwMemoryLoad;public uint dwTotalPhys;public uint dwAvailPhys;public uint dwTotalPageFile;public uint dwAvailPageFile;public uint dwTotalVirtual;public uint dwAvailVirtual;}//定义系统时间的信息结构[StructLayout(LayoutKind.Sequential)]public struct SYSTEMTIME_INFO{public ushort wYear;public ushort wMonth;结构体定义的主体部分和C++中的没多大差别,具体每个结构体内部成员的定义可参考联机帮助中的SDK文档。
同时,我们还发现在每个结构体定义的上面都有一句用中括号括起来的说明性文字。
这些说明都是有关结构体成员的布局的,共有三种选项,分别说明如下:LayoutKind.Automatic:为了提高效率允许运行态对类型成员重新排序。
注意:永远不要使用这个选项来调用不受管辖的动态链接库函数。
LayoutKind.Explicit:对每个域按照FieldOffset属性对类型成员排序LayoutKind.Sequential:对出现在受管辖类型定义地方的不受管辖内存中的类型成员进行排序。
在上面的程序中,为了方便起见我们都用到了第三种方式所有的API函数以及相关的结构体声明完毕后,我们就运用这些API来实现我们的程序功能――获取系统的相关信息。
界面可按如下方式布置,不过有兴趣的读者自然可以发挥自己的想象,将界面布局做得更好。
简单的界面布置好后,我们添加一个按钮("获取信息"按钮)的消息处理函数如下:private void GetInfo_Click(object sender, System.EventArgs e){//调用GetWindowsDirectory和GetSystemDirectory函数分别取得Windows路径和系统路径const int nChars = 128;StringBuilder Buff = new StringBuilder(nChars);GetWindowsDirectory(Buff,nChars);WindowsDirectory.Text = "Windows路径:"+Buff.ToString();GetSystemDirectory(Buff,nChars);SystemDirectory.Text = "系统路径:"+Buff.ToString();//调用GetSystemInfo函数获取CPU的相关信息CPU_INFO CpuInfo;CpuInfo = new CPU_INFO();GetSystemInfo(ref CpuInfo);NumberOfProcessors.Text = "本计算机中有"+CpuInfo.dwNumberOfProcessors.ToString()+"个CPU";ProcessorType.Text = "CPU的类型为"+CpuInfo.dwProcessorType.ToString(); ProcessorLevel.Text = "CPU等级为"+CpuInfo.dwProcessorLevel.ToString();OemId.Text = "CPU的OEM ID为"+CpuInfo.dwOemId.ToString();PageSize.Text = "CPU中的页面大小为"+CpuInfo.dwPageSize.ToString();//调用GlobalMemoryStatus函数获取内存的相关信息MEMORY_INFO MemInfo;MemInfo = new MEMORY_INFO();GlobalMemoryStatus(ref MemInfo);MemoryLoad.Text = MemInfo.dwMemoryLoad.ToString()+"%的内存正在使用"; TotalPhys.Text = "物理内存共有"+MemInfo.dwTotalPhys.ToString()+"字节"; AvailPhys.Text = "可使用的物理内存有"+MemInfo.dwAvailPhys.ToString()+"字节"; TotalPageFile.Text = "交换文件总大小为"+MemInfo.dwTotalPageFile.ToString()+"字节";AvailPageFile.Text = "尚可交换文件大小为"+MemInfo.dwAvailPageFile.ToString()+"字节";TotalVirtual.Text = "总虚拟内存有"+MemInfo.dwTotalVirtual.ToString()+"字节"; AvailVirtual.Text = "未用虚拟内存有"+MemInfo.dwAvailVirtual.ToString()+"字节";//调用GetSystemTime函数获取系统时间信息SYSTEMTIME_INFO StInfo;StInfo = new SYSTEMTIME_INFO();GetSystemTime(ref StInfo);Date.Text = StInfo.wYear.ToString()+"年"+StInfo.wMonth.ToString()+"月"+StInfo.wDay.ToString()+"日";Time.Text = (StInfo.wHour+8).ToString()+"点"+StInfo.wMinute.ToString()+"分"+StInfo.wSecond.ToString()+"秒";}在上面的消息处理函数中,我们运用了在程序开始处声明的各个API函数获取了系统的相关信息,并最终在界面上以文本标签的方式显示结果。