电脑桌面
添加盘古文库-分享文档发现价值到电脑桌面
安装后可以在桌面快捷访问

API技术范文

来源:盘古文库作者:开心麻花2025-09-131

API技术范文(精选9篇)

API技术 第1篇

对于计算机重要信息数据的保护,目前已有学者提出了3层保护体系[1,2]。多家公司也基于操作系统内核设计了软、硬件结合的信息安全产品,具有一定的优势,但价格昂贵。对于某些关系国计民生的数据生产商而言,使用这些产品存在弊端。据权威咨询公司调查指出,超过60%的被调查公司,报告信息的非授权使用和篡改的非法行为时有发生。70%的公司认为,PC计算机信息丢失和被窃取,是造成公司经济损失的主要原因。由此,有必要研制一套利于第三方用户灵活使用的一套体系,实现在内部网络中对机密文件进行有效实时监控。目前常用的文件监控方法,是基于虚拟设备挂接方式的监控[3],这需要在Windows系统内核层编程,实现难度较大,且多个设备挂接,容易造成系统资源浪费。

文中针对数据文件,基于Windows API设计并实现了一种较为通用的文件监控系统,首先针对具体的数据文件类别,引入数字水印技术,确保数据文件的版权或完整性;此外对打开、查询、读/写、删除、重命名文件等操作进行监控和记录,防止未授权用户非法拷贝盗取文件信息。

1 数据安全监控系统

系统设计目标:所有用户均需进行严格的身份验证,系统管理员可根据工作任务不同动态设置终端用户的权限和资源,任何非法用户或未授权用户对涉密文件的访问、外接设备的访问被禁止,系统对用户的所有操作均记录,并对日志进行有效管理。要求该系统的设计模式具有通用性、实用性、易于管理、可维护性好。

通过分析现有技术,设计的数据文件安全监控系统对应的软件模块为:系统管理员模块、数据加密模块、访问控制模块、端口控制模块、U盘监控模块、审计日志模块和系统保护模块,具体功能如下:

(1)数据加密,信息置乱、数字水印是新兴的信息安全技术。信息置乱就是利用一些变换,将数据以其他方式存储,具有一定的加密性;数字水印是在载体数据中嵌入版权信息来表示该数据的版权,或嵌入其他一些信息以确保原文件数据仍保持完整,没有被篡改。现有的文件数据可分成图像数据、矢量图形数据、文本数据和文档数据。针对以上数据的鲁棒水印技术或脆弱、半脆弱水印技术已比较成熟。在保证文件可用的前提下,完全可以引入以上技术来实现数据文件的加密,这样即使文件泄漏,也可保证数据不可直接被窃取者利用,在一定程度上降低损失;而数字水印可以协助追踪信息泄漏的源头。

(2)身份认证,被监控设备用户的身份验证。

(3)访问控制,当用户访问涉密文件时,实时获取其操作信息,并将其传输给用户层,并确认其是否有此权限,并作出相应的响应。

(4)外接存储设备及端口监控,对计算机端口和外接存储设备如光盘、软盘、USB设备等的使用情况进行监控,防止机密信息通过外接存储设备发生泄漏和流失。

2 存储监控系统设计与实现

2.1 信息加密技术

以军用地理信息数据为例,部分地理信息产品以栅格图像的形式存储。它可能受到以下攻击:增大或减小图像的亮度和对比度;为看清图像细节,通常先将图像放大,再缩小到原来尺寸;计算机软、硬件的限制,使海量地理信息图像不可能一次完成,必须进行图像拼接或裁剪。由于地理信息数据具有一定的地理精度和明确的属性特征,一般不进行压缩、加噪、缩小和滤波等操作,会损失图像信息,使地理信息丧失使用价值。为对数据进行加密,首先采用文献[4]算法嵌入水印,然后进行存储。

2.2 基于Window API文件监控实现

文件访问控制模块是监控系统中的核心模块,其保护涉密文件不被随意修改,阻止涉密文件被未经授权的拷贝,并实时监控对涉密文件的其他操作。

Windows操作系统中,文件系统的主要功能是由文件系统驱动程序(File System Driver,FSD)和存储设备驱动程序两部分完成。其中,FSD负责文件管理,应用程序接口通过FSD来创建和存取文件。文件系统按不同的处理功能进行了层次划分,其基本结构如图1所示。

这种层次结构,为程序员开发文件系统的特性化功能提供了丰富的接口,既可以在FSD层采用文件系统驱动过滤的方式来开发文件监控系统,又可以在应用程序接口层利用系统提供的Win32 API开发存储监控系统[5]。

要完成存储数据的监控,需要对涉密文件的操作进行拦截,通常采用的方法有:挂钩函数、拦截系统调用和加载文件系统过滤驱动。挂钩函数方式通过在用户模式下挂钩与文件操作相关的API函数来达到监视文件操作的目的;而通过修改系统调用表中提供的接口函数的调用入口,拦截文件操作,需要过滤大量无关信息,造成不必要的系统开销;加载文件系统过滤驱动相对于拦截系统调用方式则更底层,实现不易。基于上述分析,直接利用系统API相关接口实现用户层操作。

该途径利用系统提供的Windows API监视文件及文件夹的改变,针对文件信息状态的变化来执行特定的操作,实现监控存储数据的目的。通过指定被监控文件的后缀,该后缀类型的文件的任何操作都将被监控程序监视和记录,其中非法的操作会被立即禁止。对于指定后缀名的文件,可监视的操作有:新建、删除、修改后缀、拷贝至移动设备等。

当新建、删除文件或文件夹,修改文件名称或后缀时,通过系统提供类CDirectoryChange-Watcher和CDirectoryChangeHandler中的API函数,就能得到有关文件状态改变的系统消息,程序开发人员就可依据需求,为系统消息加入相应的响应处理,实现文件操作的监控。其中,CDirectoryChangeWatcher通过创建一个线程,来监视文件或文件夹,并等待文件或文件夹的改变进而捕获消息,类CDirectoryChangeWatcher的一个对象可同时监视多个文件或文件夹,并能根据需要增加或删减文件夹。当接收到文件或文件夹改变的消息时,类CDirectoryChange-Watcher利用CDirectoryChangeHandler类把相关消息发送给应用程序。程序开发人员从 CDirectoryChangeHandler继承一个子类,处理文件或文件夹改变的消息。

通过上述两个Windows类API函数进行重载,当用户在本机或者移动存储设备上新建、删除、修改或拷贝涉密件时,安全监控系统对具有特殊文件后缀名的涉密文件进行监控,并控制文件进出端口和U盘等移动介质,保护了文件的安全性和隐密性。

2.3 U盘合法性认证

注册表由微软公司引入,其特点有:(1)允许对硬件、系统参数、设备驱动程序等进行跟踪配置。(2)注册表中登录的硬件部分数据支持高版本Windows的即插即用特性。(3)通过注册表可以检查系统的配置和设置,注册表的这些特征为U盘的合法性认证奠定了基础。

笔者根据U盘的惟一性标志对U盘进行识别和分类,达到身份验证的目的。这需要从计算机硬件信息中提取U盘序列号和盘符,并根据序列号的惟一性判断U盘的合法性。U盘序列号的获取步骤如下:首先,根据U盘的系统注册记录读取U盘的相关信息;然后,逐字节分析U盘信息,提取U盘的序列号和盘符;最后,将提取的U盘序列号与监控端允许的合法序列号集合进行比对,实现U盘认证。

