API函数详解
API函数详解
摘要:什么是API
你不学API,你大概将停留在初级水平,无法往上攀登
API文本游览器
什么时候使用什么函数,什么时候使用什么结构类型,什么时候使用什么常数
一些API函数集
正文:
API函数详解(转载自红尘如烟)
标签:
首先,有必要向大家讲一讲,什么是API。所谓API本来是为C和C++程序员写的。API说来说去,就是一种函数,他们包含在一个附加名为DLL的动态连接库文件中。用标准的定义来讲,API就是Windows的32位应用程序编程接口,是一系列很复杂的函数,消息和结构,它使编程人员可以用不同类型的编程语言编制出的运行在Windows95和Wi ndows NT操作系统上的应用程序。可以说,如果你曾经学过VC,那么API对你来说不是什么问题。但是如果你没有学过VC,或者你对Windows95的结构体系不熟悉,那么可以说,学习API将是一件很辛苦的事情。
如果你打开WINDOWS的SYSTEM文件夹,你可以发现其中有很多附加名为DLL的文件。一个DLL中包含的API函数并不只是一个,数十个,甚至是数百个。我们能都掌握它嘛?回答是否定的∶不可能掌握。但实际上,我们真的没必要都掌握,只要重点掌握Win dos系统本身自带的API函数就可以了。但,在其中还应当抛开掉同VB本身自有的函数重复的函数。如,VB的etAttr命令可以获得文件属性,SetAttr可以设置文件属性。对A PI来讲也有对应的函数GetFileAttributes和SetFileAttributes,性能都差不多。如此地一算,剩下来的也就5、600个。是的,也不少。但,我可以敢跟你说,只要你熟悉地掌握100个,那么你的编程水平比现在高出至少要两倍。尽管人们说VB和WINDOWS具有密切的关系,但我认为,API更接近WINDOWS。如果你学会了API,首要的收获便是对W INDOWS体系结构的认识。这个收获是来自不易的。
如果你不依靠API会怎么样?我可以跟你说,绝大多是高级编程书本(当然这不是书的名程叫高级而高级的,而是在一开始的《本书内容》中指明《本书的阅读对象是具有一定V B基础的读者》的那些书),首先提的问题一般大都是从API开始。因此可以说,你不学A PI,你大概将停留在初级水平,无法往上攀登。唯一的途径也许就是向别人求救∶我快死了,
快来救救我呀,这个怎么办,那个怎么办?烦不烦呢?当然,现在网上好人太多(包括我在内,嘻嘻),但,你应当明白,通过此途径,你的手中出不了好的作品。这是因为缺乏这些知识你的脑子里根本行不成一种总体的设计构思。
API文本游览器
很多API函数都是很长很长的。想看什么样子吗?如下就是作为例子的API DdeClien tTransaction函数∶
Declare Function DdeClientTransaction Lib"user32"(pData As Byte,ByVal cbData As Long,ByVal hConv As Long,ByVal hszItem As Long,ByVal wF mt As Long,ByVal wType As Long,ByVal dwTimeout As Long,pdwResult As Long)As Long
哇!这么长?如果你从来没有接触过API,我想你肯定被吓住了。你也许考虑,该不该继续学下去。不过不要担心,幸运的是Microsoft的设计家们为我们提供了有用的工具,这便是API文本查看器。
通过API文本查看器,我们可以方便地查找程序所需要的函数声明、结构类型和常数,然后将它复制到剪贴板,最后再粘贴到VB程序的代码段中。在大多数情况下,只要我们确定了程序所需要的函数、结构和常数这三个方面后,就可以通过对API文本游览器的以上操作将他们加入到程序段中,从而程序中可以使用这些函数了。这些是学习API最基本的常识问题,它远远占不到API的庞大的体系内容。今后我们把精力浪费(这绝不是浪费)在哪里呢?那就是∶
什么时候使用什么函数,什么时候使用什么结构类型,什么时候使用什么常数。
API函数声明
让我们回想一下。在VB中,如何声明函数呢?我想,如果你正在看此文,那么你绝对能够回答得出这个问题。以下便是你应该很熟悉的函数声明∶
Function SetFocus(ByVal hwnd As Long)As Long
即,这行代码定义了名为SetFocus的函数,此函数具有一个Long型数据类型的参数,并按值传递(ByVal),函数执行后将返回一个Long型数据。
API函数的声明也很类似,如,API中的SetFocus函数是这样写的∶
Declare Function SetFocus Lib"user32"Alias"SetFocus"(ByVal hwnd As L ong)As Long
有点复杂了一些。是的,是复杂了点。但我可以告诉你,除了这些多出来的部分,其他部分还是和你以前学到的东西是一样的。函数在程序中的调用也是一样。如:
Dim dl As Long
dl&=SetFoucs(Form1.Hwnd)
它不象你自己写的程序那样能够看到里面的运行机理,也不像VB自带的函数那样,能够从VB的联机帮助中查到其用法。唯一的方法就是去学、查VB以外的资料。
Declare语句用于在模块级别中声明对动态链接库(DLL)中外部过程的引用。对此,你只要记住任何API函数声明都必须写这个语句就可以了。
Iib指明包含所声明过程或函数的动态链接库或代码资源。也就是说,它说明的是,函数或过程从何而来的问题。
如在上例中,SetFocus Lib"user32"说明函数SetFocus来自user32.dll文件。主要的dll动态连接库文件有∶
user32.dll Windows管理。生成和管理应用程序的用户接口。
GDI32.dll图形设备接口。产生Windows设备的图形输出
Kernel32.dll系统服务。访问操作系统的计算机资源。
注意,当DLL文件不在Windows或System文件夹中的时候,必须在函数中说明其出处(路径)。如,SetFocus Lib"c:\Mydll\user32"函数声明中的Alias是可选的。表示将被调用的过程在动态链接库(DLL)中还有另外的名称(别名)。如,Alias"SetFocus",说明SetFocus函数在User32.dll中的另外一个名称是,
SetFocus。怎么两个名都一样呢?当然,也可以是不同的。在很多情况下,Alias说明的函数名,即别名最后一个字符经常是字符A,如SetWindowsText函数的另一个名称是Set WindowsTextA,表示为Alias"SetWindowsTextA"。这个A只不过是设计家们的习惯的命名约定,表示函数属于ANSI版本。
那么,别名究竟有什么用途呢?从理论上讲,别名提供了用另一个名子调用API的函数方法。如果你指明了别名,那么尽管我们按Declare语句后面的函数来调用该函数,但在函数的实际调用上是以别名作为首要选择的。如,以下两个函数(Function,ABCD)声明都是有效的,他们调用的是同一个SetFocus函数∶
Declare Function SetFocus Lib"user32""SetFocus"(ByVal hwnd As Long) As Long
Declare ABCD SetFocus Lib"user32"Alias"SetFocus"(ByVal hwnd As Long) As Long
需要注意的是,选用Alias的时候,应注意别名的大小写;如果不选用Alias时的时候,函数名必须注意大小写,而且不能改动。当然,在很多情况下,由于函数声明是直接从AP I文本游览器中拷贝过来的,所以这种错误的发生机会是很少的,但您有必要知道这一点。
最后提醒你一句,API声明(包括结构、常数)必须放在窗体或模块的"通用(General Decl arations)段。
数据类型与"类型安全"
API函数中使用的数据类型基本上和VB中的一样。但作为WIN32的API函数中,不存在Integer数据类型。另外一点是在API函数中看不到Boolean数据类型。Variant 数据类型在API函数中是以Any的形式出现,如Data As Any。尽管其含义是允许任意参数类型作为一个该API函数的参数传递,但这样做存在一定的缺点。其原因是,这将会使得对目标参数的所有类型检查都会被关闭。这自然会给各种类型的参数调用带来了产生错误的机会。
为了强制执行严格的类型检查,并避免上面提到的问题,一个办法是在函数里使用上面提到到Alias技术。如对API函数GetDIBits可进行另外一种声明方法。如下∶GetDIBits函数的原型∶
Public Declare Function GetDIBits Lib"gdi32"Alias"GetDIBits"(ByVal aHD C As Long,ByVal hBitmap As Long,ByVal nStartScan As Long,ByVal nNu mScans As Long,lpBits As Any,lpBI As BITMAPINFO,ByVal wUsage As Lo ng)As Long
GetDIBits函数的改型∶
Public Declare Function GetDIBitsLong Lib"gdi32"Alias"GetDIBits"(ByVal aHDC As Long,ByVal hBitmap As Long,ByVal nStartScan As Long,ByVal nNumScans As Long,lpBits As Long,lpBI As BITMAPINFO,ByVal wUsage As Long)As Long
通过本课程前面所学到的知识,我们已经可以得知原型GetDIBits函数也好,改型GetDIBitsLong函数也好,实际将调用的都是Alias所指定的GetDIBits原函数。但你应当看到,两者的区别在于,我们在改型的函数中强制指定lpBits参数为Long形。这样就会使得函数调用中发生的错误机率减少到了最小。这种方法叫做"安全类型"声明。
API函数中经常看到的数据类型有∶Long,String,Byte,Any....(也就这些吧。)
常数
对于API常数来讲,没有什么太特别的学问。请看VB中的以下代码∶
Msg=MsgBox("您好",vbOKCancel)
我们知道,vbOKCancel这个常数的值等于1。对上面的代码我们完全可以这样写,而不会影响代码的功能∶
Msg=MsgBox("您好",1)
但你大概不太愿意选择后一种,因为这会使得看懂代码费劲起来。这种方法也被API 采取了。只是API常数必须在事情之前做好初始化声明VB本身是看不懂的。其内容仍然来自与API文本游览器。具体形式如下等等∶
Public Const ABM_ACTIVATE=&H6
Public Const RIGHT_CTRL_PRESSED=&H4
Public Const RPC_E_SERVER_DIED=&H80010007
Private Const RPC_S_CALL_FAILED_DNE=1727&
在常数的初始化中,有些程序使用Global,如Global Const ABM_ACTIVATE=&H6,但我认为Public完全可以代替它。过去我也用过Global,但现在不大用了。一会儿用这个,一会儿用那个,各程序之间不能保持一致性了,起码看起来别扭。
结构
结构是C和C++语言中的说法。在VB中一般称为自定义数据类型。想必很多朋友都已经认识它。在API领域里,我更喜欢把它叫做结构,因为API各种结构类型根本不是我定义(自定义)的。
在VB中,API结构同样由TYPE.......END TYPE语句来定义。如,在API中,点(P oint)结构的定义方法如下:
Public Type POINTAPI
X As Long'点在X坐标(横坐标)上的坐标值
Y As Long'点在Y坐标(纵坐标)上的坐标值
End Type
又如,API中矩形(Rect)结构的定义如下∶
Public Type RECT
Left As Long'矩形左上角的X坐标
Top As Long'矩形左上角的Y坐标
Right As Long'矩形右下角的X坐标
Bottom As Long'矩形右下角的Y坐标
End Type
这些内容同样可以从API文本游览器中拷贝过来。这些结构中的变量名可随意改动,而不会影响结构本身。也就是说,这些成员变量都是虚拟的。如,POINTAPI结构可改为如下∶
Public Type POINTAPI
MyX As Long'点在X坐标(横坐标)上的坐标值
MyY As Long'点在Y坐标(纵坐标)上的坐标值
End Type
不过,一般来讲,是没有这种必要的。结构本身是一种数据类型,因此,使用时必须声明具体变量为该结构型,才能在程序中真正使用到该结构。结构的声明方法和其他数据的声明方法一样,如,以下语句把变MyPoint声明为POINTAPI结构类型∶
MyPoint As POINTAPI
引用结构中的成员变量也十分简单,在结构名后面加上一个".",然后紧接着写要引用的成员变量即可。这很象VB中的引用一个对象的某个属性。如,假如我们把上面已经声明的MyPoint结构中的X变量的值赋给变量Temp&
则代码如下∶
Temp&=MyPoint.X
但需要特别注意的是,你千万不要认为上例中的MyPoint是一个值。它不是值,而是地址(指针)。值和地址是完全不同的概念。结构要求按引用传递给WINDOWS函数,即所有API函数中,结构都是按ByRef传递的(在Declare语句中ByRef是默认型)。对于结构的传递,你不要试图采用ByVal,你将一无所获。由于结构名实际上就是指向这个结构的指针(这个结构的首地址),所以,你也就传送特定的结构名就可以了(参见小结,我用红色字体来突出了这种传递方式)。
由于结构传送的是指针,所以函数将直接对结构进行读写操作。这种特性很适合于把函数执行的结果装载在结构之中。
小结
以下的程序是为了总结本课中学到的内容而给出的。启动VB,新建一个项目,添加一
个命令按钮,并把下面的代码拷贝到代码段中,运行它。
Private Declare Function GetCursorPos Lib"user32"(lpPoint As POINTAPI) As Long
Private Type POINTAPI'定义点(Point)结构
X As Long'点在X坐标(横坐标)上的坐标值
Y As Long'点在Y坐标(纵坐标)上的坐标值
End Type
Sub PrintCursorPos()
Dim dl AS Long
Dim MyPoint As POINTAPI
dl&=GetCursorPos(MyPoint)'调用函数,获取屏幕鼠标坐标
Debug.Print"X="&Str(MyPoint.X)&"and"&"Y="&Str(MyPoint.Y)
End Sub
Private Sub Command1_Click()
PrintCursorPos
End Sub
输出结果为(每次运行都可能得到不同的结果,这得由函数调用时鼠标指针在屏幕中所处的位置而决定)∶
X=240and Y=151
程序中,GetCursorPos函数用来获取鼠标指针在屏幕上的位置。
以上例子中,你可以发现,以参数传递的MyPpint结构的内容在函数调用后发生了实质性变化。这是由于结构是按ByRef传递的原因。
一些API函数集
1.控件与消息函数
AdjustWindowRect给定一种窗口样式,计算获得目标客户区矩形所需的窗口大小AnyPopup判断屏幕上是否存在任何弹出式窗口
ArrangeIconicWindows排列一个父窗口的最小化子窗口
AttachThreadInput连接线程输入函数
BeginDeferWindowPos启动构建一系列新窗口位置的过程
BringWindowToTop将指定的窗口带至窗口列表顶部
CascadeWindows以层叠方式排列窗口
ChildWindowFromPoint返回父窗口中包含了指定点的第一个子窗口的句柄ClientToScreen判断窗口内以客户区坐标表示的一个点的屏幕坐标
CloseWindow最小化指定的窗口
CopyRect矩形内容复制
DeferWindowPos该函数为特定的窗口指定一个新窗口位置
DestroyWindow清除指定的窗口以及它的所有子窗口
DrawAnimatedRects描绘一系列动态矩形
EnableWindow指定的窗口里允许或禁止所有鼠标及键盘输入
EndDeferWindowPos同时更新DeferWindowPos调用时指定的所有窗口的位置及状态
EnumChildWindows为指定的父窗口枚举子窗口
EnumThreadWindows枚举与指定任务相关的窗口
EnumWindows枚举窗口列表中的所有父窗口
EqualRect判断两个矩形结构是否相同
FindWindow寻找窗口列表中第一个符合指定条件的顶级窗口
FindWindowEx在窗口列表中寻找与指定条件相符的第一个子窗口
FlashWindow闪烁显示指定窗口
GetActiveWindow获得活动窗口的句柄
GetCapture获得一个窗口的句柄,这个窗口位于当前输入线程,且拥有鼠标捕获(鼠标活动由它接收)
GetClassInfo取得WNDCLASS结构(或WNDCLASSEX结构)的一个副本,结构中包含了与指定类有关的信息
GetClassLong取得窗口类的一个Long变量条目
GetClassName为指定的窗口取得类名
GetClassWord为窗口类取得一个整数变量
GetClientRect返回指定窗口客户区矩形的大小
GetDesktopWindow获得代表整个屏幕的一个窗口(桌面窗口)句柄
GetFocus获得拥有输入焦点的窗口的句柄
GetForegroundWindow获得前台窗口的句柄
GetLastActivePopup获得在一个给定父窗口中最近激活过的弹出式窗口的句柄GetLastError针对之前调用的api函数,用这个函数取得扩展错误信息
GetParent判断指定窗口的父窗口
GetTopWindow搜索内部窗口列表,寻找隶属于指定窗口的头一个窗口的句柄GetUpdateRect获得一个矩形,它描叙了指定窗口中需要更新的那一部分
GetWindow获得一个窗口的句柄,该窗口与某源窗口有特定的关系GetWindowContextHelpId取得与窗口关联在一起的帮助场景ID
GetWindowLong从指定窗口的结构中取得信息
GetWindowPlacement获得指定窗口的状态及位置信息
GetWindowRect获得整个窗口的范围矩形,窗口的边框、标题栏、滚动条及菜单等都在这个矩形内
GetWindowText取得一个窗体的标题(caption)文字,或者一个控件的内容GetWindowTextLength调查窗口标题文字或控件内容的长短
GetWindowWord获得指定窗口结构的信息
InflateRect增大或减小一个矩形的大小
IntersectRect这个函数在lpDestRect里载入一个矩形,它是lpSrc1Rect与lpSrc2Re ct两个矩形的交集
InvalidateRect屏蔽一个窗口客户区的全部或部分区域
IsChild判断一个窗口是否为另一窗口的子或隶属窗口
IsIconic判断窗口是否已最小化
IsRectEmpty判断一个矩形是否为空
IsWindow判断一个窗口句柄是否有效
IsWindowEnabled判断窗口是否处于活动状态
IsWindowUnicode判断一个窗口是否为Unicode窗口。这意味着窗口为所有基于文本的消息都接收Unicode文字
IsWindowVisible判断窗口是否可见
IsZoomed判断窗口是否最大化
LockWindowUpdate锁定指定窗口,禁止它更新
MapWindowPoints将一个窗口客户区坐标的点转换到另一窗口的客户区坐标系统MoveWindow改变指定窗口的位置和大小
OffsetRect通过应用一个指定的偏移,从而让矩形移动起来
OpenIcon恢复一个最小化的程序,并将其激活
PtInRect判断指定的点是否位于矩形内部
RedrawWindow重画全部或部分窗口
ReleaseCapture为当前的应用程序释放鼠标捕获
ScreenToClient判断屏幕上一个指定点的客户区坐标
ScrollWindow滚动窗口客户区的全部或一部分
ScrollWindowEx根据附加的选项,滚动窗口客户区的全部或部分
SetActiveWindow激活指定的窗口
SetCapture将鼠标捕获设置到指定的窗口
SetClassLong为窗口类设置一个Long变量条目
SetClassWord为窗口类设置一个条目
SetFocusAPI将输入焦点设到指定的窗口。如有必要,会激活窗口SetForegroundWindow将窗口设为系统的前台窗口
SetParent指定一个窗口的新父
SetRect设置指定矩形的内容
SetRectEmpty将矩形设为一个空矩形
SetWindowContextHelpId为指定的窗口设置帮助场景(上下文)ID SetWindowLong在窗口结构中为指定的窗口设置信息
SetWindowPlacement设置窗口状态和位置信息
SetWindowPos为窗口指定一个新位置和状态
SetWindowText设置窗口的标题文字或控件的内容
SetWindowWord在窗口结构中为指定的窗口设置信息
ShowOwnedPopups显示或隐藏由指定窗口所有的全部弹出式窗口
ShowWindow控制窗口的可见性
ShowWindowAsync与ShowWindow相似
SubtractRect装载矩形lprcDst,它是在矩形lprcSrc1中减去lprcSrc2得到的结果TileWindows以平铺顺序排列窗口
UnionRect装载一个lpDestRect目标矩形,它是lpSrc1Rect和lpSrc2Rect联合起来的结果
UpdateWindow强制立即更新窗口
ValidateRect校验窗口的全部或部分客户区
WindowFromPoint返回包含了指定点的窗口的句柄。忽略屏蔽、隐藏以及透明窗口
2.硬件与系统函数
ActivateKeyboardLayout激活一个新的键盘布局。键盘布局定义了按键在一种物理性键盘上的位置与含义
Beep用于生成简单的声音
CharToOem将一个字串从ANSI字符集转换到OEM字符集
ClipCursor将指针限制到指定区域
ConvertDefaultLocale将一个特殊的地方标识符转换成真实的地方ID
CreateCaret根据指定的信息创建一个插入符(光标),并将它选定为指定窗口的默认插入符
DestroyCaret清除(破坏)一个插入符
EnumCalendarInfo枚举在指定“地方”环境中可用的日历信息
EnumDateFormats列举指定的“当地”设置中可用的长、短日期格式EnumSystemCodePages枚举系统中已安装或支持的代码页
EnumSystemLocales枚举系统已经安装或提供支持的“地方”设置EnumTimeFormats枚举一个指定的地方适用的时间格式
ExitWindowsEx退出windows,并用特定的选项重新启动ExpandEnvironmentStrings扩充环境字串
FreeEnvironmentStrings翻译指定的环境字串块
GetACP判断目前正在生效的ANSI代码页
GetAsyncKeyState判断函数调用时指定虚拟键的状态
GetCaretBlinkTime判断插入符光标的闪烁频率
GetCaretPos判断插入符的当前位置
GetClipCursor取得一个矩形,用于描述目前为鼠标指针规定的剪切区域GetCommandLine获得指向当前命令行缓冲区的一个指针
GetComputerName取得这台计算机的名称
GetCPInfo取得与指定代码页有关的信息
GetCurrencyFormat针对指定的“地方”设置,根据货币格式格式化一个数字GetCursor获取目前选择的鼠标指针的句柄
GetCursorPos获取鼠标指针的当前位置
GetDateFormat针对指定的“当地”格式,对一个系统日期进行格式化GetDoubleClickTime判断连续两次鼠标单击之间会被处理成双击事件的间隔时间GetEnvironmentStrings为包含了当前环境字串设置的一个内存块分配和返回一个句柄
GetEnvironmentVariable取得一个环境变量的值
GetInputState判断是否存在任何待决(等待处理)的鼠标或键盘事件GetKBCodePage由GetOEMCP取代,两者功能完全相同
GetKeyboardLayout取得一个句柄,描述指定应用程序的键盘布局GetKeyboardLayoutList获得系统适用的所有键盘布局的一个列表GetKeyboardLayoutName取得当前活动键盘布局的名称
GetKeyboardState取得键盘上每个虚拟键当前的状态
GetKeyboardType了解与正在使用的键盘有关的信息
GetKeyNameText在给出扫描码的前提下,判断键名
GetKeyState针对已处理过的按键,在最近一次输入信息时,判断指定虚拟键的状态GetLastError针对之前调用的api函数,用这个函数取得扩展错误信息
GetLocaleInfo取得与指定“地方”有关的信息
GetLocalTime取得本地日期和时间
GetNumberFormat针对指定的“地方”,按特定的格式格式化一个数字
GetOEMCP判断在OEM和ANSI字符集间转换的windows代码页
GetQueueStatus判断应用程序消息队列中待决(等待处理)的消息类型
GetSysColor判断指定windows显示对象的颜色
GetSystemDefaultLangID取得系统的默认语言ID
GetSystemDefaultLCID取得当前的默认系统“地方”
GetSystemInfo取得与底层硬件平台有关的信息
GetSystemMetrics返回与windows环境有关的信息
GetSystemPowerStatus获得与当前系统电源状态有关的信息
GetSystemTime取得当前系统时间,这个时间采用的是“协同世界时间”(即UTC,也叫做GMT)格式
GetSystemTimeAdjustment使内部系统时钟与一个外部的时钟信号源同步GetThreadLocale取得当前线程的地方ID
GetTickCount用于获取自windows启动以来经历的时间长度(毫秒)GetTimeFormat针对当前指定的“地方”,按特定的格式格式化一个系统时间GetTimeZoneInformation取得与系统时区设置有关的信息GetUserDefaultLangID为当前用户取得默认语言ID
GetUserDefaultLCID取得当前用户的默认“地方”设置
GetUserName取得当前用户的名字
GetVersion判断当前运行的Windows和DOS版本
GetVersionEx取得与平台和操作系统有关的版本信息
HideCaret在指定的窗口隐藏插入符(光标)
IsValidCodePage判断一个代码页是否有效
IsValidLocale判断地方标识符是否有效
keybd_event这个函数模拟了键盘行动
LoadKeyboardLayout载入一个键盘布局
MapVirtualKey根据指定的映射类型,执行不同的扫描码和字符转换MapVirtualKeyEx根据指定的映射类型,执行不同的扫描码和字符转换MessageBeep播放一个系统声音。系统声音的分配方案是在控制面板里决定的mouse_event模拟一次鼠标事件
OemKeyScan判断OEM字符集中的一个ASCII字符的扫描码和Shift键状态OemToChar将OEM字符集的一个字串转换到ANSI字符集
SetCaretBlinkTime指定插入符(光标)的闪烁频率
SetCaretPos指定插入符的位置
SetComputerName设置新的计算机名
SetCursor将指定的鼠标指针设为当前指针
SetCursorPos设置指针的位置
SetDoubleClickTime设置连续两次鼠标单击之间能使系统认为是双击事件的间隔时间SetEnvironmentVariable将一个环境变量设为指定的值
SetKeyboardState设置每个虚拟键当前在键盘上的状态
SetLocaleInfo改变用户“地方”设置信息
SetLocalTime设置当前地方时间
SetSysColors设置指定窗口显示对象的颜色
SetSystemCursor改变任何一个标准系统指针
SetSystemTime设置当前系统时间
SetSystemTimeAdjustment定时添加一个校准值使内部系统时钟与一个外部的时钟信号源同步
SetThreadLocale为当前线程设置地方
SetTimeZoneInformation设置系统时区信息
ShowCaret在指定的窗口里显示插入符(光标)
ShowCursor控制鼠标指针的可视性
SwapMouseButton决定是否互换鼠标左右键的功能
SystemParametersInfo获取和设置数量众多的windows系统参数SystemTimeToTzSpecificLocalTime将系统时间转换成地方时间
ToAscii根据当前的扫描码和键盘信息,将一个虚拟键转换成ASCII字符
ToUnicode根据当前的扫描码和键盘信息,将一个虚拟键转换成Unicode字符UnloadKeyboardLayout卸载指定的键盘布局
VkKeyScan针对Windows字符集中一个ASCII字符,判断虚拟键码和Shift键的状态
完
3.菜单函数
AppendMenu在指定的菜单里添加一个菜单项
CheckMenuItem复选或撤消复选指定的菜单条目
CheckMenuRadioItem指定一个菜单条目被复选成“单选”项目
CreateMenu创建新菜单
CreatePopupMenu创建一个空的弹出式菜单
DeleteMenu删除指定的菜单条目
DestroyMenu删除指定的菜单
DrawMenuBar为指定的窗口重画菜单
EnableMenuItem允许或禁止指定的菜单条目
GetMenu取得窗口中一个菜单的句柄
GetMenuCheckMarkDimensions返回一个菜单复选符的大小GetMenuContextHelpId取得一个菜单的帮助场景ID
GetMenuDefaultItem判断菜单中的哪个条目是默认条目
GetMenuItemCount返回菜单中条目(菜单项)的数量
GetMenuItemID返回位于菜单中指定位置处的条目的菜单ID
GetMenuItemInfo取得(接收)与一个菜单条目有关的特定信息
GetMenuItemRect在一个矩形中装载指定菜单条目的屏幕坐标信息
GetMenuState取得与指定菜单条目状态有关的信息
GetMenuString取得指定菜单条目的字串
GetSubMenu取得一个弹出式菜单的句柄,它位于菜单中指定的位置GetSystemMenu取得指定窗口的系统菜单的句柄
HiliteMenuItem控制顶级菜单条目的加亮显示状态
InsertMenu在菜单的指定位置处插入一个菜单条目,并根据需要将其他条目向下移动InsertMenuItem插入一个新菜单条目
IsMenu判断指定的句柄是否为一个菜单的句柄
LoadMenu从指定的模块或应用程序实例中载入一个菜单
LoadMenuIndirect载入一个菜单
MenuItemFromPoint判断哪个菜单条目包含了屏幕上一个指定的点
ModifyMenu改变菜单条目
RemoveMenu删除指定的菜单条目
SetMenu设置窗口菜单
SetMenuContextHelpId设置一个菜单的帮助场景ID
SetMenuDefaultItem将一个菜单条目设为默认条目
SetMenuItemBitmaps设置一幅特定位图,令其在指定的菜单条目中使用,代替标准的复选符号(√)
SetMenuItemInfo为一个菜单条目设置指定的信息
TrackPopupMenu在屏幕的任意地方显示一个弹出式菜单
TrackPopupMenuEx与TrackPopupMenu相似,只是它提供了额外的功能
完
以下是几个关于菜单函数的类型定义
MENUITEMINFO这个结构包含了菜单条目的信息
TPMPARAMS这个结构用于TrackPopupMenuEx函数以支持额外的功能
4.绘图函数
AbortPath抛弃选入指定设备场景中的所有路径。也取消目前正在进行的任何路径的创建工作
AngleArc用一个连接弧画一条线
Arc画一个圆弧
BeginPath启动一个路径分支
CancelDC取消另一个线程里的长时间绘图操作
Chord画一个弦
CloseEnhMetaFile关闭指定的增强型图元文件设备场景,并将新建的图元文件返回一个句柄
CloseFigure描绘到一个路径时,关闭当前打开的图形
CloseMetaFile关闭指定的图元文件设备场景,并向新建的图元文件返回一个句柄CopyEnhMetaFile制作指定增强型图元文件的一个副本(拷贝)
CopyMetaFile制作指定(标准)图元文件的一个副本
CreateBrushIndirect在一个LOGBRUSH数据结构的基础上创建一个刷子CreateDIBPatternBrush用一幅与设备无关的位图创建一个刷子,以便指定刷子样式(图案)
CreateEnhMetaFile创建一个增强型的图元文件设备场景
CreateHatchBrush创建带有阴影图案的一个刷子
CreateMetaFile创建一个图元文件设备场景
CreatePatternBrush用指定了刷子图案的一幅位图创建一个刷子
CreatePen用指定的样式、宽度和颜色创建一个画笔
CreatePenIndirect根据指定的LOGPEN结构创建一个画笔
CreateSolidBrush用纯色创建一个刷子
DeleteEnhMetaFile删除指定的增强型图元文件
DeleteMetaFile删除指定的图元文件
DeleteObject删除GDI对象,对象使用的所有系统资源都会被释放
DrawEdge用指定的样式描绘一个矩形的边框
DrawEscape换码(Escape)函数将数据直接发至显示设备驱动程序
DrawFocusRect画一个焦点矩形
DrawFrameControl描绘一个标准控件
DrawState为一幅图象或绘图操作应用各式各样的效果
Ellipse描绘一个椭圆,由指定的矩形围绕
EndPath停止定义一个路径
EnumEnhMetaFile针对一个增强型图元文件,列举其中单独的图元文件记录EnumMetaFile为一个标准的windows图元文件枚举单独的图元文件记录EnumObjects枚举可随同指定设备场景使用的画笔和刷子
ExtCreatePen创建一个扩展画笔(装饰或几何)
ExtFloodFill在指定的设备场景里,用当前选择的刷子填充一个区域
FillPath关闭路径中任何打开的图形,并用当前刷子填充
FillRect用指定的刷子填充一个矩形
FlattenPath将一个路径中的所有曲线都转换成线段
FloodFill用当前选定的刷子在指定的设备场景中填充一个区域
FrameRect用指定的刷子围绕一个矩形画一个边框
GdiComment为指定的增强型图元文件设备场景添加一条注释信息GdiFlush执行任何未决的绘图操作
GdiGetBatchLimit判断有多少个GDI绘图命令位于队列中GdiSetBatchLimit指定有多少个GDI绘图命令能够进入队列GetArcDirection画圆弧的时候,判断当前采用的绘图方向
GetBkColor取得指定设备场景当前的背景颜色
GetBkMode针对指定的设备场景,取得当前的背景填充模式GetBrushOrgEx判断指定设备场景中当前选定刷子起点GetCurrentObject获得指定类型的当前选定对象
GetCurrentPositionEx在指定的设备场景中取得当前的画笔位置GetEnhMetaFile取得磁盘文件中包含的一个增强型图元文件的图元文件句柄GetEnhMetaFileBits将指定的增强型图元文件复制到一个内存缓冲区里GetEnhMetaFileDescription返回对一个增强型图元文件的说明GetEnhMetaFileHeader取得增强型图元文件的图元文件头GetEnhMetaFilePaletteEntries取得增强型图元文件的全部或部分调色板GetMetaFile取得包含在一个磁盘文件中的图元文件的图元文件句柄GetMetaFileBitsEx将指定的图元文件复制到一个内存缓冲区GetMiterLimit取得设备场景的斜率限制(Miter)设置
GetNearestColor根据设备的显示能力,取得与指定颜色最接近的一种纯色GetObjectAPI取得对指定对象进行说明的一个结构
GetObjectType判断由指定句柄引用的GDI对象的类型
GetPath取得对当前路径进行定义的一系列数据
GetPixel在指定的设备场景中取得一个像素的RGB值
GetPolyFillMode针对指定的设备场景,获得多边形填充模式
GetROP2针对指定的设备场景,取得当前的绘图模式
GetStockObject取得一个固有对象(Stock)
GetSysColorBrush为任何一种标准系统颜色取得一个刷子
GetWinMetaFileBits通过在一个缓冲区中填充用于标准图元文件的数据,将一个增强型图元文件转换成标准windows图元文件
InvertRect通过反转每个像素的值,从而反转一个设备场景中指定的矩形
LineDDA枚举指定线段中的所有点
LineTo用当前画笔画一条线,从当前位置连到一个指定的点
-----------------------------------------