精华内容
下载资源
问答
  • WindowsAPI函数参考手册》是2002年人民邮电出版社出版的图书,作者是《windowsapI函数参考手册》组。《Windows API 函数参考手册》是关于Microsoft Win32 API函数的完整参考手册。书详细介绍了每一个Win32 API...
  • 详细介绍了每一个Win32 API函数的使用方法,其中着重介绍其原型表示、函数说明、参数说明、注意事项、相应头文件(.H)、链接库(.LIB或.DLL)和典型示例。对于每个函数《Windows API 函数参考手册》给出了相应...
  • 此资源为文档与封装的蓝牙通信接口,详细列出windows蓝牙通信的所有功能。并且中文注释其功能,看此文档即可知道windows蓝牙通信API的开发流程,在自己的项目使用想要的接口即可
  • 新编Windows_API_参考大全(真正完整版)中文版新编Windows_API_参考大全(真正完整版)中文版新编Windows_API_参考大全(真正完整版)中文版新编Windows_API_参考大全(真正完整版)中文版
  • WindowsAPI函数清单,英文名称The WindowsAPI function list,是MicrosoftWindows 32位平台的应用程序编程接口。
  • 此资源为文档与封装的蓝牙通信接口,详细列出windows蓝牙通信的所有功能。并且中文注释其功能,看此文档即可知道windows蓝牙通信API的开发流程,在自己的项目使用想要的接口即可
  • Windows API参考手册完全版.rar
  • 什么是Windows API

    千次阅读 2020-11-03 21:10:28
    Windows 工作原理的中心思想就是“动态链接”概念。Windows 自身带有一大套函数,应用程序就是通过调用这些函数来实现它的用户界面和在屏幕上显示文本和图形的。这些函数都是在动态链接库里实现的。这些文件的名称都...

    Windows 工作原理的中心思想就是“动态链接”概念。Windows 自身带有一大套函数,应用程序就是通过调用这些函数来实现它的用户界面在屏幕上显示文本和图形的。这些函数都是在动态链接库里实现的。这些文件的名称都带有后缀 .dll,或有时带有 .exe。

    Windows 的 3 个主要子系统:内核(kernel),用户(user),GDI。

    内核 负责操作系统的传统工作:如 内存管理,文件输入/输出 以及任务管理等。

    用户 指的是用户界面,负责所有的窗口管理

    GDI 就是图形设备接口,负责在屏幕或打印机上显示文本与图形

    在 Windows 程序中,调用 Windows 函数与调用 C 语言的库函数没有什么两样。

    最主要的区别就是 C 语言库函数的机器代码会直接链接到你的程序代码中去,而 Windows 函数则是放到你的程序之外的 DLL 里

    Windows 程序运行时,它通过一个叫“动态链接”的进程与 Windows 接口。

    每个 Windows 的 EXE 文件包含它所要用到的各个动态链接库以及库中的函数的引用地址

    当一个 Windows 程序被装入内存后,程序中的函数调用都被解析 DLL 函数入口的指针,同时这些被调用的函数也被装入内存。

    当链接 Windows 程序以生存可执行文件时,一定得链接你的编程环境所提供的特殊的“导入库”。

    这些导入库包含所有 Windows 函数调用要碰到的动态链接库的名字及引用信息。链接程序利用这些信息构建 EXE 文件中的表格,当装入程序的时候,Windows 要靠这些表格来解析 Windows 函数调用。

    另外值得提醒的一点是,MFC 是对 API 的封装,隐藏了许多复杂的情节。

    API(应用编程接口)是程序与处理器接口的命令集。最常用的就是在外部调用微软WINDOWS内部的进程。WINDOWS API包括成千的你可以使用的函数、结构、常量。这些函数是用C语言写的,在使用他们之前,你必须声明。定义Dll的进程将相当的复杂,甚至比VB还复杂。你可以使用API Viewer工具得到API函数的声明

    大部分的高级语言都支持API,微软函数类库(MFC)封装了大部分的Win32 API。ODBC API对提高数据库的操作速度大有好处。使用API,可以请求更底层的系统服务。API从简单的对话框到复杂的加密运算都提供支持。开发者应该知道如何在他们程序中使用API

    每种操作系统都有一套公用API和专有API。比如:Windows NT 支持MS-DOS, Win16, Win32, POSIX (便携式操作系统接口),OS/2 console API ;同时Windows 95 supports MS-DOS, Win16 和Win32 API。

    Win16 和 Win32 API:

    WIN16 是基于16位的处理器,并使用16位的值,它是一个独立的平台。比如:你可以运行TSR 程序在MS-DOS环境下。

    WIN32 是基于32位的处理器,并使用32位的值。他可用于任何操作系统,它的使用范围更广。

    Win32 API的DLL一般都具有32的后缀,比如:KERNEL32, USER32等。

    所有的API都在下面3个DLL中实现的。

    Kernel

    User

    GDI

    1. KERNEL

    它的库名是:KERNEL32.DLL,它是操作系统管理的API集

    Process loading. 加载进程

    Context switching.

    File I/O. 文件操作

    Memory management. 内存管理

    比如:GlobalMemoryStatus 函数获得目前系统物理虚拟内存的使用信息。

    2. USER

    在WIN32下,它的库名是 USER32.DLL

    它管理全部的用户界面,比如:

    Windows 窗口

    Menus 菜单

    Dialog Boxes 对话框

    Icons etc., 图标等

    比如:DrawIcon 画一个图标在指定的设备上。

    3. GDI (Graphical Device Interface)

    这个DLL是GDI32.dll,它负责图像的输出,使用GDI绘出窗口,菜单,对话框

    It can create Graphical Output. 输出图像

    比如:CreateBitmap 函数创建一个指定宽度、高度和颜色格式的位图。

    展开全文
  • 使用windows update API 获取补丁更新情况列表,包括已安装和未安装补丁列表,API可参考msdn。直接编译即可运行。 注:运行需要联网,否则获取不到补丁信息。
  • windows API CHM

    2015-10-30 11:45:26
    windows API CHM,1000个API函数的介绍 windows API CHM,1000个API函数的介绍 windows API CHM,1000个API函数的介绍 windows API CHM,1000个API函数的介绍 windows API CHM,1000个API函数的介绍
  • windows wifi API 完整实例

    热门讨论 2012-02-05 23:00:18
    windows wifi API 完整实例
  • 如何在JAVA调用windows_API
  • 在VBA调用Windows API的方法

    千次阅读 2019-10-08 17:52:14
    在VBA使用Windows API VBA是一种强大的编程语言,可用于自定义Microsoft Office解决方案。通过使用VBA处理一个或多个Office应用程序对象模型,可以容易地修改Office应用程序的功能或者能够使两个或多个Office应用...

    【转自“文韬武略,天下第一!”】:在VBA中使用Windows API

    VBA是一种强大的编程语言,可用于自定义Microsoft Office解决方案。通过使用VBA处理一个或多个Office应用程序对象模型,可以容易地修改Office应用程序的功能或者能够使两个或多个Office应用程序协同工作以完成单个应用程序无法完成的任务。然而,使用VBA仅能控制操作系统的一小部分。Windows API提供了控制操作系统绝大多数方面的功能。下面,介绍在VBA中使用Windows API的一些知识。

    理解APIs

    API只是一组函数,可用于处理组件、应用程序或操作系统。通常,API由一个或多个提供某种特定功能的DLLs组成。

    DLLs是包含函数的文件,能够从任何运行的Windows应用程序中调用DLLs。在运行时,DLL中的函数被动态链接到调用它的应用程序里。无论多少应用程序调用DLL中的函数,该函数仅存在于磁盘的单个文件中,并且DLL在内存中仅被创建一次。

    您可能最经常听说的API是Windows API,它包括组成Windows操作系统的DLLs。每个Windows应用程序都直接或间接地与Windows API相交互,Windows API确保运行在Windows下的所有应用程序都按一致的方式工作。

    除了Windows API外,还有其它发布的APIs可用。例如,邮件应用程序编程接口(MAPI)是一组用于编写电子邮件应用程序的DLLs。

    APIs通常是由创建Windows应用程序的C和C++程序员编写,但能够使用VBA调用DLL中的函数。因为大多数DLLs最初都是由C/C++程序员编写和文档规范,所以调用DLL函数与调用VBA函数不同。为了使用API,必需理解如何传递参数到DLL函数。

    为了调用Windows API中的函数,需要描述这些可用的函数的文档规范,如何在VBA中声明这些函数,以及如何调用它们。下面是两个有用的资源:

    1、Win32API.txt文件,包含Windows API中大多数函数的VBA Declare(声明)语句。可以使用API Viewer加载宏查找和复制需要的Declare语句。可以在下面的站点下载API声明查看器:

    http://www.activevb.de/rubriken/apiviewer/index-apiviewereng.html

    win32api.txt文件下载:

    2、Microsoft Platform SDK,包含复杂的Windows API文档。可以在下面的地址中查看:
    https://docs.microsoft.com/en-us/windows/win32/api/_winmsg/

    使用Declare语句

    在从VBA中调用DLL里的函数之前,必须为VBA提供在哪里找到函数以及如何调用该函数的信息,有两种方法:

    1、设置对DLL类型库的引用。

    2、在模块中使用Declare语句。

    设置对DLL类型库的引用是使用DLL中的函数的最容易的方法。一旦设置引用,就可以将其当作工程里的一部分一样调用DLL函数。然而,也要注意一些事项。首先,设置对多个类型库的引用会影响应用程序的性能;其次,不是所有的DLLs都提供类型库,虽然可以对没有提供类型库的DLL设置引用,但不能调用该DLL中的函数。

    注意,组成Windows API的DLLs没有提供类型库,因此不能设置对它们的引用并调用其中的函数。要调用Windows API中的函数,必须在工程里模块的声明部分包括Declare语句。

    Declare语句是一个定义,告诉VBA在哪里找到特定的DLL函数以及如何调用该函数。在代码中添加Declare语句最简单的办法是使用API Viewer加载宏,其中包含Windows API中大多数函数的Declare语句,也包含一些函数所需要的常量和类型定义。

    Declare语句声明的形式如下:

    [Public|Private]Declare Sub name Lib "libname" [Alias "aliasname"][([arglist])]
    [Public|Private]Declare Function name Lib "libname" [Alias "aliasname"] [([arglist])] [As type]
    

    下面是GetTempPath函数的Declare语句的示例,该函数返回Windows临时文件夹的路径(默认为C:\Windows\Temp):

    Private Declare Function GetTempPath Lib "kernel32" _
    Alias "GetTempPathA" (ByVal nBufferLength As Long, _
    ByVal lpBuffer As String) As Long
    

    关键字Declare告诉VBA在工程中要包含的DLL函数的定义。在标准模块中的Declare语句可以是公共的或私有的,取决于你希望API函数仅用于单个模块还是整个工程。在类模块中,Declare语句必须是私有的。

    在关键字Function之后是函数的名字,具体地说,是从VBA中调用该函数时使用的名字。这个名字可以与API函数本身的名字相同,也可以在Declare语句中使用关键字Alias指定打算在VBA中通过不同的名字(别名)调用该函数。

    在上面的示例中,在DLL中API函数的名字是GetTempPathA,从VBA中调用该函数时使用的名字是GetTempPath。注意,DLL函数的实际名字出现在关键字Alias之后,同时也注意到GetTempPath是Win32API.txt文件用于该函数的别名,但你可以将其改变为任何你想要的名字。

    下面是为什么要在Declare语句中使用别名的一些理由:

    • 一些API函数的名字以下划线(_)开始,在VBA中是不合乎语法的。为了从VBA中调用该函数,需要使用别名。
    • 因为别名允许将DLL函数命名为你所希望的名字,所以可以使函数名字遵循你自已在VBA中的命名标准。
    • 因为API函数是区分大小写的,而VBA函数则不,所以可以使用别名来改变函数名的大小写。
    • 一些DLL函数带有接受不同数据类型的参数,这些函数的VBA声明语句定义这些参数为类型Any,调用带有声明为Any的参数的DLL函数是危险的,因为VBA不会执行任何数据类型检查。如果想避免传递类型为Any的参数的危险,可以声明相同的DLL函数的多个版本,每一个都具有不同的名字和不同的数据类型。
    • Windows API为所有接受字符串参数的函数都包含两个版本:ANSI版和Unicode版。ANSI版带有"A"后缀,正如上例所示,而Unicode版带有"W"后缀。虽然VBA使用Unicode,但在调用DLL中的函数之前,它将所有的字符串转换为ANSI字符串,因此在从VBA中调用Windows API函数时通常使用ANSI版。API Viewer加载宏自动为所有接6受字符串参数的函数命名别名,因此可以不必包含"A"后缀而调用该函数。

    关键字Lib指定包含函数的DLL。注意,在声明语句里以字符串形式包含DLL的名字。如果在系统中没有找到关键字Lib之后指定的DLL,对该函数的调用将失败,导致运行时错误:48,装载DLL错误。因为可以在VBA代码中处理这种错误,所以可以编写健壮的代码得体地处理错误。

    下面列出了Windows API中最常使用的DLLs:

    • Kernel32.dll:低级别的操作系统函数,例如内存管理和资源处理。
    • User32.dll:Windows管理函数,例如消息处理、计时器、菜单和通讯。
    • GDI32.dll:图像设备接口(GDI)库,包含设置输出的函数,例如绘图、显示上下文和字体管理。

    大多数DLLs,包括Windows API中的DLLs,都采用C/C++编写,因此,传递参数到DLL函数需要参数的理解以及C/C++接受的数据类型,而这些不同于VBA函数。

    同时,DLL函数的许多参数按值传递。默认情况下,VBA中的参数按引用传递。因此,当DLL函数需要按值传递的参数时,在函数定义中包括关键字ByVal是必要的。在函数定义中忽略ByVal关键字可能会在应用程序中导致无效的页错误。有时,可能会发生VBA运行时错误:49,坏的DLL调用协议。

    按引用传递参数传递该参数的内存位置到被调用的过程,如果该过程修改了参数的值,那么会修改该参数的唯一的副本,因此,当返回到调用过程时,参数包含的是修改后的值。

    按值传递参数到DLL函数,将传递该参数的副本,函数操作该参数的副本,避免了修改实际参数的内容。当返回到调用过程时,该参数包含与调用其它过程前相同的值。

    因为按引用传递允许在内存中修改参数值,如果不恰当地按引用传递参数,DLL函数可能会覆盖它不应该覆盖的内存,导致错误或者不可预料的结果。Windows维护许多值不应该被覆盖,例如,Windows为每个窗口赋惟一的32位标识符,称作句柄(handle)。句柄总是按值传递给API函数,因为如果Windows修改了某窗口的句柄,那么不再能够追踪到该窗口。(虽然关键字ByVal出现在String类型的一些参数前面,但是字符串总是按引用被传递到Windows API函数)

    上述声明语句接受两个参数,一个为Long型,另一个为String型,并返回一个Long型值。

    使用常量

    除了DLL函数的声明语句外,一些函数还需要定义常量以及在函数中使用的类型。在模块的声明部分包括常量和用户定义类型。

    如何知道函数需要的常量和用户定义类型呢?需要查看该函数的文档。Win32API.txt文件包含函数的常量和用户定义类型的定义。可以使用API Viewer加载宏找出这些常量和用户定义类型,并将它们复制到代码中。不巧的是,常量和用户定义类型不会以任何方式与需要它们的声明语句相联系,因此,仍然需要检查DLL函数的文档,决定哪个常量和类型与哪个声明语句匹配。

    函数可能需要传递常量来指明想要函数返回的信息。例如,GetSystemMetrics函数接受75个常量,每一个都指定操作系统的不同方面,该函数返回的信息取决于传递给它的常量。要调用GetSystemMetrics,不需要包括所有的75个常量,只需包括要使用的就可以了。

    建议定义常量而不是简单地传递它们代表的值。Microsoft确保在将来的版本中仍然会保留相同的常量,但不保证常量的值相同。

    DLL函数需要的常量通常是隐含的,因此需要查阅函数的文档来确定传递的常量,以返回特定的值。

    在《Professional Excel Development》中介绍了如何查找常量的值的方法。即在Microsoft的站点下载并安装核心SDK软件包,其中有一个名为"include"的子目录,所有用于创建动态链接库(DLL)的C++头文件都存放在这个目录中。通过搜索就能找到常量所在的文件,例如查找SM_CXSCREEN,会返回文件"winuser.h",打开该文件查询就可找到相关的常量。

    下面的示例是包括GetSystemMetrics函数的声明语句,接受两个常量,然后展示如何从属性过程中调用GetSystemMetrics,以像素为单位返回屏幕的高度。

    Declare Function GetSystemMetrics Lib "User32" (ByVal nIndex As Long) As Long
    Const SM_CXSCREEN As Long = 0 '屏幕宽度
    Const SM_CYSCREEN As Long = 1 '屏幕高度
    
    Public Property Get ScreenHeight() As Long
    '以像素为单位返回屏幕的高度
    ScreenHeight = GetSystemMetrics(SM_CYSCREEN)
    End Property
    
    Public Property Get ScreenWidth() As Long
    '以像素为单位返回屏幕的宽度
    ScreenWidth = GetSystemMetrics(SM_CXSCREEN)
    End Property
    

    使用用户定义类型

    用户定义类型是一种数据结构,可以存储多个相关的不同类型的变量,与C/C++中的结构一致。有时,传递空的用户定义类型到DLL函数,函数填充值;有时,从VBA填充用户定义类型,并将其传递给DLL函数。

    可以将用户定义类型作为一箱抽屉,每个抽屉可以包含不同类型的项目,但将它们组合在一起可以当作相关项目的单个箱子。可以从任何抽屉获得项目而不必担心存储在任何其它抽屉中的项目。

    要创建用户定义类型,使用Type … End Type语句。在Type…End Type语句里,列出了每个项目,包含值和数据类型。用户定义类型的元素可以是数组。

    下面的代码段展示如何定义RECT用户定义类型,和管理屏幕矩形块的几个Windows API函数一起使用。例如,GetWindowRect函数接受RECT类型的数据结构,使用关于窗口的左侧、顶部、右侧和底部位置的信息填充。

    Type RECT
    Left As Long
    Top As Long
    Right As Long
    Bottom As Long
    End Type
    

    要传递用户定义类型到DLL函数,必须创建该类型的变量。例如,如果打算传递RECT类型的用户定义类型到DLL函数,那么就要包括变量声明,如下所示:

    Private rectWindow As RECT
    

    可以引用用户定义类型里的单个元素,如下所示:

    Debug.Print rectWindow.Left
    

    使用句柄

    调用DLLs中的函数之前需要理解的另一个重要的概念是句柄(handle)。简单地说,句柄是32位正整数,Windows用于识别窗口或另一个对象,例如字体或位图。

    在Windows中,窗口有许多不同的表现形式。事实上,在屏幕中看到的几乎所有事情都在窗口里,并且不能看到的大多数事情也在窗口里。窗口能够是一个绑定的屏幕矩形区域,就像您习惯看到的应用程序窗口一样。窗体中的控件,例如列表框或滚动条,也都是窗口,虽然不是所有类型的控件都是窗口。在桌面上显示的图标以及桌面本身,都是窗口。

    因为所有这些类型的对象都是窗口,所以Windows能够相同地对待它们。Windows提供给每个窗口一个唯一的句柄,并使用该句柄去处理窗口。许多API函数返回句柄或者接受句柄作为其参数。

    当窗口创建时Windows赋句柄给该窗口,当窗口销毁时Windows释放该句柄。虽然句柄保留的时间与窗口存在的时间相同,但不保证一个窗口在销毁并重新创建后有相同的句柄。因此,如果在变量中存储句柄,那么记住该窗口销毁后,该句柄不再有效。

    GetActiveWindow函数是返回窗口句柄的函数示例,此时,应用程序窗口是当前活动的窗口。GetWindowText函数接受某窗口的句柄,并且如果窗口有标题的话返回该窗口的标题。下面的程序使用GetActiveWindow返回活动窗口的句柄,GetWindowText返回其标题:

    Declare Function GetActiveWindow Lib "user32" () As Long
    Declare Function GetWindowText Lib "user32" _
    Alias "GetWindowTextA" (ByVal Hwnd As Long, _
    ByVal lpString As String, ByVal cch As Long) As Long
     
    Function ActiveWindowCaption() As String
    Dim strCaption As String
    Dim lngLen As Long
    '创建使用空字符填充的字符串
    strCaption = String$(255, vbNullChar)
    '返回字符串的长度
    lngLen = Len(strCaption)
    '调用GetActiveWindow来返回活动窗口的句柄
    '与字符串和其长度一起,传递句柄到GetWindowText
    If (GetWindowText(GetActiveWindow, strCaption, lngLen) > 0) Then
    '返回Windows已写入的值给字符串
    ActiveWindowCaption = strCaption
    End If
    End Function
    

    GetWindowText函数接受三个参数:窗口的句柄、将返回窗口标题里的空结尾的字符串、以及字符串的长度。

    下面列出了Excel中常用的窗口类名称:

    • Excel主窗口:XLMAIN
    • Excel桌面:XLDESK
    • Excel工作表:EXCEL7
    • Excel用户窗体:ThunderDFrame(Excel 2000以后版本)、ThunderRT6DFrame(Excel 2000以后版本,用于作为COM加载项时)、ThunderXFrame(Excel 97)
    • Excel状态栏:EXCEL4
    • Excel图表窗口:EXCELE(Excel2007以前版本)

    FindWindow函数使用类名和窗口标题查找窗口。下面的代码以像素为单位查找Excel主窗口的位置和大小:

    '包含窗口大小的用户定义类型
    Type RECT
    Left As Long
    Top As Long
    Right As Long
    Bottom As Long
    End Type
    
    '查找窗口的API函数
    Declare Function FindWindow Lib "user32" _
    Alias "FindWindowA" ( _
    ByVal lpClassName As String, _
    ByVal lpWindowName As String) As Long
     
    '获取窗口大小的API函数
    Declare Function GetWindowRect Lib "user32" ( _
    ByVal hWnd As Long, _
    lpRect As RECT) As Long
     
    Sub ShowExcelWindowSize()
    Dim hWnd As Long, uRect As RECT
    '获取Excel主窗口的句柄
    'Excel 2002及以后版本也可使用hWnd=Application.Hwnd
    hWnd = FindWindow("XLMAIN", Application.Caption)
    '将窗口大小信息存入到RECT结构中
    GetWindowRect hWnd, uRect
    '显示结果
    MsgBox "这个Excel窗口的尺寸为:" & _
    vbCrLf & "左侧:" & uRect.Left & _
    vbCrLf & "右侧:" & uRect.Right & _
    vbCrLf & "顶部:" & uRect.Top & _
    vbCrLf & "底部:" & uRect.Bottom & _
    vbCrLf & "宽度:" & (uRect.Right - uRect.Left) & _
    vbCrLf & "高度:" & (uRect.Bottom - uRect.Top)
    End Sub
    

    调用函数

    虽然调用DLL函数的许多方式与调用VBA函数相似,但是开始时有一些不同可能会使DLL函数混淆。下面将介绍如何输入DLL函数中的参数并加前缀、如何返回字符串、如何传递数据结构、能够接受什么返回值、以及如何获取错误信息。

    参数数据类型

    在C/C++中使用的数据类型、用于描述它们的标记都不同于在VBA中的用法,下面描述了DLL函数中常用的数据类型以及它们在VBA中的等效表示。

    C/C++数据类型匈牙利前缀描述等效的VBA表示
    BOOLb8位布尔值。0表示False;非0表示TrueBoolean或Long
    BYTEch8位无符号整数Byte
    HANDLEh32位无符号整数,代表Windows对象的句柄Long
    intn16位符号整数Integer
    longl32位符号整数Long
    LPlp32位对内存中C/C++结构、字符串、函数或其它数据的长指针Long
    LPZSTRlpsz32位对C类型空结尾字符串的长指针Long

    虽然您应该熟悉这些数据类型和前缀,但前面提到的Win32API.txt文件包含了准备在VBA中使用的声明语句。如果在代码中使用这些声明语句,那么函数参数已经定义了正确的VBA数据类型。

    在《Excel 2007 VBA参考大全》的第27章,详细介绍了如何将C-样式声明转换为VBA声明语句。

    只要已经定义并传递了正确的数据类型,调用DLL函数与调用VBA函数采取相同的方法。当然也有例外,这将在下面的内容中介绍。

    从DLL函数中返回字符串

    DLL函数不会以VBA函数相同的方法返回字符串。因为字符串总是按引用传递到DLL函数,DLL函数能够修改字符串参数的值。宁可返回字符串作为函数的返回值,就像可能在VBA中做的那样,DLL函数返回字符串到传递给该函数的String类型的参数。函数的实际返回值经常是一个长整型值,指定写入到字符串参数的字节数量。

    接受字符串参数的DLL函数获得指针,指向内存中该字符串的位置。指针只是内存地址,表明在哪里存储字符串。因此,当从VBA中传递字符串到DLL函数时,传递给DLL函数一个指针,指向内存中的字符串。接着,这个DLL函数修改存储在那个地址的字符串。

    要调用写到String变量的DLL函数,需要采取额外的步骤合适地格式字符串。首先,String变量必须是空结尾字符串。一个空结尾字符串以特定的空字符结束,空字符通过VBA常量vbNullChar来指定。

    其次,DLL函数不能修改已经创建的字符串的大小。因此,需要确保传递给函数的字符串足够大以容纳整个返回值。当传递字符串到DLL函数中时,通常需要指定在另一个传递的参数中字符串的大小。Windows追踪字符串的长度,以确保不会覆盖掉字符串已使用过的内存。

    传递字符串到DLL函数中的一个好方法是创建String变量,并使用String$函数在其中填充空字符,使其足够大以容纳函数返回的字符串。例如,下面的代码创建一个144字节长的字符串,并使用空字符串填充:

    Dim strTempPath As String
    strTempPath = String$(144, vbNullChar)
    

    当传递字符串到DLL函数中时,如果不知道字符串的长度,那么可以使用Len函数确定其长度。

    获取Windows临时文件夹的GetTempPath函数,就是返回String值的DLL函数的例子。该函数接受两个参数,一个空结尾的字符串变量和一个包含字符串长度的数值变量。修改该字符串以便包含路径,例如C:\Temp\。(Windows需要一个临时文件夹存在,于是该函数应该总是返回该文件夹的路径。如果由于某种原因不存在临时文件夹,GetTempPath返回0)。

    下面的程序调用GetTempPath函数获取Windows临时文件夹的路径:

    Declare Function GetTempPath Lib "kernel32" Alias "GetTempPathA" _
    (ByVal nBufferLength As Long, ByVal lpBuffer As String) As Long
    
    Property Get GetTempFolder() As String
    '返回用户临时文件夹的路径.
    '对于根目录,Windows需要一个临时文件夹存在
    '因此应该总是返回其路径
    '以防万一,检查GetTempPath的返回值
    Dim strTempPath As String
    Dim lngTempPath As Long
    '使用空字符填充字符串
    strTempPath = String(144, vbNullChar)
    '获得字符串的长度
    lngTempPath = Len(strTempPath)
    '调用GetTempPath,传递字符串长度和字符串
    If (GetTempPath(lngTempPath, strTempPath) > 0) Then
    'GetTempPath返回路径到字符串中.
    '截去字符串开始的空字符
    GetTempFolder = Left(strTempPath, InStr(1, strTempPath, vbNullChar) - 1)
    Else
    GetTempFolder = ""
    End If
    End Property
    

    注意,当传递字符串到函数中时,使用空字符填充该字符串。函数写入返回的字符串值"C:\Temp"到字符串变量的第一部分中,并且剩下的保留空字符填充,接着使用Left函数截取字符串。

    GetTempPath函数的实际返回值是已经被写到字符串变量中的字符数。如果返回的字符串是"C:\Temp",那么GetTempPath函数返回8。

    注意,这仅对从函数返回字符串时传递空结尾字符串及其大小是必需的。如果函数不返回字符串到字符串参数中,而是接受对函数指定信息的字符串,那么只需传递正常的VBA字符串变量。

    传递用户定义类型到DLL函数

    许多DLL函数需要通过使用预定义的格式传递数据结构。当从VBA中调用DLL函数时,根据函数的需求传递已经定义的用户定义类型。

    通过查看函数的声明语句,您能够理解什么时候需要传递用户定义类型以及需要在代码中包括哪种类型定义。需要数据结构的参数总是被声明为长指针:指向内存中数据结构的32位数字值。为长指针参数约定的前缀是"lp"。此外,参数的数据类型是数据结构的名称。

    例如,看看GetLocalTime函数和SetLocalTime函数的声明语句:

    Private Declare Sub GetLocalTime Lib "kernel32" _
    (lpSystem As SYSTEMTIME)
    Private Declare Function SetLocalTime Lib "kernel32" _
    (lpSystem As SYSTEMTIME) As Long
    

    两个函数都接受SYSTEMTIME类型的参数,即包含日期和时间信息的数据结构。下面是SYSTEMTIME类型的定义:

    Private Type SYSTEMTIME
    wYear As Integer
    wMonth As Integer
    wDayOfWeek As Integer
    wDay As Integer
    wHour As Integer
    wMinute As Integer
    wSecond As Integer
    wMilliseconds As Integer
    End Type
    

    要将数据结构传递给函数,必须声明SYSTEMTIME类型的变量,如下所示:

    Private sysLocalTime As SYSTEMTIME
    

    当调用GetLocalTime时,传递SYSTEMTIME类型的变量到该函数,并且使用表示当前本地的年、月、日、星期几、小时、分、秒、毫秒的数字值填充该数据结构。例如,下面的Property Get程序调用GetLocalTime返回表明当前小时的值:

    Public Property Get Hour() As Integer
    '返回当前时间,然后返回小时
    GetLocalTime sysLocalTime
    Hour = sysLocalTime.wHour
    End Property
    

    当调用SetLocalTime时,也传递了SYSTEMTIME类型的变量,但首先提供数据结构的一个或多个元素的值。例如,下面的Property Let程序设置本地系统时间的小时值。首先,调用GetLocalTime函数获取本地时间的当前值到数据结构中,然后使用传递给属性过程的值更新数据结构的sysLocalTime.wHour的值。最后,调用SetLocalTime函数,传递相同的数据结构,包含通过GetLocalTime加新小时值而取得的值。

    Public Property Let Hour(intHour As Integer)
    '获取当前时间以便所有值都是当前的
    '然后设计本地时间的小时部分
    GetLocalTime sysLocalTime
    sysLocalTime.wHour = intHour
    SetLocalTime sysLocalTime
    End Property
    

    GetLocalTime函数和SetLocalTime函数与GetSystemTime函数和SetSystemTime函数相似。主要的不同在于,GetSystemTime函数和SetSystemTime函数表达的时间为格林威治标准时间。例如,如果本地时间是午夜12时,而您居住在西海岸,那么格林威治标准时间就是上午8时,有8小时的时差。GetSystemTime函数返回当前时间即8:00 A.M,而GetLocalTime返回午夜12:00。

    理解Any数据类型

    一些带有一个参数的DLL函数可以接受多个数据类型。在DLL函数的声明语句中,这样的参数被声明为类型Any。VBA允许传递任何数据类型到这个参数。然而,DLL函数可能被设计为接受仅仅两个或三个不同的数据类型,因此传递错误的数据类型可能会导致应用程序错误。

    通常,当在VBA工程中编译代码时,VBA对传递给每个参数的值执行类型检查。也就是说,确保传递的值的数据类型与函数定义中的参数的数据类型相匹配。例如,如果参数定义为Long型,而试图传递String型的数值,则会发生编译时错误。这适用于调用内置的VBA函数、用户定义函数、或者DLL函数。当将参数声明为类型Any时,不会进行类型检查,因此当传递值到这种类型的参数时应该谨慎。

    一些具有一个参数的DLL函数可以接受字符串或者指向字符串的空指针。指向字符串的空指针是一个特别的指针,指令Windows忽略所给的参数。它与零长度字符串("")不同。在VBA的早期版本中,程序员必须声明参数为类型Any,或者声明DLL函数的两个版本,即一个版本定义参数类型为String,一个版本定义参数类型为Long。现在VBA包括vbNullString常量,代表指向字符串的空指针,这样可以声明参数为String类型,并且在需要传递空指针的情形下传递vbNullString常量。

    获取错误信息

    DLL函数中发生的运行时错误的行为不同于VBA中的运行时错误,即没有错误消息框显示。当运行时错误发生时,DLL函数返回某值表时发生了错误,而且错误不会中断VBA代码的执行。

    Windows API中的一些函数存储运行时错误的错误信息。如果使用C/C++编程,可以使用GetLastError函数获取关于发生的最后一次错误的信息。然而,从VBA中,GetLastError函数可能返回不确切的结果。要从VBA获得关于DLL错误的信息,可以使用VBA的Err对象的LastDLLError属性。LastDLLError属性返回发生的错误号。

    为了使用LastDLLError属性,需要知道与错误相对应的错误号。在Win32API.txt文件没有这方面的可用信息,而Microsoft Platform SDK中可以找到。

    下面的示例展示在已经调用了Windows API中的函数后如何使用LastDLLError属性。PrintWindowCoordinates程序接受窗口句柄,并调用GetWindowRect函数。GetWindowRect使用组成窗口的矩形的边的长度填充RECT数据结构。如果传递了无效的句柄,将发生错误,并且可以通过LastDLLError属性获得错误号。

    Declare Function GetWindowRect Lib "user32" (ByVal hwnd As Long, _
    lpRect As RECT) As Long
     
    Type RECT
    Left As Long
    Top As Long
    Right As Long
    Bottom As Long
    End Type
     
    Const ERROR_INVALID_WINDOW_HANDLE As Long = 1400
    Const ERROR_INVALID_WINDOW_HANDLE_DESCR As String = "无效的窗口句柄."
     
    Sub PrintWindowCoordinates(hwnd As Long)
    '以像素为单位打印窗口左侧,右侧,顶部和底部位置
    Dim rectWindow As RECT
    '传递窗口句柄和空的数据结构
    '如果函数返回0,那么错误就发生了
    If GetWindowRect(hwnd, rectWindow) = 0 Then
    '因为传递了无效的句柄
    '所以如果发生错误则检查LastDLLError并显示对话框
    If Err.LastDllError = ERROR_INVALID_WINDOW_HANDLE Then
    MsgBox ERROR_INVALID_WINDOW_HANDLE_DESCR, _
    Title:="错误!"
    End If
    Else
    Debug.Print rectWindow.Bottom
    Debug.Print rectWindow.Left
    Debug.Print rectWindow.Right
    Debug.Print rectWindow.Top
    End If
    End Sub
    

    要获得活动窗口的坐标,可以通过使用GetActiveWindow函数返回活动窗口的句柄,并将结果传递到前面示例定义的过程中。要使用GetActiveWindow函数,包括下面的声明语句:

    Declare Function GetActiveWindow Lib "user32" () As Long
    

    输入下面的过程后运行:

    Sub test()
    PrintWindowCoordinates (GetActiveWindow)
    End Sub
    

    要生成一条错误消息,随便使用一个长整型数值调用这个过程。

    参考资源:

    David Shank,《Office VBA and the Windows API》

    《Excel 2007 VBA参考大全》

    《Professional Excel Development》

    《VBA and Macros for Microsoft Excel》

    展开全文
  • 该资源包含精通windows api pdf与光盘文件实例代码
  • Windows API函数大全(Windows编程参考手册)

    千次阅读 多人点赞 2020-12-10 15:50:58
    Windows API包括几千个可调用的函数,它们大致可以分为以下几个大类:基本服务、组件服务、用户界面服务、图形多媒体服务、消息和协作、网络、Web服务。

    文档声明:
    以下资料均属于本人在学习过程中产出的学习笔记,如果错误或者遗漏之处,请多多指正。并且该文档在后期会随着学习的深入不断补充完善。感谢各位的参考查看。


    笔记资料仅供学习交流使用,转载请标明出处,谢谢配合。
    如果存在相关知识点的遗漏,可以在评论区留言,看到后将在第一时间更新。
    作者:Aliven888

    1、Windows API函数分类

    Windows API包括几千个可调用的函数,它们大致可以分为以下几个大类:基本服务组件服务用户界面服务图形多媒体服务消息和协作网络Web服务

    Windows API所提供的七类功能详细介绍:

    1、基础服务(Base Services): 提供对Windows系统可用的基础资源的访问接口。比如象:文件系统(file system)、外部设备(device)、,进程(process)、线程(thread)以及访问注册表(Windows registry)和错误处理机制(error handling)。这些功能接口位于,16位Windows下的kernel.exe、krnl286.exe或krnl386.exe系统文档中;以及32位Windows下的 kernel32.dll和advapi32.dll中。
    2、图形设备接口(GDI): 提供功能为:输出图形内容到显示器、打印机以及其他外部输出设备。它位于16位Windows下的gdi.exe;以及32位Windows下的gdi32.dll。
    3、图形化用户界面(GUI): 提供的功能有创建和管理屏幕和大多数基本控件(control),比如按钮和滚动条。接收鼠标和键盘输入,以及其他与GUI有关的功能。这些调用接口位于:16位Windows下的user.exe,以及32位Windows下的user32.dll。从Windows XP版本之后,基本控件和通用对话框控件(Common Control Library)的调用接口放在comctl32.dll中。
    4、通用对话框链接库(Common Dialog Box Library): 为应用程序提供标准对话框,比如打开/保存文档对话框、颜色对话框和字体对话框等等。这个链接库位于:16位Windows下的commdlg.dll中,以及32位Windows下comdlg32.dll中。它被归类为User Interface API之下。
    5、通用控件链接库(Common Control Library):为应用程序提供接口来访问操作系统提供的一些高级控件。比如像:状态栏(status bar)、进度条(progress bars)、工具栏(toolbar)和标签(tab)。这个链接库位于:16位Windows下的commctrl.dll中,以及32位Windows下comctl32.dll中。。它被归类为User Interface API之下。
    6、Windows外壳(Windows Shell):作为Windows API的组成部分,不仅允许应用程序访问Windows外壳提供的功能,还对之有所改进和增强。它位于16位Windows下的shell.dll中,以及32位Windows下的shell32.dll中(Windows 95则在 shlwapi.dll中)。 它被归类为User Interface API之下。
    7、网络服务(Network Services):为访问操作系统提供的多种网络 功能提供接口。它包括NetBIOS、Winsock、NetDDE及RPC等。

    2、文件处理函数

    函数名功能描述
    CloseHandle关闭一个内核对象。其中包括文件、文件映射、进程、线程、安全和同步对象等
    CompareFileTime对比两个文件的时间
    CopyFile复制文件
    CreateDirectory创建一个新目录
    CreateFile打开和创建文件、管道、邮槽、通信服务、设备以及控制台
    CreateFileMapping创建一个新的文件映射对象
    DeleteFile删除指定文件
    DeviceIoControl对设备执行指定的操作
    DosDateTimeToFileTime将DOS日期和时间值转换成一个 win32 FILETIME 值
    FileTimeToDosDateTime将一个 win32 FILETIME 值转换成DOS日期和时间值
    FileTimeToLocalFileTime将一个FILETIME结构转换成本地时间
    FileTimeToSystemTime根据一个FILETIME结构的内容,装载一个SYSTEMTIME结构
    FindClose关闭由FindFirstFile函数创建的一个搜索句柄
    FindFirstFile根据文件名查找文件
    FindNextFile根据调用FindFirstFile函数时指定的一个文件名查找下一个文件
    FlushFileBuffers针对指定的文件句柄,刷新内部文件缓冲区
    FlushViewOfFile将写入文件映射缓冲区的所有数据都刷新到磁盘
    GetBinaryType判断文件是否可以执行
    GetCompressedFileSize判断一个压缩文件在磁盘上实际占据的字节数
    GetCurrentDirectory获取当前进程的所在目录
    GetDiskFreeSpace获取与一个磁盘的组织有关的信息,以及了解剩余空间的容量
    GetDiskFreeSpaceEx获取与一个磁盘的组织以及剩余空间容量有关的信息
    GetDriveType判断一个磁盘驱动器的类型
    GetExpandedName取得一个压缩文件的全名
    GetFileAttributes判断指定文件的属性
    GetFileInformationByHandle这个函数提供了获取文件信息的一种机制
    GetFileSize判断文件长度
    GetFileTime取得指定文件的时间信息
    GetFileType在给出文件句柄的前提下,判断文件类型
    GetFileVersionInfo从支持版本标记的一个模块里获取文件版本信息
    GetFileVersionInfoSize针对包含了版本资源的一个文件,判断容纳文件版本信息需要一个多大的缓冲区
    GetFullPathName获取指定文件的完整路径名
    GetLogicalDrives判断系统中存在哪些逻辑驱动器字母
    GetLogicalDriveStrings获取一个字串,其中包含了当前所有逻辑驱动器的根驱动器路径
    GetOverlappedResult判断一个重叠操作当前的状态
    GetPrivateProfileInt为初始化文件(.ini文件)中指定的条目获取一个整数值
    GetPrivateProfileSection获取指定小节(在.ini文件中)所有项名和值的一个列表
    GetPrivateProfileString为初始化文件中指定的条目取得字串
    GetProfileInt取得win.ini初始化文件中指定条目的一个整数值
    GetProfileSection获取指定小节(在win.ini文件中)所有项名和值的一个列表
    GetProfileString为win.ini初始化文件中指定的条目取得字串
    GetShortPathName获取指定文件的短路径名
    GetSystemDirectory取得Windows系统目录(即System目录)的完整路径名
    GetTempFileName这个函数包含了一个临时文件的名字,它可由应用程序使用
    GetTempPath获取为临时文件指定的路径
    GetVolumeInformation获取与一个磁盘卷有关的信息
    GetWindowsDirectory获取Windows目录的完整路径名
    hread参考lread
    hwrite参考lwrite函数
    lclose关闭指定的文件
    lcreat创建一个文件
    llseek设置文件中进行读写的当前位置
    LockFile锁定文件的某一部分,使其不与其他应用程序共享
    LockFileEx与LockFile相似,只是它提供了更多的功能
    lopen以二进制模式打开指定的文件
    lread将文件中的数据读入内存缓冲区
    lwrite将数据从内存缓冲区写入一个文件
    LZClose关闭由LZOpenFile 或 LZInit函数打开的一个文件
    LZCopy复制一个文件
    LZInit这个函数用于初始化内部缓冲区
    LZOpenFile该函数能执行大量不同的文件处理,而且兼容于压缩文件
    LZRead将数据从文件读入内存缓冲区
    LZSeek设置一个文件中进行读写的当前位置
    MapViewOfFile将一个文件映射对象映射到当前应用程序的地址空间
    MoveFile移动文件
    OpenFile这个函数能执行大量不同的文件操作
    OpenFileMapping打开一个现成的文件映射对象
    QueryDosDevice在Windows NT中,DOS设备名会映射成NT系统设备名。该函数可判断当前的设备映射情况
    ReadFile从文件中读出数据
    ReadFileEx与ReadFile相似,只是它只能用于异步读操作,并包含了一个完整的回调
    RegCloseKey关闭系统注册表中的一个项(或键)
    RegConnectRegistry访问远程系统的部分注册表
    RegCreateKey在指定的项下创建或打开一个项
    RegCreateKeyEx在指定项下创建新项的更复杂的方式。在Win32环境中建议使用这个函数
    RegDeleteKey删除现有项下方一个指定的子项
    RegDeleteValue删除指定项下方的一个值
    RegEnumKey枚举指定项的子项。在Win32环境中应使用RegEnumKeyEx
    RegEnumKeyEx枚举指定项下方的子项
    RegEnumValue枚举指定项的值
    RegFlushKey将对项和它的子项作出的改动实际写入磁盘
    RegGetKeySecurity获取与一个注册表项有关的安全信息
    RegLoadKey从以前用RegSaveKey函数创建的一个文件里装载注册表信息
    RegNotifyChangeKeyValue注册表项或它的任何一个子项发生变化时,用这个函数提供一种通知机制
    RegOpenKey打开一个现有的注册表项
    RegOpenKeyEx打开一个现有的项。在win32下推荐使用这个函数
    RegQueryInfoKey获取与一个项有关的信息
    RegQueryValue取得指定项或子项的默认(未命名)值
    RegQueryValueEx获取一个项的设置值
    RegReplaceKey用一个磁盘文件保存的信息替换注册表信息;并创建一个备份,在其中包含当前注册表信息
    RegRestoreKey从一个磁盘文件恢复注册表信息
    RegSaveKey将一个项以及它的所有子项都保存到一个磁盘文件
    RegSetKeySecurity设置指定项的安全特性
    RegSetValue设置指定项或子项的默认值
    RegSetValueEx设置指定项的值
    RegUnLoadKey卸载指定的项以及它的所有子项
    RemoveDirectory删除指定目录
    SearchPath查找指定文件
    SetCurrentDirectory设置当前目录
    SetEndOfFile针对一个打开的文件,将当前文件位置设为文件末尾
    SetFileAttributes设置文件属性
    SetFilePointer在一个文件中设置当前的读写位置
    SetFileTime设置文件的创建、访问及上次修改时间
    SetHandleCount这个函数不必在win32下使用;即使使用,也不会有任何效果
    SetVolumeLabel设置一个磁盘的卷标(Label)
    SystemTimeToFileTime根据一个FILETIME结构的内容,载入一个SYSTEMTIME结构
    UnlockFile解除对一个文件的锁定
    UnlockFileEx解除对一个文件的锁定
    UnmapViewOfFile在当前应用程序的内存地址空间解除对一个文件映射对象的映射
    VerFindFile用这个函数决定一个文件应安装到哪里
    VerInstallFile用这个函数安装一个文件
    VerLanguageName这个函数能根据16位语言代码获取一种语言的名称
    VerQueryValue这个函数用于从版本资源中获取信息
    WriteFile将数据写入一个文件
    WriteFileEx与WriteFile类似,只是它只能用于异步写操作,并包括了一个完整的回调
    WritePrivateProfileSection为一个初始化文件(.ini)中指定的小节设置所有项名和值
    WritePrivateProfileString在初始化文件指定小节内设置一个字串
    WriteProfileSection为Win.ini初始化文件中一个指定的小节设置所有项名和值
    WriteProfileString在Win.ini初始化文件指定小节内设置一个字串

    3、网络函数

    函数名功能描述
    WNetAddConnection创建同一个网络资源的永久性连接
    WNetAddConnection2创建同一个网络资源的连接
    WNetAddConnection3创建同一个网络资源的连接
    WNetCancelConnection结束一个网络连接
    WNetCancelConnection2结束一个网络连接
    WNetCloseEnum结束一次枚举操作
    WNetConnectionDialog启动一个标准对话框,以便建立同网络资源的连接
    WNetDisconnectDialog启动一个标准对话框,以便断开同网络资源的连接
    WNetEnumResource枚举网络资源
    WNetGetConnection获取本地或已连接的一个资源的网络名称
    WNetGetLastError获取网络错误的扩展错误信息
    WNetGetUniversalName获取网络中一个文件的远程名称以及/或者UNC(统一命名规范)名称
    WNetGetUser获取一个网络资源用以连接的名字
    WNetOpenEnum启动对网络资源进行枚举的过程

    4、消息函数

    函数名功能描述
    BroadcastSystemMessage将一条系统消息广播给系统中所有的顶级窗口
    GetMessagePos取得消息队列中上一条消息处理完毕时的鼠标指针屏幕位置
    GetMessageTime取得消息队列中上一条消息处理完毕时的时间
    PostMessage将一条消息投递到指定窗口的消息队列
    PostThreadMessage将一条消息投递给应用程序
    RegisterWindowMessage获取分配给一个字串标识符的消息编号
    ReplyMessage答复一个消息
    SendMessage调用一个窗口的窗口函数,将一条消息发给那个窗口
    SendMessageCallback将一条消息发给窗口
    SendMessageTimeout向窗口发送一条消息
    SendNotifyMessage向窗口发送一条消息

    5、打印函数

    函数名功能描述
    AbortDoc取消一份文档的打印
    AbortPrinter删除与一台打印机关联在一起的缓冲文件
    AddForm为打印机的表单列表添加一个新表单
    AddJob用于获取一个有效的路径名,以便用它为作业创建一个后台打印文件。它也会为作业分配一个作业编号
    AddMonitor为系统添加一个打印机监视器
    AddPort启动"添加端口"对话框,允许用户在系统可用端口列表中加入一个新端口
    AddPrinter在系统中添加一台新打印机
    AddPrinterConnection连接指定的打印机
    AddPrinterDriver为指定的系统添加一个打印驱动程序
    AddPrintProcessor为指定的系统添加一个打印处理器
    AddPrintProvidor为系统添加一个打印供应商
    AdvancedDocumentProperties启动打印机文档设置对话框
    ClosePrinter关闭一个打开的打印机对象
    ConfigurePort针对指定的端口,启动一个端口配置对话框
    ConnectToPrinterDlg启动连接打印机对话框,用它同访问网络的打印机连接
    DeleteForm从打印机可用表单列表中删除一个表单
    DeleteMonitor删除指定的打印监视器
    DeletePort启动"删除端口"对话框,允许用户从当前系统删除一个端口
    DeletePrinter将指定的打印机标志为从系统中删除
    DeletePrinterConnection删除与指定打印机的连接
    DeletePrinterDriver从系统删除一个打印机驱动程序
    DeletePrintProcessor从指定系统删除一个打印处理器
    DeletePrintProvidor从系统中删除一个打印供应商
    DeviceCapabilities利用这个函数可获得与一个设备的能力有关的信息
    DocumentProperties打印机配置控制函数
    EndDocAPI结束一个成功的打印作业
    EndDocPrinter在后台打印程序的级别指定一个文档的结束
    EndPage用这个函数完成一个页面的打印,并准备设备场景,以便打印下一个页
    EndPagePrinter指定一个页在打印作业中的结尾
    EnumForms枚举一台打印机可用的表单
    EnumJobs枚举打印队列中的作业
    EnumMonitors枚举可用的打印监视器
    EnumPorts枚举一个系统可用的端口
    EnumPrinterDrivers枚举指定系统中已安装的打印机驱动程序
    EnumPrinters枚举系统中安装的打印机
    EnumPrintProcessorDatatypes枚举由一个打印处理器支持的数据类型
    EnumPrintProcessors枚举系统中可用的打印处理器
    Escape设备控制函数
    FindClosePrinterChangeNotification关闭用FindFirstPrinterChangeNotification函数获取的一个打印机通告对象
    FindFirstPrinterChangeNotification创建一个新的改变通告对象,以便我们注意打印机状态的各种变化
    FindNextPrinterChangeNotification用这个函数判断触发一次打印机改变通告信号的原因
    FreePrinterNotifyInfo释放由FindNextPrinterChangeNotification函数分配的一个缓冲区
    GetForm取得与指定表单有关的信息
    GetJob获取与指定作业有关的信息
    GetPrinter取得与指定打印机有关的信息
    GetPrinterData为打印机设置注册表配置信息
    GetPrinterDriver针对指定的打印机,获取与打印机驱动程序有关的信息
    GetPrinterDriverDirectory判断指定系统中包含了打印机驱动程序的目录是什么
    GetPrintProcessorDirectory判断指定系统中包含了打印机处理器驱动程序及文件的目录
    OpenPrinter打开指定的打印机,并获取打印机的句柄
    PrinterMessageBox在拥有指定打印作业的系统上显示一个打印机出错消息框
    PrinterProperties启动打印机属性对话框,以便对打印机进行配置
    ReadPrinter从打印机读入数据
    ResetDC重设一个设备场景
    ResetPrinter改变指定打印机的默认数据类型及文档设置
    ScheduleJob提交一个要打印的作业
    SetAbortProc为Windows指定取消函数的地址
    SetForm为指定的表单设置信息
    SetJob对一个打印作业的状态进行控制
    SetPrinter对一台打印机的状态进行控制
    SetPrinterData设置打印机的注册表配置信息
    StartDoc开始一个打印作业
    StartDocPrinter在后台打印的级别启动一个新文档
    StartPage打印一个新页前要先调用这个函数
    StartPagePrinter在打印作业中指定一个新页的开始
    WritePrinter将发送目录中的数据写入打印机

    6、文本和字体函数

    函数名功能描述
    AddFontResource在Windows系统中添加一种字体资源
    CreateFont用指定的属性创建一种逻辑字体
    CreateFontIndirect用指定的属性创建一种逻辑字体
    CreateScalableFontResource为一种TureType字体创建一个资源文件,以便能用API函数AddFontResource将其加入Windows系统
    DrawText将文本描绘到指定的矩形中
    DrawTextEx与DrawText相似,只是加入了更多的功能
    EnumFontFamilies列举指定设备可用的字体
    EnumFontFamiliesEx列举指定设备可用的字体
    EnumFonts列举指定设备可用的字体
    ExtTextOut经过扩展的文本描绘函数。也请参考SetTextAlign函数
    GetAspectRatioFilterEx用SetMapperFlags要求Windows只选择与设备当前纵横比相符的光栅字体时,本函数可判断纵横比大小
    GetCharABCWidths判断TureType字体中一个或多个字符的A-B-C大小
    GetCharABCWidthsFloat查询一种字体中一个或多个字符的A-B-C尺寸
    GetCharacterPlacement该函数用于了解如何用一个给定的字符显示一个字串
    GetCharWidth调查字体中一个或多个字符的宽度
    GetFontData接收一种可缩放字体文件的数据
    GetFontLanguageInfo返回目前选入指定设备场景中的字体的信息
    GetGlyphOutline取得TureType字体中构成一个字符的曲线信息
    GetKerningPairs取得指定字体的字距信息
    GetOutlineTextMetrics接收与TureType字体内部特征有关的详细信息
    GetRasterizerCaps了解系统是否有能力支持可缩放的字体
    GetTabbedTextExtent判断一个字串占据的范围,同时考虑制表站扩充的因素
    GetTextAlign接收一个设备场景当前的文本对齐标志
    GetTextCharacterExtra判断额外字符间距的当前值
    GetTextCharset接收当前选入指定设备场景的字体的字符集标识符
    GetTextCharsetInfo获取与当前选定字体的字符集有关的详细信息
    GetTextColor判断当前字体颜色。通常也称为"前景色"
    GetTextExtentExPoint判断要填入指定区域的字符数量。也用一个数组装载每个字符的范围信息
    GetTextExtentPoint判断一个字串的大小(范围)
    GetTextFace获取一种字体的字样名
    GetTextMetrics获取与选入一种设备场景的物理字体有关的信息
    GrayString描绘一个以灰色显示的字串。通常由Windows用于标识禁止状态
    PolyTextOut描绘一系列字串
    RemoveFontResource从Windows系统中删除一种字体资源
    SetMapperFlagsWindows对字体进行映射时,可用该函数选择与目标设备的纵横比相符的光栅字体
    SetTextAlign设置文本对齐方式,并指定在文本输出过程中使用设备场景的当前位置
    SetTextCharacterExtra描绘文本的时候,指定要在字符间插入的额外间距
    SetTextColor设置当前文本颜色。这种颜色也称为"前景色"
    SetTextJustification通过指定一个文本行应占据的额外空间,可用这个函数对文本进行两端对齐处理
    TabbedTextOut支持制表站的一个文本描绘函数
    TextOut文本绘图函数

    7、菜单函数

    函数名功能描述
    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相似,只是它提供了额外的功能

    8、位图、图标和光栅运算函数

    函数名功能描述
    BitBlt将一幅位图从一个设备场景复制到另一个
    CopyIcon制作指定图标或鼠标指针的一个副本。这个副本从属于发出调用的应用程序
    CopyImage复制位图、图标或指针,同时在复制过程中进行一些转换工作
    CreateBitmap按照规定的格式创建一幅与设备有关位图
    CreateBitmapIndirect创建一幅与设备有关位图
    CreateCompatibleBitmap创建一幅与设备有关位图,它与指定的设备场景兼容
    CreateCursor创建一个鼠标指针
    CreateDIBitmap根据一幅与设备无关的位图创建一幅与设备有关的位图
    CreateDIBSection创建一个DIBSection
    CreateIcon创建一个图标
    CreateIconIndirect创建一个图标
    DestroyCursor清除指定的鼠标指针,并释放它占用的所有系统资源
    DestroyIcon清除图标
    DrawIcon在指定的位置画一个图标
    DrawIconEx描绘一个图标或鼠标指针。与DrawIcon相比,这个函数提供了更多的功能
    ExtractAssociatedIcon判断一个可执行程序或DLL中是否存在图标,或是否有图标与系统注册表中指定的文件存在关联并提取之
    ExtractIcon判断一个可执行文件或DLL中是否有图标存在,并将其提取出来
    GetBitmapBits将来自位图的二进制位复制到一个缓冲区
    GetBitmapDimensionEx取得一幅位图的宽度和高度
    GetDIBColorTable从选入设备场景的DIBSection中取得颜色表信息
    GetDIBits将来自一幅位图的二进制位复制到一幅与设备无关的位图里
    GetIconInfo取得与图标有关的信息
    GetStretchBltMode判断StretchBlt
    LoadBitmap从指定的模块或应用程序实例中载入一幅位图
    LoadCursor从指定的模块或应用程序实例中载入一个鼠标指针
    LoadCursorFromFile在一个指针文件或一个动画指针文件的基础上创建一个指针
    LoadIcon从指定的模块或应用程序实例中载入一个图标
    LoadImage载入一个位图、图标或指针
    MaskBlt执行复杂的图象传输,同时进行掩模(MASK)处理
    PatBlt在当前选定的刷子的基础上,用一个图案填充指定的设备场景
    PlgBlt复制一幅位图,同时将其转换成一个平行四边形。利用它可对位图进行旋转处理
    SetBitmapBits将来自缓冲区的二进制位复制到一幅位图
    SetBitmapDimensionEx设置一幅位图的宽度。以一毫米的十分之一为单位
    SetDIBColorTable设置选入设备场景的一个DIBSection的颜色表信息
    SetDIBits将来自与设备无关位图的二进制位复制到一幅与设备有关的位图里
    SetDIBitsToDevice将一幅与设备无关位图的全部或部分数据直接复制到一个设备
    SetStretchBltMode指定StretchBlt
    StretchBlt将一幅位图从一个设备场景复制到另一个
    StretchDIBits将一幅与设备无关位图的全部或部分数据直接复制到指定的设备场景

    9、绘图函数

    函数名功能描述
    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用当前画笔画一条线,从当前位置连到一个指定的点
    MoveToEx为指定的设备场景指定一个新的当前画笔位置
    PaintDesk在指定的设备场景中描绘桌面墙纸图案
    PathToRegion将当前选定的路径转换到一个区域里
    Pie画一个饼图
    PlayEnhMetaFile在指定的设备场景中画一个增强型图元文件
    PlayEnhMetaFileRecord回放单独一条增强型图元文件记录
    PlayMetaFile在指定的设备场景中回放一个图元文件
    PlayMetaFileRecord回放来自图元文件的单条记录
    PolyBezier描绘一条或多条贝塞尔(Bezier)曲线
    PolyDraw描绘一条复杂的曲线,由线段及贝塞尔曲线组成
    Polygon描绘一个多边形
    Polyline用当前画笔描绘一系列线段
    PolyPolygon用当前选定画笔描绘两个或多个多边形
    PolyPolyline用当前选定画笔描绘两个或多个多边形
    Rectangle用当前选定的画笔描绘矩形,并用当前选定的刷子填充
    RoundRect用当前选定的画笔画一个圆角矩形,并用当前选定的刷子在其中填充
    SelectClipPath将设备场景当前的路径合并到剪切区域里
    SelectObject为当前设备场景选择图形对象
    SetArcDirection设置圆弧的描绘方向
    SetBkColor为指定的设备场景设置背景颜色
    SetBkMode指定阴影刷子、虚线画笔以及字符中的空隙的填充方式
    SetBrushOrgEx为指定的设备场景设置当前选定刷子的起点
    SetEnhMetaFileBits用指定内存缓冲区内包含的数据创建一个增强型图元文件
    SetMetaFileBitsEx用包含在指定内存缓冲区内的数据结构创建一个图元文件
    SetMiterLimit设置设备场景当前的斜率限制
    SetPixel在指定的设备场景中设置一个像素的RGB值
    SetPixelV在指定的设备场景中设置一个像素的RGB值
    SetPolyFillMode设置多边形的填充模式
    SetROP2设置指定设备场景的绘图模式。与vb的DrawMode属性完全一致
    SetWinMetaFileBits将一个标准Windows图元文件转换成增强型图元文件
    StrokeAndFillPath针对指定的设备场景,关闭路径上打开的所有区域
    StrokePath用当前画笔描绘一个路径的轮廓。打开的图形不会被这个函数关闭
    UnrealizeObject将一个刷子对象选入设备场景之前,如刷子的起点准备用SetBrushOrgEx修改,则必须先调用本函数
    WidenPath根据选定画笔的宽度,重新定义当前选定的路径

    10、设备场景函数

    函数名功能描述
    CombineRgn将两个区域组合为一个新区域
    CombineTransform驱动世界转换。它相当于依顺序进行两次转换
    CreateCompatibleDC创建一个与特定设备场景一致的内存设备场景
    CreateDC为专门设备创建设备场景
    CreateEllipticRgn创建一个椭圆
    CreateEllipticRgnIndirect创建一个内切于特定矩形的椭圆区域
    CreateIC为专用设备创建一个信息场景
    CreatePolygonRgn创建一个由一系列点围成的区域
    CreatePolyPolygonRgn创建由多个多边形构成的区域。每个多边形都应是封闭的
    CreateRectRgn创建一个矩形区域
    CreateRectRgnIndirect创建一个矩形区域
    CreateRoundRectRgn创建一个圆角矩形
    DeleteDC删除专用设备场景或信息场景,释放所有相关窗口资源
    DPtoLP将点阵从设备坐标转换到专用设备场景逻辑坐标
    EqualRgn确定两个区域是否相等
    ExcludeClipRect从专用设备场景的剪裁区中去掉一个矩形区。矩形内不能进行绘图
    ExcludeUpdateRgn从专用设备场景剪裁区去掉指定窗口的刷新区域
    ExtCreateRegion根据世界转换修改区域
    ExtSelectClipRgn将指定区域组合到设备场景的当前剪裁区
    FillRgn用指定刷子填充指定区域
    FrameRgn用指定刷子围绕指定区域画一个外框
    GetBoundsRect获取指定设备场景的边界矩形
    GetClipBox获取完全包含指定设备场景剪裁区的最小矩形
    GetClipRgn获取设备场景当前剪裁区
    GetDC获取指定窗口的设备场景
    GetDCEx为指定窗口获取设备场景。相比GetDC,本函数提供了更多的选项
    GetDCOrgEx获取指定设备场景起点位置(以屏幕坐标表示)
    GetDeviceCaps根据指定设备场景代表的设备的功能返回信息
    GetGraphicsMode确定是否允许增强图形模式(世界转换)
    GetMapMode为特定设备场景调入映象模式
    GetRegionData装入描述一个区域信息的RgnData结构或缓冲区
    GetRgnBox获取完全包含指定区域的最小矩形
    GetUpdateRgn确定指定窗口的刷新区域。该区域当前无效,需要刷新
    GetViewportExtEx获取设备场景视口(viewport)范围
    GetViewportOrgEx获取设备场景视口起点
    GetWindowDC获取整个窗口(包括边框、滚动条、标题栏、菜单等)的设备场景
    GetWindowExtEx获取指定设备场景的窗口范围
    GetWindowOrgEx获取指定设备场景的逻辑窗口的起点
    GetWindowRgn获取窗口区域
    GetWorldTransform如果有世界转换,为设备场景获取当前世界转换
    IntersectClipRect为指定设备定义一个新的剪裁区
    InvalidateRgn使窗口指定区域不活动,并将它加入窗口刷新区,使之可随后被重画
    InvertRgn通过颠倒每个像素值反转设备场景指定区域
    LPtoDP将点阵从指定设备场景逻辑坐标转换为设备坐标
    ModifyWorldTransform根据指定的模式修改世界转换
    OffsetClipRgn按指定量平移设备场景剪裁区
    OffsetRgn按指定偏移量平移指定区域
    OffsetViewportOrgEx平移设备场景视口区域
    OffsetWindowOrgEx平移指定设备场景窗口起点
    PaintRgn用当前刷子背景色填充指定区域
    PtInRegion确定点是否在指定区域内
    PtVisible确定指定点是否可见(即,点是否在设备场景剪裁区内)
    RectInRegion确定矩形是否有部分在指定区域内
    RectVisible确定指定矩形是否有部分可见(是否在设备场景剪裁区内)
    ReleaseDC释放由调用GetDC或GetWindowDC函数获取的指定设备场景
    RestoreDC从设备场景堆栈恢复一个原先保存的设备场景
    SaveDC将指定设备场景状态保存到Windows设备场景堆栈
    ScaleViewportExtEx缩放设备场景视口的范围
    ScaleWindowExtEx缩放指定设备场景窗口范围
    ScrollDC在窗口(由设备场景代表)中水平和(或)垂直滚动矩形
    SelectClipRgn为指定设备场景选择新的剪裁区
    SetBoundsRect设置指定设备场景的边界矩形
    SetGraphicsMode允许或禁止增强图形模式,以提供某些支持(包括世界转换)
    SetMapMode设置指定设备场景的映射模式
    SetRectRgn设置区域为指定的矩形
    SetViewportExtEx设置设备场景视口范围
    SetViewportOrgEx设置设备场景视口起点
    SetWindowExtEx设置指定设备场景窗口范围
    SetWindowOrgEx设置指定设备场景窗口起点
    SetWindowRgn设置窗口区域
    SetWorldTransform设置世界转换
    ValidateRgn激活窗口中指定区域,把它从刷新区移走
    WindowFromDC取回与某一设备场景相关的窗口的句柄

    11、硬件与系统函数

    函数名功能描述
    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键的状态

    12、 进程和线程函数

    函数名功能描述
    CancelWaitableTimer这个函数用于取消一个可以等待下去的计时器操作
    CallNamedPipe这个函数由一个希望通过管道通信的一个客户进程调用
    ConnectNamedPipe指示一台服务器等待下去,直至客户机同一个命名管道连接
    CreateEvent创建一个事件对象
    CreateMailslot创建一个邮路。返回的句柄由邮路服务器使用(收件人)
    CreateMutex创建一个互斥体(MUTEX)
    CreateNamedPipe创建一个命名管道。返回的句柄由管道的服务器端使用
    CreatePipe创建一个匿名管道
    CreateProcess创建一个新进程(比如执行一个程序)
    CreateSemaphore创建一个新的信号机
    CreateWaitableTimer创建一个可等待的计时器对象
    DisconnectNamedPipe断开一个客户与一个命名管道的连接
    DuplicateHandle在指出一个现有系统对象当前句柄的情况下,为那个对象创建一个新句柄
    ExitProcess中止一个进程
    FindCloseChangeNotification关闭一个改动通知对象
    FindExecutable查找与一个指定文件关联在一起的程序的文件名
    FindFirstChangeNotification创建一个文件通知对象。该对象用于监视文件系统发生的变化
    FindNextChangeNotification重设一个文件改变通知对象,令其继续监视下一次变化
    FreeLibrary释放指定的动态链接库
    GetCurrentProcess获取当前进程的一个伪句柄
    GetCurrentProcessId获取当前进程一个唯一的标识符
    GetCurrentThread获取当前线程的一个伪句柄
    GetCurrentThreadId获取当前线程一个唯一的线程标识符
    GetExitCodeProces获取一个已中断进程的退出代码
    GetExitCodeThread获取一个已中止线程的退出代码
    GetHandleInformation获取与一个系统对象句柄有关的信息
    GetMailslotInfo获取与一个邮路有关的信息
    GetModuleFileName获取一个已装载模板的完整路径名称
    GetModuleHandle获取一个应用程序或动态链接库的模块句柄
    GetPriorityClass获取特定进程的优先级别
    GetProcessShutdownParameters调查系统关闭时一个指定的进程相对于其它进程的关闭早迟情况
    GetProcessTimes获取与一个进程的经过时间有关的信息
    GetProcessWorkingSetSize了解一个应用程序在运行过程中实际向它交付了多大容量的内存
    GetSartupInfo获取一个进程的启动信息
    GetThreadPriority获取特定线程的优先级别
    GetTheardTimes获取与一个线程的经过时间有关的信息
    GetWindowThreadProcessId获取与指定窗口关联在一起的一个进程和线程标识符
    LoadLibrary载入指定的动态链接库,并将它映射到当前进程使用的地址空间
    LoadLibraryEx装载指定的动态链接库,并为当前进程把它映射到地址空间
    LoadModule载入一个Windows应用程序,并在指定的环境中运行
    MsgWaitForMultipleObjects等侯单个对象或一系列对象发出信号。如返回条件已经满足,则立即返回
    SetPriorityClass设置一个进程的优先级别
    SetProcessShutdownParameters在系统关闭期间,为指定进程设置他相对于其它程序的关闭顺序
    SetProcessWorkingSetSize设置操作系统实际划分给进程使用的内存容量
    SetThreadPriority设定线程的优先级别
    ShellExecute查找与指定文件关联在一起的程序的文件名
    TerminateProcess结束一个进程
    WinExec运行指定的程序

    13、控件与消息函数

    函数名功能描述
    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获得在一个给定父窗口中最近激活过的弹出式窗口的句柄
    GetParent判断指定窗口的父窗口
    GetTopWindow搜索内部窗口列表,寻找隶属于指定窗口的头一个窗口的句柄
    GetUpdateRect获得一个矩形,它描叙了指定窗口中需要更新的那一部分
    GetWindow获得一个窗口的句柄,该窗口与某源窗口有特定的关系
    GetWindowContextHelpId取得与窗口关联在一起的帮助场景ID
    GetWindowLong从指定窗口的结构中取得信息
    GetWindowPlacement获得指定窗口的状态及位置信息
    GetWindowRect获得整个窗口的范围矩形,窗口的边框、标题栏、滚动条及菜单等都在这个矩形内
    GetWindowText取得一个窗体的标题(caption)文字,或者一个控件的内容
    GetWindowTextLength调查窗口标题文字或控件内容的长短
    GetWindowWord获得指定窗口结构的信息
    InflateRect增大或减小一个矩形的大小
    IntersectRect这个函数在lpDestRect里载入一个矩形,它是lpSrc1Rect与lpSrc2Rect两个矩形的交集
    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返回包含了指定点的窗口的句柄。忽略屏蔽、隐藏以及透明窗口

    笔记跟新记录

    时间内容
    2020-12-09创建笔记
    展开全文
  • windows 蓝牙 API使用

    2018-04-17 02:17:32
    如何通过BluetoothAuthenticateDeviceEx配对蓝牙鼠标,回调函数里面怎么写,有没有对应的demo或者示例代码看看?
  • Cjwdev.WindowsApi win7服务启动外部程序

    热门讨论 2014-11-22 16:53:32
    Win7下C#通过Windows Service启动外部程序时要用到的一个第三方动态库。 官方网站上下载稍有点费劲,下载下来与大家免费分享。
  • 红胖子(红模仿)的博文大全:开发技术集合(包含Qt实用技术、树莓派、三维、OpenCV、OpenGL、ffmpeg、OSG、单片机、软硬结合等等)持续更新…(点击传送门) Qt开发专栏:实用技巧 需求   常常在Qt需要引入...

    若该文为原创文章,转载请注明原文出处
    本文章博客地址:https://blog.csdn.net/qq21497936/article/details/117069654

    长期持续带来更多项目与技术分享,咨询请加QQ:21497936、微信:yangsir198808

    红胖子(红模仿)的博文大全:开发技术集合(包含Qt实用技术、树莓派、三维、OpenCV、OpenGL、ffmpeg、OSG、单片机、软硬结合等等)持续更新中…(点击传送门)

    Qt开发专栏:实用技巧


    需求

      常常在Qt中需要引入windows函数。


    方法

    步骤一:引入windows的api头文件:

    #include <windows.h>
    

    步骤二: 引入windows的dll文件user32.dll

      在pro中添加:

    LIBS += -luser32
    

    步骤三:添加windows代码

    • 查找窗户口
    HWND hDesktop, hTask;
    hDesktop = ::FindWindow(L"ProgMan",NULL);
    hTask = ::FindWindow(L"Shell_TrayWnd",NULL);
    // 隐藏任务栏/桌面
    ::ShowWindow(hTask,SW_HIDE);
    // 隐藏桌面
    ::ShowWindow(hDesktop,SW_HIDE);
    
    • 显示任务栏/桌面
    HWND hDesktop, hTask;
    hDesktop=FindWindow(L"ProgMan",NULL);
    hTask=FindWindow(L"Shell_TrayWnd",NULL);
    // 显示任务栏
    ::ShowWindow(hTask,SW_SHOW);
    // 显示桌面
    ::ShowWindow(hDesktop,SW_SHOW);
    

    若该文为原创文章,转载请注明原文出处
    本文章博客地址:https://blog.csdn.net/qq21497936/article/details/117069654

    展开全文
  • 最近项目需要用C#写Windows服务调用EXE,最终进程什么的都有了,就是界面出不来,查看相关的资料,需要调用Cjwdev.WindowsApi.dll,但是这个在网上可不好下载,所以就拿来分享了。
  • c# 利用Windows API 操作打印机

    热门讨论 2012-10-23 17:00:28
    利用 Windows API 32 打印函数,对打印机进行发送打印任务、暂停、取消、获取打印任务、获取打印机列表、状态、纸张等信息。压缩包包含4个平时收集的打印类,测试均可用。附含Windows API 函数 for Visual Basic...
  • Windows API开发详解 函数、接口、编程实例.pdf

    千次下载 热门讨论 2014-09-14 17:26:18
    2011年出的Windows API开发详解 函数、接口、编程实例.pdf
  • 精通Win32 API编程-Windows图形界面编程

    千人学习 2018-04-15 22:52:13
    WindowsAPI(Application Programming Interface,应用程序编程接口),是Windows 操作系统提供给应用程序的大量函数,学习本课程,不仅可以掌握Windows界面编程,开发华丽的Windows桌面运用程序,也可以为MFC框架...
  • Windows_APIWindows_APIWindows_APIWindows_APIWindows_APIWindows_APIWindows_APIWindows_APIWindows_APIWindows_APIWindows_APIWindows_APIWindows_APIWindows_APIWindows_APIWindows_API
  • 在C#需要用到一些Windows API时,对每个API都要写一个"DllImport ...",是不是很烦,这个小模块可以帮您省去这些烦恼。
  • python 调用Windows API

    千次阅读 2019-02-19 09:52:39
    #python 调用Windows API(使用IDLE开发环境) from ctypes import * msvcrt = cdll.LoadLibrary('msvcrt') for i in 'love': msvcrt.printf(i)   #python 调用Windows API(使用VS开发环境) from ctypes import...
  • WindowsAPI中W和A的区别

    千次阅读 2019-11-29 15:27:03
    当使用windows api时,一般系统都会提供两个相同方法,但是结尾名字不同。 就跟LoadLibraryA和LoadLibraryW这两种方法。 类似下列 原因在于,针对于不同编码,系统提供的api不同。 W结尾主要针对的是UNICODE编码, ...
  • 利用windows api采集麦克风音频并播放。
  • WindowsAPI关机、重启

    千次阅读 2017-07-18 13:21:55
    #include "Windows.h" //强制关闭计算机 bool systemShutDown() {  HANDLE hToken;  TOKEN_PRIVILEGES tkp;  //获取进程标志  if (!OpenProcessToken(GetCurrentProcess(), TOKEN_ADJUST_...
  • Windows+API一日一练 C++之Windows API简单入门 Windows+API一日一练 C++之Windows API简单入门 Windows+API一日一练 C++之Windows API简单入门 symbian
  • 新编 Windows API 参考大全(C语言版).chm ) 新编 Windows API 参考大全(C语言版).chm )新编 Windows API 参考大全(C语言版).chm )新编 Windows API 参考大全(C语言版).chm )

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 603,182
精华内容 241,272
关键字:

windows中的api就是