U盘如果认证合法,则对U盘进行实时监控;否则强行退出,拒绝对该U盘的任何访问。对于合法U盘,若用户具有涉密文件的拷贝权限,则监控系统允许对涉密文件进行拷贝,同时监控系统会实时记录对U盘的一切操作信息,并写进日志记录文件,以便事后追查,有效保障涉密文件的安全性。

3 结束语

对Windows操作系统中数据文件的安全监控进行了研究,设计并实现了一种基于Win32API 的文件监控系统。通过数据加密、用户权限设定、U盘认证、端口控制等技术的利用,在操作系统的应用层实现了用户对文件的创建、删除、拷贝、重命名等操作的监控和处理,有效防止了涉密文件数据非法访问等问题。

摘要:针对Windows操作系统中数据文件访问的安全问题,设计并实现了一种基于Windows API存储监控系统。首先在保证文件信息不被破坏的前提下,引入各种加密方法,对信息进行保护;然后通过用户权限设定、U盘认证、端口控制等途径,在操作系统的应用层实现用户对创建、删除、拷贝、重命名等文件操作的监控和处理,有效防止了涉密文件数据被非法访问。

关键词:文件监控,权限控制,安全认证

参考文献

[1]王雷,庄毅,潘龙平.基于强制访问控制的文件安全监控系统的设计与实现[J].计算机应用,2006,26(12):161-164.

[2]李慧,孙波.网络监控技术的研究与实现[J].计算机工程与设计,2004(8):1302-1304.

[3]李凡,刘学照,卢安,等.WindowsNT内核下文件系统过滤驱动程序开发[J].华中科技大学学报:自然科学版,2003(1):28-30.

[4]朱静静,曾平,谢琨.针对栅格地图的快速鲁棒盲水印算法[J].计算机工程,2008,34(1):167-169.

C API函数 第2篇

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 关闭一个内核对象。其中包括文件、文件映射、进程、线程、安全和同步对象等

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初始化文件指定小节内设置一个字串

4.API之打印函数

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 将发送目录中的数据写入打印机

5.API之文本和字体函数

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系统中删除一种字体资源

SetMapperFlags Windows对字体进行映射时,可用该函数选择与目标设备的纵横比相符的光栅字体

SetTextAlign 设置文本对齐方式,并指定在文本输出过程中使用设备场景的当前位置

SetTextCharacterExtra 描绘文本的时候,指定要在字符间插入的额外间距 SetTextColor 设置当前文本颜色。这种颜色也称为“前景色”

SetTextJustification 通过指定一个文本行应占据的额外空间,可用这个函数对文本进行两端对齐处理

TabbedTextOut 支持制表站的一个文本描绘函数 TextOut 文本绘图函数

6.API之菜单函数

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

7.API之位图、图标和光栅运算函数

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 和 StretchDIBits函数采用的伸缩模式 LoadBitmap 从指定的模块或应用程序实例中载入一幅位图

LoadCursor 从指定的模块或应用程序实例中载入一个鼠标指针

LoadCursorFromFile 在一个指针文件或一个动画指针文件的基础上创建一个指针

LoadIcon 从指定的模块或应用程序实例中载入一个图标 LoadImage 载入一个位图、图标或指针

MaskBlt 执行复杂的图象传输,同时进行掩模(MASK)处理

PatBlt 在当前选定的刷子的基础上,用一个图案填充指定的设备场景

PlgBlt 复制一幅位图,同时将其转换成一个平行四边形。利用它可对位图进行旋转处理

SetBitmapBits 将来自缓冲区的二进制位复制到一幅位图

SetBitmapDimensionEx 设置一幅位图的宽度。以一毫米的十分之一为单位 SetDIBColorTable 设置选入设备场景的一个DIBSection的颜色表信息

SetDIBits 将来自与设备无关位图的二进制位复制到一幅与设备有关的位图里 SetDIBitsToDevice 将一幅与设备无关位图的全部或部分数据直接复制到一个设备

SetStretchBltMode 指定StretchBlt 和 StretchDIBits函数的伸缩模式 StretchBlt 将一幅位图从一个设备场景复制到另一个

StretchDIBits 将一幅与设备无关位图的全部或部分数据直接复制到指定的设备场景

8.API之绘图函数

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 根据选定画笔的宽度,重新定义当前选定的路径

9.API之设备场景函数

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 取回与某一设备场景相关的窗口的句柄

10.API之硬件与系统函数

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键的状态

11.API之进程和线程函数

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 运行指定的程序

12.API之控件与消息函数

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 校验窗口的全部或部分客户区

API技术 第3篇

当前的大部分电子地图应用都是采用瓦片地图技术, 也有一小部分企业应用仍然基于矢量地图, 两种技术各有优势和缺点。但在当下, 前者的应用应该是略胜一筹, 通过特定的地图投影模型, 把通过遥测技术而生成的矢量地图, 按固定的缩放比例和固定尺寸进行切分, 生成一张张几KB至几十KB大小的图片, 就容纳大量的地理信息, 无论是使用客户端或者浏览器程序, 地图都能在短短几秒内显示在用户面前, 如此性能优越的用户体验, 是动则需要读取几百兆的矢量地图客户端技术所望尘莫及的。在国内企业中, 地理信息系统多为使用Arc Gis等企业级GIS平台或开源的Geo Server平台, 其矢量图客户端对终端计算机的硬件性能要求高, 严重制约了GIS在国内企业的应用推广, 所以基于瓦片地图技术的电子地图API的设计, 有着广阔的应用场景。

1 电子瓦片地图技术的基本概念

由于地球是球体, 而我们日常所使用的地图为方形, 所以地图就涉及到一个从经纬度到平面的转换过程, 俗称地图投影方法。而在不同的场合和用途下使用不同的地图投影, 不同的投影方法有不同的经纬度到方形坐标系的转换公式, 大多数互联网地图服务基本使用墨卡托投影。

地面分辨率概念:地面分辨率类似地图中的比例尺, 是像素与地面距离 (米) 的比例。以谷歌地图为例, 其地图瓦片每个均为256×256像素, 当缩放级别为1时, 全球地图大小为512×512像素, 即有4个地图瓦片, 赤道的分辨率=赤道周长距离 (米) /512 (像素) 。当缩放级别为2时, 赤道的分辨率为赤道周长距离/1024, 即地图长度=地图宽度=256×2缩放等级像素。由此可见, 地面分辨率取决于两方面, 地图缩放级别和纬度, 缩放级别决定像素即地图瓦片的数量, 纬度决定该地图等级下的地表距离。地面分辨率 (米/像素) = (cos (纬度×pi/180) ×2×pi×赤道半径/米) / (256×2×缩放级别像素) 。

根据墨卡托投影, 因为在每个缩放级别下, 地图所含的像素都不同, 因此地图瓦片的数量也不同。每个瓦片都有一个坐标值, 从左上角的 (0, 0) 到右下角的 (2缩放等级–1, 2缩放等级–1) 。对一个已知像素的XY坐标值, 其所在的瓦片坐标值为, tile X=floor (pixel X/256) , tile Y=floor (pixel Y/256) 。

2 电子地图API的总体设计

2.1 电子地图API基本功能

电子地图API是一套由编程语言编写的应用程序接口, 能够构建功能丰富、交互性强的地图应用, 包含了电子地图各项基本功能的接口。基本地图功能:展示平面地图、卫星地图等, 拖拽、移动、缩放地图等。地图图层功能:支持重设地图底图、地图上叠加实时交通图层或自定义图层功能。覆盖物功能:支持在电子地图上显示点、线、面、热区、行政区划、用户自定义覆盖物等;地图控件展示功能:支持地图缩放控件、工具条、比例尺等。

