1.api函数怎么用
API函数
操作系统除了协调应用程序的执行、内存分配、系统资源管理外,同时也是一个很大的服务中心,调用这个服务中心的各种服务(每一种服务是一个函数),可以帮助应用程序达到开启视窗、描绘图形、使用周边设备的目的,由于这些函数服务的对象是应用程序(Application),所以称之为Application Programming Interface,简称API函数。
例子:
读者可能在许多书上看到过API的英文全称(Application Programming Interface),WIN32 API也就是MicrosoftWindows32位平台的应用程序编程接口。对这个定义的理解,需要追溯到操作系统的发展历史上,当WINDOWS操作系统开始占据主导地位的时候,开发WINDOWS平台下的应用程序成为人们的需要。而在WINDOWS程序设计领域处于发展的初期,WINDOWS程序员所能使用的编程工具唯有API函数,这些函数是WINDOWS提供给应用程序与操作系统的接口,他们犹如“积木块”一样,可以搭建出各种界面丰富,功能灵活的应用程序。所以可以认为API函数是构筑整个WINDOWS框架的基石,在它的下面是WINDOWS的操作系统核心,而它的上面则是所有的华丽的WINDOWS应用程序。但是,那时的WINDOWS程序开发还是比较复杂的工作,程序员必须熟记一大堆常用的API函数,而且还得对WINDOWS操作系统有深入的了解。然而随着软件技术的不断发展,在WINDOWS平台上出现了很多优秀的可视化编程环境,程序员可以采用“即见即所得”的编程方式来开发具有精美用户界面和功能强大的应用程序。这些优秀可视化编程环境操作简单、界面友好(诸如VB、VC++、DELPHI等),在这些工具中提供了大量的类库和各种控件,它们替代了API的神秘功能,事实上这些类库和控件都是构架在WIN32 API函数基础之上的,是封装了的API函数的集合。它们把常用的API函数的组合在一起成为一个控件或类库,并赋予其方便的使用方法,所以极大的加速了WINDOWS应用程序开发的过程。有了这些控件和类库,程序员便可以把主要精力放在程序整体功能的设计上,而不必过于关注技术细节。实际上如果我们要开发出更灵活、更实用、更具效率的应用程序,必然要涉及到直接使用API函数,虽然类库和控件使应用程序的开发简单的多,但它们只提供WINDOWS的一般功能,对于比较复杂和特殊的功能来说,使用类库和控件是非常难以实现的,这时就需要采用API函数来实现。 这也是API函数使用的场合,所以我们对待API函数不必刻意研究每一个函数的用法,那也是不现实的(能用的到的API函数有几千个呢)。
2.如何调用API函数
该程序演示了如何用鼠标来获得任何像素的RGB颜色。
该程序使用了计时器,间隔设置为0.01秒来捕捉事件,使用了GetPixel , GetCursorPos 和GetDC WinAPI调用,来获得屏幕上任何地方的像素的颜色。 option Explicit '在表单中加入计时器,使用鼠标移动到屏幕上任何一处,RGB颜色就会显示在表单中的Caption中 ' private Type POINTAPI x as Long y as Long End Type ' private Declare Function GetPixel Lib "gdi32" (byval hdc as Long, _ byval x as Long, byval y as Long) as Long private Declare Function GetCursorPos Lib "user32" (lpPoint as POINTAPI) as Long private Declare Function GetWindowDC Lib "user32" (byval hwnd as Long) as Long ' private Sub Form_Load() Timer1.Interval = 100 End Sub ' private Sub Timer1_Timer() Dim tPOS as POINTAPI Dim sTmp as string Dim lColor as Long Dim lDC as Long ' lDC = GetWindowDC(0) Call GetCursorPos(tPOS) lColor = GetPixel(lDC, tPOS.x, tPOS.y) Label2.BackColor = lColor ' sTmp = Right$("000000" & Hex(lColor), 6) Caption = "R:" & Right$(sTmp, 2) & " G:" & mid$(sTmp, 3, 2) & " B:" & Left$(sTmp, 2) End Sub 至于获取当前窗口,可以使用 Public Declare Function GetForegroundWindow Lib "user32" () As Long 获取当前活动窗体的句柄,再使用GetWindowText的API能获取到相应的标题啦!Public Declare Function GetForegroundWindow Lib "user32" () As Long Public Declare Function SendMessage Lib "user32" Alias "SendMessageA" (ByVal hwnd As Long, ByVal wMsg As Long, ByVal wParam As Long, lParam As Any) As Long Public Const WM_GETTEXT = &HD Public Function GetWin() As String Dim tmp As Long Dim iLen As Long Dim Txt As String tmp = GetForegroundWindow Txt = String(255, Chr(0)) iLen = SendMessage(tmp, WM_GETTEXT, Len(Txt), ByVal Txt) Txt = Left(Txt, iLen) GetWin=Txt End Function 以上代码是获取当前窗体的标题代码!(这里没使用GetWindowText的API)。
3.C# Windows API函数怎么使用,举例说明
//调用方法不难,但是自己要查清楚所调的函数的一些参数才能调
using System;
using System.Runtime.InteropServices;
class Program
{
[DllImport("User32.dll")]//引用你调用的API函数的DLL,这个自己可以在MS上查得到。一般就那几个DLL
public static extern int MessageBox(int h, string m, string c, int type);//声明API函数,名字要和API名字一样。还有参数要和API的参数对应 ,C#和API的参数之间有些类型对应规则,自己查。
static int Main()
{
MessageBox(0, "显示内容", "窗口名", 4);//各参数的含义在MS的API函数中有解释。第一个参数是弹出窗口的父窗口,第二个是显示内容,第三个是窗口标题,第四个是窗口类型。
Console.ReadLine();
return 0;
}
}
//这是个C#控制台程序调用的是WINDOWS的弹出对话框API自己把代码复制上去运行下就行了。其他程序调用方法一样。
4.如何用API函数实现WINDOWS下的串口写程
用API函数实现Windows下的串行通讯冯华亮 2002年4月 四川·电子科大以往的DOS系统是通过DOS中断和BIOS中断向用户提供串行接口的通讯能力。
在Windows环境下,C++的开发工具既没有提供象DOS和BIOS中那样专门的串行通讯控制方法,也不允许用户直接控制串口的中断。为了保证资源共享,Windows系统完全接管了各种硬件资源,使用中断来控制端口将破坏系统的多任务性,使系统的稳定性受到影响。
但Windows同时也提供了功能强大的API函数使用户能间接的控制串行通讯。1、实现串行通讯的相关API函数API函数不仅提供了打开和读写通讯端口的操作方法,还提供了名目繁多的函数以支持对串行通讯的各种操作。
常用函数及作用如表5-1所示。表5-1 常用串行通讯API函数及其作用函数名 作用CreateFile 打开串口GetCommState 检测串口设置SetCommState 设置串口BuilderCommDCB 用字符串中的值来填充设备控制块GetCommTimeouts 检测通信超时设置SetCommTimeouts 设置通信超时参数SetCommMask 设定被监控事件WaitCommEvent 等待被监控事件发生 等待多个被监测对象的结果WriteFile 发送数据ReadFile 接收数据GetOverlappedResult 返回最后重叠(异步)操作结果PurgeComm 清空串口缓冲区,退出所有相关操作ClearCommError 更新串口状态结构体,并清除所有串口硬件错误CloseHandle 关闭串行口2、打开串口函数CreateFile原本用于打开文件,但它同样可用于打开一个通信端口。
与系统中其他对象一样,通信端口也是用句柄来标识的。CreateFile函数返回被操作的通信端口句柄,其调用方法如下:HANDLE CreateFile (LPCTSTR lpFileName, //指向文件名字符串的指针DWORD dwDesireAccess, //操作模式DWORD dwShareMode, //共享方式LPSECURITY_ATTRIBUTES lpSecurityAttributes, //指向安全属性的指针DWORD , //文件建立方式DWORD dwFlagsAndAttributes //文件属性HANDLE hTemplateFile //模板文件句柄)lpFileName:指向一个以NULL结束的字符串,该串指定了要创建、打开或截断的文件、管道、通信源、磁盘设备或控制台的名字。
当用CreateFile打开串口时,这个参数可用“COM1”指定串口1,用“COM2”指定串口2,依此类推。dwDesireAccess: 指定对文件访问的类型,该参数可以为GENERIC_READ(指定对该文件的读访问权)或ENERIC_WRITE(指定该文件的写访问权)两个值之一或同时为为这两个值。
用ENERIC_READ|GENERIC_WRITE则指定可对串口进行读写;dwShareMode:指定此文件可以怎样被共享。因为串行口不支持任何共享模式,所以dwShareMode必须设为0;lpSecurityAttributes定义安全属性,一般不用,可设为NULL。
Win 9x下该参数被忽略;定义文件创建方式, 对串口必须设为OPEN_EXISTING,表示打开已经存在的文件;dwFlagsAndAttributes为该文件指定定义文件属性和标志,这个程序中设为FILE_FLAG_OVERLAPPED,表示异步通信方式;hTemplateFile 指向一个模板文件的句柄,串口无模板可言,设为NULL。在 Windows 9x下该参数必须为NULL。
用异步读写方式打开串口1的函数调用如下:m_hComm = CreateFile(“COM1”, //打开串口1GENERIC_READ | GENERIC_WRITE, //读写方式0, //不能共享NULL, //不用安全结构OPEN_EXISTING, //打开已存在的设备FILE_FLAG_OVERLAPPED, //异步方式0); //无模板串口被成功打开时,返回其句柄,否则返回INVALID_HANDLE_VALUE(0XFFFFFFFF)。3、串口设置第一次打开串口时,串口设置为系统默认值,函数GetCommState和SetCommState可用于检索和设定端口设置的DCB(设备控制块)结构,该结构中BaudRate、ByteSize、StopBits和Parity字段含有串口波特率、数据位数、停止位和奇偶校验控制等信息。
程序中可先用GetCommState检索端口的当前设置,修改其中的部分字段后再用SetCommState进行端口设定。这样可不必构造一个完整的DCB结构。
下面介绍几个主要的函数和结构体:(1)GetCommStateBOOL GetCommState( hCommDev, lpdcb);参数hCommDev标识通信设备,应使用CreateFile返回的句柄。Lpdcb是指向DCB结构的指针,函数调用后当前串口配置信息将被保存在这个结构内。
如果函数成功返回值为TRUE;否则返回值为FALSE。SetCommState用法与GetCommState相似,在此不再重复。
DCB结构定义如下(只介绍主要的几项):typedef struct _ DCB{……DWORD BardRate; //波特率的设置BYTE ByteSize; //数据位的个数BYTE Parity; //是否有奇偶校验位BYTE StopBits; //停止位的个数……}DCB;(2)SetCommTimeoutsBOOL SetCommTimeouts( hCommDev, lpctmo );Lpctmo指向包含新的超时参数的COMMTIMEOUTS结构。COMMTIMEOUTS结构定义如下:typedef struct _ COMMTIMEOUTS{DWORD ReadIntervalTimeout;DWORD ;DWORD ;DWORD 。
转载请注明出处windows之家 » 如何在win10上使用api函数