2.2 电子地图API逻辑架构

地图API界面容器是用户所看到的界面, 是其他所有层的容器。

地图层容器负责存放各种类型的地图, 如卫星图、2D平面图等, 这些图可以按上一节所说的方法, 把地图按256×256像素预先切割好, 并存放在文件服务器或者CDN上, 以供电子地图API读取并显示。该容器会随鼠标拖拽或者触摸移动事件而平移, 地图也跟随容器而平移。

覆盖物层容器负责显示点、线、多边形、标注等自定义图形, 如显示导航路线、用户自定义的矢量标注物。

动作响应层负责处理界面事件, 如鼠标点击、鼠标滚轮、鼠标拖拽、手指触摸移动、双手放大缩小等, 地图API根据该层响应的事件来做相应操作, 如移动地图图层、放大缩小地图、显示导航路线图等。

控件层容器负责显示地图的工具控件, 如鹰眼、工具条、比例尺、地图缩放控件。

2.3 事件流程设计

整个电子地图API由地图层容器、覆盖物层容器、动作响应层、控件层容器组成, 除动作响应层以外, 其他层都能会包含多个对象, 这些对象都可能会对鼠标、触摸事件做出响应, 事件发生后, 每层的该事件发生位置的对象都会被响应该事件, 处理完后会把事件传给下一层。如用户在地图上点击鼠标, 控件层容器层先的相关对象先响应该事件, 处理完成后再把事件传递给覆盖物层容器, 最后是传递给地图层容器, 逐层传递。但有些对象会屏蔽下一层容器的对象对上述事件的响应 (如拖动地图缩放控件时候, 地图、地图上的标注不会跟随移动) , 使用观察者模型作设计能有效解耦地图API的各个模块。

观察者模式定义了对象之间依赖关系, 发生改变的对象称之为观察目标, 而被通知的对象称之为观察者, 当一个对象改变其状态时, 它的所有观察者都会收到通知, 并按既定的策略做出反映。一个观察目标可以对应多个观察者, 而且这些观察者之间没有相互联系, 所以可以根据需要增加和删除观察者, 使得系统更易于扩展, 观察者模式又称为发布-订阅模式。

3 电子地图API的实现

电子地图API最关键是显示服务器上的瓦片地图, 所以动作响应层和地图层是整个API的重点, 而整个动作响应层的中心点和动作响应层的长宽是决定加载哪些瓦片地图的关键所在。

由于地图是经纬度球面坐标系统映射到墨卡托平面坐标系统的结果, 地图层容器存放的正是墨卡托平面坐标系统的瓦片地图, 通过地图投影类中的公式, 能计算出某缩放等级下电子地图中心点经纬度对应墨卡托平面坐标系的坐标, 然后把该坐标作为地图层和动作响应层的中心点, 地图层容器根据动作响应层的中心点在墨卡托平面坐标系统的位置和地图窗口的长度、宽度, 计算出地图层应该加载哪些瓦片地图并加载。当地图拖动时, 地图API根据动作响应层的XY轴平移量, 根据上述办法判断出加载的瓦片地图, 哪些在地图缓存队列的图片不再需要。地图缓存队列大小固定, 有助控制内存消耗量, 当需加载的瓦片地图不在缓存队列中, 则按LRU策略删除不在地图窗口中的地图瓦片, 并加载新的。为改善用户体验, 地图层容器面积稍微比动作响应层大, 地图缓存队列的大小也设成比地图层容器稍大, 以免用户拖动地图时候出现白边。

4 结语

本文通过提出新的基于瓦片地图技术的电子地图API设计, 实现了高性能的瓦片地图展示办法。通过采用分层技术和观察者模式的设计方法, 地图层容器、覆盖物层容器、动作响应层、控件层容器能做到各司其责, 在其实现中均能及时响应各种用户动作, 根据此设计, 作者分别用Javascript和Actionscript3分别编写地图API, 由于采取了单线程设计并结合最新的Javascript WEBGL技术和Flash stage 3D技术, 性能较现有的商用、开源地图API有大幅度提高, 在性能较差的设备也能表现良好, 增强了地理信息系统在企业中的使用度。

摘要:随着计算机存储技术和企业地理信息技术的发展, 瓦片地图技术得到了广泛的应用, 该技术通过预先把矢量地图切分、缓存成图片的方式, 极大地提高了电子地图的访问速度和用户体验。电子地图API是各地理信息应用的基础, 其设计和实现对企业的信息化具有重要的影响。

关键词:瓦片地图技术,电子地图API,墨卡托投影

参考文献

[1]任留成, 杨晓梅, 赵忠明.空间墨卡托投影研究[J].测绘学报, 2003, 32 (1) :32-33.

[2]崔金红, 王旭.Google地图算法研究及实现[J].计算机科学, 2007, 34 (11) :60-61.

[3]刘轩明, 林连雷, 姜守达.一种数字地图图片加载方法[J].自动化技术与应用, 2009, 28 (10) :10-12.

[4]Mark Allen Weiss, 张怀勇.数据结构与算法分析[M].北京:人民邮电出版社, 2008.119-120.

WIN32 API是什么 第4篇

操作系统上的应用程序。可以说,如果你曾经学过VC,那么API对你来说不是什么问题。但是如果你没有学过VC,或者你对Windows95的结构体系不熟悉,那么可以说,学习API将是一件很辛苦的事情。

如果你打开WINDOWS的SYSTEM文件夹,你可以发现其中有很多附加名为DLL的文件。一个DLL中包含的API函数并不只是一个,数十个,甚至是数百个。我们能都掌握它嘛?回答是否定的∶不可能掌握。但实际上,我们真的没必要都掌握,只要重点掌握Windos系统本身自带的API函数就可以了,

但,在其中还应当抛开掉同VB本身自有的函数重复的函数。如,VB的etAttr命令可以获得文件属性,SetAttr可以设置文件属性。对API来讲也有对应的函数GetFileAttributes和SetFileAttributes,性能都差不多。如此地一算,剩下来的也就5、600个。是的,也不少。但,我可以敢跟你说,只要你熟悉地掌握100个,那么你的编程水平比现在高出至少要两倍。尽管人们说VB和WINDOWS具有密切的关系,但我认为,API更接近WINDOWS。如果你学会了API,首要的收获便是对WINDOWS体系结构的认识。这个收获是来自不易的。

多线程API函数 第5篇

1 利用AP I函数进行多线程编程

1.1 多线程的创建

使用Windows API函数CreateThread创建多线程[2]。其函数原型为:

CreateThread第三个参数是函数指针,新线程建立后将执行该函数,函数执行完毕,系统将销毁此线程从而结束多线程。CreateThread要使用的函数是系统级别的,所以后面要缀上stdcall(stdcall是协调参数顺序的)。当然,我们也可用BeginThread创建多线程。其实BeginThread是Delphi对CreateThread进一步的封装,内部实现时用到了CreateThread。

1.2 线程的挂起和恢复

挂起函数,Function SuspendThread(HThread:Thandle):DOWRD

恢复函数,Function ResumeThread(HThread:THandle):DWORD;

ResumeThread和SuspendThread分别对应TThread的Resume和Suspend方法。它们分别负责线程的挂起和唤醒。线程可以挂起自己,但不能自己恢复运行,必须由其它线程恢复它的运行。处于挂起状态的线程占用的CPU时间几乎为0,系统也不会分配时间片给它。

1.3 线程优先级

Win32 API函数Get ThreadPriority和Set ThreadPriority可以获取或设定线程的优先级。这两个函数均以线程句柄为参数。线程的优先级取决于所属进程的优先级和线程的相对优先级。

在Delphi中,TThreadPriority定义的类型为[3]:

type TThreadPriority=(tpIdle,tpLowest,tpLower,tpNormal,tp Higher,tp Highest,tpTimeCritical);

其中,tpIdle优先级最低,tpTimeCritical优先级最高。

1.4 线程的终止

我们可在线程内部调用API函数ExitThread(ExitCode)终止线程[4]。调用Get ExitCodeThread函数获取线程退出码,如果退出码是常量STILL_ACTIVE,表明线程还未退出。当我们获取了退出码后,就可在线程内部调用ExitThread(ExitCode)终止线程了。当然我们也可等待线程所属的进程终止。第三种方式是在线程外部调用API函数TerminateThread,使线程立即停止,但分配的资源不会被释放。调用此函数前,可先将线程挂起再终止线程。除非万不得已,最好不要用此函数终止线程。特别注意Exit Thread和TerminateThread的区别:一个是在线程内部终止线程;一个是在线程外部终止线程。

2 利用Windows AP I实现线程同步

在程序中有多个线程的情况下,为避免访问冲突,就要用到“同步”技术。“同步”的实质就是协调多线程之间的关系,控制它们对重要代码和数据的访问,使它们不发生冲突,有次序、依次执行彼此各自的代码,而不是真的线程都在“同步”发生。同步技术主要有临界区、互斥、信号量、事件等手段。

2.1 临界区(Critica l S e ction)

所谓临界区,就是某个线程独占敏感的共享资源,保护敏感的共享资源不被其他线程操作访问。在没有释放临界区前,其他线程只有挂起等待。只有在释放了临界区后,其他线程才可以对敏感的共享资源进行操作访问。

在使用临界区时,必须调用API函数InitializeCriticalSection对线程对象进行初始化。在每次要访问共享数据之前调用EnterCriticalSection设置进入临界区标志,然后再操作。相应地,要调用Leave Criti cal Section离开临界区。这样就避免了访问冲突。

最后,当不再使用临界区后,要记得在程序中适当的地方使用Delete CriticalSection来删除临界区。

2.2 互斥(Mute x)

互斥内核对象能够保证多个线程对同一共享资源的互斥访问,各线程都可以拥有它,谁拥有谁就能执行。由于互斥对象只有一个,拥有互斥对象的线程才具有访问共享资源的权限,因此共享资源就不会同时被多个线程所访问。当占据资源的线程完成任务处理后,就将拥有的互斥对象释放,以供其它线程能够访问共享资源。

使用互斥对象首先要通过CreateMutex或OpenMutex函数创建或打开一个互斥对象。然后,在一个线程中,当线程访问共享资源前,调用Wait ForSinglObject或Wait FroMutipleObject函数请求占用互斥对象,当线程访问共享资源结束后,通过ReleaseMutex函数来释放其拥有的互斥对象。当互斥对象使用完毕,调用Close Handle函数把它关闭。

在此,介绍下等待函数Wait ForSingleObject:

Wait ForSingleObject的第二个参数一般给常数值INFINITE,表示一直在等待。

函数Wait ForSingleObject的返回值是:

WAIT_OBJECT_0指定对象处于发信号状态;

WAIT_TIMEOUT等待时间到了,指定对象仍处于非发信号状态;

WAIT_ABANDONED互斥对象被抛弃,指定对象被改为非发信号状态。

2.3 信号量(S e ma phore)

信号量内核对象支持同时多个线程对共享资源的访问。在创建对象时,可指定最大同时访问共享资源的线程数和初始线程数。在信号量内核对象中,每增加一个对共享资源进行访问的线程,当前资源计数就会减1。调用ReleaseSemaphore函数后,当前资源计数就会加1。如果正在访问的线程数少于指定的信号总数,则新线程就可访问该共享资源,否则就必须等待其他线程访问完毕才可以。

使用信号量内核对象进行线程同步主要会用到CreateSemaphore、OpenSemaphore、ReleaseSemaphore、Wait ForSingleObject和Wait ForMultipleObjects等函数。最后,也要调用Close Handle函数释放信号量对象。其中,CreateSemaphore用来创建一个信号量内核对象,其函数原型为:

2.4 事件(Eve nt)

Event(事件对象)是多线程最简单的同步手段。和其他同步手段相比,它有启动函数Set Event和暂停函数ResetEvent。有意思的是,它还有个"单步"执行一次的函数PulseEvent,能控制执行一次后暂停。其函数原型为:

3 多线程同步举例

为说明多线程同步技术的特点,给出一个多线程同步的完整源代码,以供参考。当然,以下的源代码很简单,只是在画布上以不同的颜色画椭圆,但它很能说明同步技术的特点。

4 结束语

多线程编程及其同步方法,是Delphi的核心高级编程技术。熟练掌握利用Win32的API函数操作多线程编程及其同步方法,能帮助我们编制高效简洁的多线程应用程序。

摘要:文章讨论了在delphi下利用API函数操作多线程及其同步技术,并举例说明。

关键词:多线程,同步方法,API

参考文献

[1]乔林.参透Delphi/Kylix[M].北京:中国铁道出版社,2003.

[2]Microsoft Corporation.Microsoft Win32程序员参考大全[M].北京:清华大学出版社,1995.

[3]Steve Teixeira,Xavier Pacheco著,徐新华译.Delphi 4开发大全[M].北京:人民邮电出版社,1999.

API证书在中国的分布 第6篇

在当今世界石油贸易市场上,由于采购设备的国际化,随之引发了质量保证和产品责任国际化的课题。采购方(顾客)从质量保障的角度出发,普遍要求石油设备生产厂商按照A P I规范进行生产制造,提供A P I会标产品。另一方面,生产厂商从质量管理,满足顾客要求的角度出发,也普遍接受、使用A P I规范。

随着中国石油“走出去”战略的实施,A P I规范和标准在石油设备生产行业中得到采用也日渐增多,尤其是中国加入“W T O”后,国内制造厂商开始瞄准国际石油设备这个大市场。由于国际上采购商(顾客)对A P I会标产品充满信任,并且中国的供应商可以在价格上更具有竞争性,因此订购中国制造的石油设备空间就会变得越来越大。可见,作为石油设备的生产企业,越早取得A P I认证,给企业带来的商机、利益和好处就越多。取得A P I会标使用许可已成为中国石油设备生产厂商实现企业目标的手段之一。

A P I简介

A P I成立于1 9 1 9年3月2 0日。第一次世界大战期间,众多公司为了与政府合作以确保生死攸关的石油产品可以快速而有效地供应军方,美国国家石油战争委员会作为商务部下设机构初步成立,这就是A P I的前身。A P I是美国石油学会(A m e r i c a n P e t r o l e u m I n s t i t u t e)的英文缩写,是美国第一家国家级的商业协会。

A P I的一项重要任务,就是负责石油和天然气工业用设备的标准化工作,以确保该工业界所用设备的安全、可靠和互换性。

A P I提供6种产品,如表1所示。

制定协调标准是A P I最早和最成功的项目之一,自1 9 2 4年发布第1个标准开始,A P I现在已发布了约5 0 0个标准、8 2个产品取证目录(表2)。A P I是A N S I(A m e r i c a n N a t i o n a l S t a n d a r d s I n s t i t u t e,美国国家标准学会)认可的标准制定机构,其标准制定遵循A N S I的协调和制定程序准则,A P I还与A S T M(A m e r i c a n S o c i e t y o f T e s t i n g M a t e r i a l s,美国材料实验协会)联合制定和出版标准。此外,API还积极参加适合全球工业的ISO(International Organiz ation for Standardiz ation,国际标准化组织)标准的制定工作,是ISO/TC 67/SC9井口设备和管线阀门的秘书处。

API标准应用广泛,不仅在美国被企业采用和被美国联邦及州法律法规以及运输部、国防部、职业安全与健康管理局、美国海关、环境保护署、美国地质勘查局等政府机构引用,而且也在世界范围内被ISO、国际法制计量组织(The International Organiz ation of Legal Metrology)和100多个国家标准所引用。

API标准主要是规定设备性能,有时也包括设计和工艺规范,标准制定领域包括石油生产、炼油、测量、运输、销售、安全和防火、环境规程等,其信息技术标准包括石油和天然气工业用E DI(E lectronic Data Interchange,电子数据交换)、通信和信息技术应用等方面。

API在美国国内以及在世界其他国家都享有很高的声望,它是美国商业部和美国贸易委员会承认的石油机械认证机构。它所制定的石油化工和采油机械技术标准被许多国家采用,中东、南美和亚洲许多国家的石油公司在招标采购石油机械时,一般都要求佩有API标志的产品才能有资格参加投标。因此,拥有API标志的石油机械设备不仅被认为是质量可靠,而且具有先进水平。目前,在包括勘探和生产、运输、精炼及市场营销等各个方面拥有来自全世界的会员。今天,API已发展成为不仅在美国,而且在全世界越来越多地成为石油工业活动的有机组成部分。

一般情况下,API标准每5年至少进行一次复审、修改、重新确认或撤消。有时复审周期可延长一次,但延长不超过2年。所以,除已授权再版延期,API标准自出版之日起,5年后不再有效。

API证书在中国分布

截止2008年12月,全世界有76个国家的2711家油气公司取得了API颁发的证书。我国自1982年兰州石化厂(现中国石油天然气股份有限公司兰州石化分公司)取得国内第一张API 11E证书(证书编号:11E-0018)起,到2008年12月,已有925家公司取得43种共1743张API证书(表2)。这些证书控制了194种产品或服务,基本上覆盖了国内主要石油装备门类。

中国取得API证书最多的公司是宝鸡石油机械有限公司,取得了10张AP I证书,其次是第四石油机械厂和河南中原总机厂石油设备有限公司均为9张,辽河石油勘探局总机械厂和胜利油田高原石油装备有限责任公司二家公司都是8张。国内几家大型石油设备生产企业的取证情况见表3。

API证书在中国的分布情况分析与结论

从表2可以看到,国内取得AP I证书最多的是Sp e c 5CT,为249张,其次分别是Sp e c 6D为235张、Sp e c 5L为152张、ISO 9001:2000为141张、Q17t h Ed为119张、ISO/TS 29001:2003为108张、Sp e c 6A为104张。最少的是St d 602、St d 609、Sp e c11V 1、Sp e c 13A和Sp e c 15L R等5种证书,分别只有1张。也就是说,国内能生产符合AP I规范的产品的企业中,以生产管道阀门和管线的企业为最多。这种情形,为采购方提供了宽泛的选择余地。

表3表明,大型钻机设备生产企业都能够生产以井架为代表的结构件(AP I 4F),从证书编号上还能看出,这些大型企业都是较早取得AP I证书的,可见其技术实力较为雄厚。但应注意到,大型企业在质量管理方面尚有差距,一些大型企业虽然拥有多张AP I证书,为国内领先,但却全是产品规范证书,没有质量管理注册认证证书(AP I Q1证书)。

统计显示,中国企业的AP I认证发展迅速。2004年,只有293家通过认证,取得证书;2005年增加到312家,共取得472张AP I证书;2007年,有690家公司取得1270张证书,到2008年,增加到925家公司取得43种共1743张证书,其发展速度可见一斑。呈现出这种现象的一个重要原因是近些年来中国的石油装备大量进入国际市场。由于国际市场上普遍要求石油装备佩戴AP I标志,因而促使国内生产厂商积极申请AP I认证,力争取得AP I证书。实践表明,佩戴AP I标志的确成为石油装备进入国际市场的必需,例如长城公司出国的所有装备中,只要是AP I会标范围内的设备,都必须佩戴AP I标志,甲方或第三方对设备的检查验收中也广泛采用AP I规范或标准,在这种需求的拉动下,越来越多的中国产品取得AP I证书便成为必然。

任何标准和规范都是在实际运用中不断改进和提高。中国石油装备企业广泛采用AP I标准和规范,在分享AP I成果的同时又对AP I标准和规范的进步发挥巨大的推动作用。美国石油学会也非常重视AP I在中国的发展,2007年11月6日,中国商务部同意AP I在北京设立代表处,成为AP I在美国之外设立的首家办事机构。

设备运行维护API软件应用介绍 第7篇

约翰内斯·海德汉博士 (中国) 有限公司是一家德资企业, 建筑面积2万m2, 包括办公楼、生产厂房、动力厂房以及其他辅助用房, 生产用于数控机床的光栅尺等测量产品。工厂设备设施部以追求高质量高水平的设施维护为目标, 长期维持3~4名管理人员, 外包工人2~4人的水平, 专业维修服务分别与外包签订合同进行。

建厂之初, 公司就已在寻找合适的设备维护软件, 包括一些国内的和国外的, 试用后都感觉不太理想。要求软件应具备以下几个条件。

(1) 界面友好、操作不能过于复杂繁琐, 对提高设施维护水平、规范维护工作有益。

(2) 可以解决备件管理、库存管理、采购管理、巡检维护人员管理等问题, 即能尽可能涵盖设施维护相关方面, 每一方面都要实用。

(3) 具有较强的扩展性, 如需要可以将财务、物流、采购、生产等部门联系起来。

API的出现切合了以上需要。经过与API的几次洽谈, 最终选择了API。

二、海德汉API功能应用

1. API简介

API Maintenance Systems是智能的系统, 由瑞典斯凯福集团 (www.skf.com) 于20世纪80年代中期创立的, 最近10年API成为企业资产管理软件 (EAM) 的领导者之一。目前, API PRO已经在多个行业形成了个性化的应用和案例, 如食品和制药行业、能源和公用事业、港口和交通、OEM/承包商、其他行业。

2. EAM简介

EAM是面向资产密集型企业的企业信息化解决方案的总称。它以提高资产可利用率、降低企业运行维护成本为目标, 以优化企业维修资源为核心, 通过信息化手段, 合理安排维修计划及相关资源与活动。EAM以资产模型、设备台账为基础, 以工单的创建、审批、执行、关闭为主线, 合理、优化地安排相关的人、财、物资源, 将传统的被动检修转变为积极主动的预防性维修, 与实时的数据采集系统集成, 可以实现预防性维护。通过跟踪记录企业的维护历史活动, 将维修人员的个人知识转化为企业范围的智力资本。集成的工业流程与业务流程配置功能, 使得用户可以更方便地进行系统的授权管理和应用的客户化改造工作。

3. 海德汉一期选用模块

API系统所有功能都已经模块化 (见图1) , 企业可以根据自己实际需求来整体规划, 分步实施。以上深色模块是海德汉一期购买的功能。

4. 主要实现管理内容 (见图2)

一期在API系统里主要实现了设备设施资产数据管理、设备设施维修维护流程管理、备件管理、报表管理。现分别介绍如下。

(1) 资产基础数据管理 (见图3)

API可以实现的基础数据管理, 通过结构树可以找到每一个具体设备。每个设备可附加图纸、维修手手册、备件、照片、工单、工作历史、位置、供应信息等。

(2) 维修维护流程管理

由设备结构树中选择设备+进入工单界面+选择故障类型=工单生成。在工作过程中, 工单监视功能让管理人员更方便地监视各项工作进展情况。

(3) 备件管理

备件 (完整的备件信息包含了3个程序, 即备件基本信息、备件供应商信息、备件库存信息) 、备件搜索、维护对象 (可附技术说明、文档信息、成本和交易信息、消息模块) 。备件都有“属性”和“分类”两个分别定义的特质, 以利于将来数据分析和查询, 如备件分类可以是空调系统或是压缩空气系统。通过库存模块可以实现备件的管理, 包括直接入库、库存移动、报废、移入、移出、调整、归还入库、据工单预留、库存盘点、生成库存报表。设备与备件也可以关联, 备件可反馈到设备, 设备 (维护对象) 自动关联备件。

(4) 报表管理

例如图4的库存值列表, 选择仓库编码、备件分类等信息即可进行汇总。

三、API在海德的实施

1. 制定项目计划

(1) 项目组建立。项目组人员包括公司设施维护技术人员3人、IT人员1名、API工程师1名。IT人员将在软件安装、运行环境方面给予支持, 召开项目启动会议, 并制定推进软件实施项目计划。

(2) 系统安装和管理员培训;

(3) 实施调研;

(4) 数据收集及导入;

(5) 配置及测试;

(6) 工厂测试及最终用户培训;

(7) 报表设计与培训;

(8) 上线支持。

以上工作在两个月内完成。软件公司支持人员一个共10个工作日分两次到现场指导培训。之后双方通过电话解决工作中遇到的问题。1年之后, 工厂计划增加购买另两个模块以及另两个用户权限。

2. 数据导入

建立用户组, 设立权限和级别, 将备品备件的Excel数据导入系统, 包含价格、供货商等重要信息。将Excel形式的位置表, 设备结构树数据导入系统。建立库房名称和编号, 将Excel形式的故障现象代码表、故障原因代码表、维修方法代码表导入系统

3. 工单举例

作为具体工作的安排媒介, 工单在日常工作中占有重要的地位。以工程师张某安排工人李某和王某更换空调机皮带为例。

(1) 张某从设备树中找到空调机所在位置—找到位置下的该空调机—新建工单自动生成工单编号—给工单起名“更换皮带”—点备件选项指定备件名称 (库位等信息自动带出) —指定工作时间—指定操作人员—指定作业类型 (预防性维护/非计划性作业/基于条件的作业/计划性的纠正性维护/其他作业) —指定作业指导编码 (可选) —指定负责人—指定成本中心 (可选) —指定工作间隔 (无或定期) —指定计划停机时间 (可选) —启动工单—打印。

(2) 工作期间可查看工作执行状态、进行工单展望等工作。

(3) 工作完成后, 李某和王某签名 (也可选择非纸制形式, 从电脑中关单) , 填写具体工作时间和执行情况简述。工程师确认备件情况、时间、检查实际工作后, 软件系统中关闭工单, 此工单将进入历史工单。从皮带备件历史中可看到是哪个工单使用了备件以及具体的时间、数量等信息。

四、应用效果

1. 项目成功的必要条件

(1) 公司理念上认可, 经济上保障;

(2) 项目需求、目标定义明确;

(3) 确定实施团队成员, 充分调动每个人的参与积极性;

(4) 安排必要的时间学习软件, 接受培训;

(5) 充分准备, 包括数据整理、收集和流程整理及系统集成, 如设备树的建立经过了充分反复的论证才最终实施;

(6) 持续改进软件操作, 与软件供应商加强沟通;

(7) 工作中保持恒心, 坚持使用, 探索扩展和发掘已有功能;

(8) 总结一些使用窍门、快捷方法, 进行必要的创新。

2. 备件管理方面

由原来的无序存放变为有序存放, 由原来的没有编号变为每个备件都有一个系统唯一的编号。这样做的好处有: (1) 工单中需要的备件可以根据库位号快速寻找, 并在要发工单时预留; (2) 盘点时库存控制数据生成盘点表, 保留查询依据, 数量有出入时可根据工单查找使用纪录; (3) 最小库存自动判别可在数量低于最低设定值时报警。

另外, 使用API软件后备件可按名称、编号、成本中心、数量、条形码、类别、系统、库位、供货商、库房、价格、成本中心、属性等等查询、汇总、分析。唯一的备件可以分别关联到包括其的母设备, 在设备更换备件时可以在工单中方便快捷的调用, 并在半闭工单进行库存控制中消减数量。

3. 维护工作方面

(1) 由原先的维护工作仅用Office软件对大事件进行记录, 变为可对具体每一个设备从头至尾做过的保养和大修进行单独统计, 更换过什么备件、何时何人、何种故障原因、何种故障现现、何种解决办法, 也就是更加精确化具体化, 对每一个设备的生命周期可进行管理。

(2) 节约维修耗时。以前报修后, 要班长确认、技术员确认、报送迭修、备件查找、修复确认、工作登记、统计分析, 有时还要口头通知一些技术要点和细节, 比较耗时;现在因为软件的应用而简化了许多细节, 而且有据可依, 有据可查。

4. 效率改善与提升

(1) 平均故障时间 (MTTB, Mean time to breakdown) 与平均故障间隔时间 (MTBF, Mean time between fail) 得到改善;

(2) 规范化维护工作;

(3) 维护工作合格率的提高;

(4) 生产操作人员的参与;

(5) 备件的优化及库存管理;

(6) 减少停机次数并提高人员工作效率;

(7) 数据统计耗时由之前的缓慢或没有达到变成目前的快捷丰富。

5. 工作集成化方面

几乎所有的设施维护工作全部可以集成到软件中来管理, 包括维护人员和管理、工厂设施设备的管理、备品备件的管理、采购的管理、巡检、定期维护、应急修理、报表统计、盘点、工厂图纸、设备图纸技术资料、成本的管理。实际工作中, 生产部门、财务部门、采购部门等工作也可以融入到此软件中。

五、结论

基于百度地图API的场强地图展示 第8篇

1 使用的技术

1.1 百度地图API

百度地图API包括Java Script API、Web服务API、Android SDK等多种开发工具与服务, 提供基本的地图展示、搜索、定位、逆/地址解析等功能, 适用于PC端、移动端和服务器等多种设备, 多种操作系统下的地图应用开发。

1.2 Java Script

Java Script一种直译式的动态类型、弱类型、基于原型的语言, 内置支持类型。Java Script具有如下几个特点:这是一种解释性的脚本语言 (代码不进行预编译) ;主要用来向HTML页面添加交互行为;可以直接嵌入HTML页面, 但写成单独的js文件有利于结构和行为的分离;跨平台特性, 在绝大多数浏览器的支持下, 可以在多种平台下运行 (如Windows、Linux、Mac、ios等) 。

2 设计方案

2.1 功能要求

在对测试点地图展示功能的设计中, 应该具有如下功能:通过为地图添加控件, 实现点击控件查看整体场强、各频率场强、极值和均值等的分布情况的功能;鼠标点击场强标注查看测试点的详细信息, 包括坐标、频率和场强值等;可查看驾车路线, 鼠标拖拽修改起始点, 实现导航功能。

2.2 系统体系结构

该地图展示系统功能的实现, 可划分为3个模块来完成:数据处理模块、百度地图展示模块、跳转页面。3大模块之间的逻辑关系可以用图1表示。

2.3 数据处理

由无线电监测设备得到的原始的TXT文件包括测试点的经纬度、海拔、频率、场强、行车速度等信息。首先, 对所需数据的提取。同时, 用户数据应以数组的形式存储, 结构为[经度, 纬度, 频率, 场强]。

在数据的处理过程中, 使用PHP语言, 将提取之后的数据信息存储在数组当中, 并以本地JS文件的形式存储下来。最终得到的本地数据的文件名为C2.js。

在数据处理过程中用到了2个关键函数:explode () 和implode () 。

explode () 函数:将字符串分割为数组, 利用该函数, 将原始txt文件的内容按列分割成多维数组的形式, 便于提取所需列的内容。

implode () 函数:将数组元素连接成字符串。

2.4 地图展示Java Script设计

地图展示功能是通过Java Script语言实现。在各地图展示模块的设计中, 包括3个子模块来分别实现相应功能的:整体场强、均值、极值图;频率场强图;驾车路线图。

在每个模块的实现过程中, 用到了以下几个重要函数:

(1) Point Collection (points:Array<Point>[, opts:Point Collection Options]) :创建海量点类, points为点的坐标集合, opts为点的绘制样式。

(2) Info Window (content:String|HTMLE lement[, opts:Info Window Options]) :创建一个信息窗实例, 其中content支持HTML内容。

(3) Driving Route (location:Map|Point|Stri ng[, opts:Driving Route Options]) :创建一个驾车导航实例, 其中location表示检索区域, 在驾车路线图的设计过程中, 利用该函数, 实现拖拽鼠标修改起始点, 展现驾车路线。

各子地图展示功能的设计流程见图2。

申请百度地图API密钥后, 通过在html文件的<head></head>标签中加入<script type=“text/javascript”src=http://api.map.baidu.com/api?v=2.0&ak=你的密钥></script>实现引用的。

在整个javascript语言对本地数据的读取和交互, 通过在<head></head>标签中加入<script type=“text/javascript”src=“CUsersAdministratorDesktopC2.js”</script>实现的。

地图、控件、场强图例能够展现在地图上, 都需要一个HTML元素作为容器来承载它们, 所以首先需要创建div元素。

2.5 跳转页面

跳转页面首先定义不同的单项选择按钮radio, 为它们绑定不同的子网页html文件, 来实现按键选择功能。接着定义button按钮, 并为button自定义function () 功能实现页面的跳转, 跳转页面设计的流程具体可表示如下:1) 设置网页图标、背景;2) 为radio和button按钮创建div元素;3) 定义radio, 绑定相应子网页, 实现选择功能;4) 定义button, 自定义function () 函数, 实现跳转。

图4各频率图

2.6 系统最终效果图 (见图3~图5)

这分别是3个子网页的最终效果, 在整体场强图中, 点击标注点, 弹出信息窗口, 显示点击点的场强、频率、经纬度信息;各频率图中, 通过下拉菜单, 选择我们所需要观察的频率场强信息;在驾车路线页面, 可以通过鼠标拖拽改变起始点, 查看相应的驾车线路。

3 结语

在此次基于百度地图API的场强展示设计中, 通过百度地图API和Java Script, 我们完成了地图展示的功能, 实现了对于测试点无线电信号的可视化查看和管理。

摘要:针对不同电台信号测试数据多, 信息量大、可视化能力差的问题, 讨论设计一个可视化、精确化、直观化显示电台信号在不同测试点场强大小的地图。基于百度地图API, 通过Java Script脚本语言, 讨论设计一个可视化的地图展示系统, 以直观的形式展示测试点的坐标、场强、频率和驾车路线等信息。

关键词:百度地图API,JavaScript,场强覆盖

参考文献

[1]董卓亚.Java Script API的通信地图展示[J].电子设计工程, 2013 (28) .

[2]殷悦, 刘伟, 郭东恩.基于百度地图API房地产展示系统的实现[J].软件导刊, 2012 (11) .

国内非API油套管质量现状浅谈 第9篇

国内开发非API油套管的钢级约有110多种,大大超过API钢级的数量[1]。国内开发特殊螺纹接头大约有50多种。按订货产品估算,近几年国内实际投入油田应用的特殊螺纹接头大约在30~40种,非API钢级的大约在40~50种[2]。整体上看非API油井管在西部油田运用普遍,如新疆油田、塔里木油田、长庆油田、四川油田等。

2 国内非API油套管存在的问题

目前国内非API油套管订货、制造、交货中存在一些质量问题,具体情况如下。

2.1 生产制造环节

2.1.1 批量生产的稳定性存在问题

各工厂自行开发的非API产品,很多产品仅仅是小批量试验通过,大批量生产中工艺上还存在很多不确定或不稳定因素,产品质量的均匀性、稳定性存在问题,是否适用油田现场工况还存在疑问。如在某些工厂非API油井管产品热处理后进行理化性能试验时,产品力学性能多批次不能达标,工厂重新进行整批热处理;甚至还出现过再次试验依然不合格,进行第3、甚至4次热处理的情况。

再如镍基合金的油套管国内个别工厂有全过程生产能力,但工艺技术还不成熟、光管成材率较低,并且受轧机孔型限制,轧制大口径套管效率低、质量不稳定,交货期和质量难以保证,在交货期难以保证的情况下多选择外购合金光管。

2.1.2 产品外协问题

(1)很多工厂存在大量外购原料或外协加工螺纹现象,而外协工厂的技术和质量水平未经过审核评价,油套管外协工厂技术能力一般弱于主体工厂,并且这些问题没有在采购合同中明确,这样就使得采购方存在较高质量风险。

(2)生产线存在加工能力不足问题。如一些工厂螺纹加工生产线数量不足,在交货期或成本压力下,就存在管体和接箍螺纹全都要外协的现象,产品质量也非主体工厂能保证。

2.1.3 无损检测、水压、拧接等生产环节问题

(1)无损检测的能力不平衡。产能的扩张使得各工厂生产线数量较多,但各个生产线配置的检测设备和人员技术水平参差不齐,有些生产线无损探伤设备和配备人员甚至不能保证基本要求,而非API油套管对无损检测设备能力要求更高,如某些产品壁厚检测覆盖率要求100%,而一些工厂设备能力有限,实际中并不能保证100%覆盖要求。

(2)水压试验问题。水压试验是验证管材的关键环节,要求逐支进行试验,但因设备效率等问题,制约总体生产进度,一些工厂存在降压、减量等方式,如不加强监督,会存在重大质量隐患。如某工厂套管水压试验过程中,监督中发现水压试验压力值错误,标准要求水压值应为67.0MPa,工厂实际水压值为50.0MPa,在有监理的状态下得到避免。

(3)工厂端接箍拧接问题。一些耐腐蚀管材相对较软,未能充分考虑其材料特性而进行设计,依然使用传统夹具,拧接后接箍表面存在周向划痕现象严重,如此问题在工厂得不到有效改善或控制,该质量问题会为日后油田生产带来隐患。

另外,拧接上扣时也存在大量问题。非API螺纹上扣扭矩大都是工厂设计开发时试验制定,大批量生产时是否合适存在疑问。如某工厂的特殊扣上扣按设计要求进行,实际生产中发现存在接箍拧接不到位或者拧接扭矩过大情况,从拧接图像上反映曲线异常,当卸扣后检查螺纹密封面,发现大量密封面损伤问题。

2.1.4 外观质量问题

各生产厂的油套管生产线上均设有外观检验岗位,但由于外观检验人员责任心不强、工作性质单调、工作环境(灯光照明条等外部条件)较差等原因,检验人员并不能做到对所有油套管进行100%外观检验,普遍出现漏检等问题。

(1)螺纹外观质量。螺纹外观检查是控制螺纹质量的很重要环节,工作内容检查螺纹是否有裂纹、划伤、断扣、毛刺、黑皮等现象,但很多工厂执行中存在流于形式情况。如某工厂交货的产品中,在油田现场下井使用前发现1起螺纹纵向表面裂纹严重问题,而工厂所有检验环节均未发现该螺纹纵向表面裂纹。

(2)管体外观质量。如探伤设备不易检测出多种外观表面缺陷,凹坑、凹槽、折叠、内棱、斜裂纹、弯曲等缺陷,所以有必要加强对外观检验的监督力度。

(3)喷标问题。通常大多数用户并未对喷标内容做具体要求,加之API标准中对喷标内容选择项较多,导致工厂在喷标上随意性很大。如某工厂在给某交货的管体喷标上竟然将很重要的长度参数未喷;同是该工厂在给某油田的同规格油管前后2批交货非API管子上,前一批喷有API会标,而后一批又未喷API会标情况,反映出工厂对外观质量、标识喷涂控制上随意性很大,缺乏必要认识和规范化管理。

(4)辅助环节质量。生产厂大都重视生产加工等基础环节,但对管体、接箍表面涂漆、螺纹保护等辅助环节质量上重视不足。在工厂如果此类问题出现,若有现场监理还能及时要求,得到补救,但如工厂不重视,当通过运输、吊装环节后到达油田现场时,管子的外观可能就发生了变化,影响了用户入库验收工作。

2.2 试验环节问题

2.2.1 油套管抗硫试验问题

按照API 5CT对抗硫管C90和T95钢级的要求是应按ANSI-NACE TM0177中一种试验方法,每炉批做硫化物应力开裂试验,试验周期720h[3]。工厂抓住非API抗硫产品没有标准规范或技术协议中未明确,加之国内工厂抗硫试验能力有限,在排产时未能做到同步安排试验计划,达不到每炉进行抗硫试验的要求,因此该关键环节上经常采取拖延办法,延缓试验或者仅进行抽样的简化试验方案。此种做法实际增加了采购方的质量风险,将产品的风险转移给了用户。

2.2.2 试验方法问题

在抗硫试验方法上,标准规定有A法、B法、D法,而多数用户并未对抗硫试验方法在订货中做出明确要求,导致工厂会自主选择利己方法进行试验。

2.2.3 数据准确性问题

近几年各油井管工厂急速扩张,大都建立自己分工厂、分试验室,在扩张的同时人员技术等软实力不能马上跟上,就出现同家工厂不同试验室,试验数据存在差异情况。特别是未经过相关权威机构认证试验室问题更多。

2.3 工厂管理中存在问题

2.3.1 管理体系问题

在监造监督过程中就发现,某厂的分厂质量检验职能归属于生产部门管理,这就使产品质量控制上难以有效执行。甚至在一些工厂出现过工艺卡上写的要求,在实际生产、检验中并未按要求执行的现象。

2.3.2 交货周期问题

交货期是业主最关心的问题之一,在签订合同时,用户和工厂已协商确定好相应的交货时间。但实际情况是大多数工厂由于自身生产环节都存在短板,保证的交货期都难以达到,经常会出现延期交货现象,给油田生产造成一定影响。

3 对非API油井采购订货的建议

3.1 订货技术协议问题

国内工厂非API的产品已形成系列,基本可以满足国内油田需要;但是,还需要进一步加强新产品的鉴定评价和适用性评价,合理分类,选择性使用,以避免质量和安全可靠性方面的风险。例如,同样是气密封特殊螺纹,各家开发有几十个品种,每个产品的密封承受压力,在什么条件下是多少?抗挤的油井管产品,实际抗挤毁能力是多少?抗硫管,实际的抗硫化氢应力腐蚀能力指标是多少?等等。这种状况给油田用户订货带来较大的盲目性,承担了过多技术风险。

非API油套管是否符合技术条件往往是工厂提出,油田大都是被动采用,并且在技术细节上工厂大都使用了含糊说明,比如关键性试验仅仅只提及要做,但在频次、方法等方面并不明确。建议采购前,应提前组织相关工厂对所需产品进行技术谈判或先招技术标,并签好相应技术协议,技术协议的签订应以油田和油田的科研院所为主。

3.2 加强订货前与工厂的沟通

集中采购时,要求各工厂提供非API产品生产的具体地点,哪些产品的原、辅材料需要外协、外购等事项,做到充分了解,提前交底,避免日后产生质量争议。并且必须由业主组织专家对新投产生产线或外协、外购加工厂进行实地考察,确认相关工厂并备案,以保证产品品质能得到充分保证。

3.3 加强非API油套管监理工作

第三方监理通过对生产过程中问题及时的发现和处理,能有效控制订货产品质量,同时能及时与业主沟通,极大的减少工厂将隐蔽风险转移给用户的可能。建议加大非API驻厂监造力度和规模,提高非API油套管监督覆盖率。

4 结束语

通过用户明确的要求、工厂自身质量意识的提高,以及相关机构对非API体系的标准化,将整体提升国内非API油套管的质量水平。

(1)采购时就要做好事前(技术标准、协议等)、事中控制(加强监理,过程监督),才能保证国产非API油套管质量。

(2)工厂方面应该就已经存在的问题积极整改,可能出现的问题进行及时预防,确实提升国产非API油套管的整体水平。

(3)对种类繁多、质量各异的非API油套管产品,尽快建立系统的产品、应用、评价标准的非API油套管标准体系,以促进非API油套管健康发展。

摘要:对目前国内非API油套管生产质量进行了介绍,重点就采购、生产、质量监督中发现的问题进行了说明。非API油套问题涉及产品的质量稳定性、产品外协、无损检测、交货周期等。并结合存在的问题,就客户如何在采购非API油套管中降低质量风险提出了一些建议。

关键词:非API,油套管,质量

参考文献

[1]李鹤林,田伟,邝献任.油井管供需形势分析与对策[J].钢管,2010,39(1):1-7.

[2]方伟,许晓锋,徐婷.油井管标准化及非API油井管标准体系[J].石油工业技术监督,2010,26(6):20-23.

API技术范文

API技术范文(精选9篇)API技术 第1篇对于计算机重要信息数据的保护,目前已有学者提出了3层保护体系[1,2]。多家公司也基于操作系统内核设...
点击下载文档文档为doc格式

声明:除非特别标注,否则均为本站原创文章,转载时请以链接形式注明文章出处。如若本站内容侵犯了原著者的合法权益,可联系本站删除。

确认删除?
回到顶部