API(Application Programming Interface,应用程序接口)函数是一些预先定义的函数。 *** 作系统除了协调应用程序的执行、内存分余森配、系统资源管理外。
同时也是一个很大的服务中心,调用这个服务中心的各种服务(每一种服务是一个函数),可以帮助应用程序达到开启视窗、描绘图形、使用周边设备的目的。
例如,图形库中的一组API定义了绘制指针的方式,可于图形输出设备上显示指针。当应用程序需要指针功能时,可在引用、编译时链接到这组API,而运行时就会调用此API的实现(库)来显示指针。
扩展资料
应用:通过API文本查看器,可以方便地查找程序所需要的函数声明、结构类型竖春亩和常数,然后将它复制到剪贴板,最森斗后再粘贴到VB程序的代码段中。
在大多数情况下,只要确定了程序所需要的函数、结构和常数这三个方面后,就可以通过对API文本游览器的以上 *** 作将他们加入到程序段中,从而程序中可以使用这些函数了。这些是学习API最基本的常识问题,它远远占不到API的庞大的体系内容。
参考资料来源:百度百科-API函数
顶级窗口就是应用程序的主窗口,比如你用写字板,写字板上面的每个按钮,每个对话框都是写字板主窗口的子窗口,顶级窗口,就是写字板程序本身的最高级窗口函数功能:该函数发送消息给指定的接受者。接受者可以是一个应用程序、安装驱动器、网络驱动器、系统级设备驱动器或这些系统组件的组合。函数原型:long BroadcastSystemMessage(DWORD dwFIags,LPDWORD IpdwRecipients,UINT UiMessage,WPARAMwParam,LPARAM IParam);参数: dwFlags:选项标志。可取下列值的组合:BSF_FLUSHDISK:接受者处理消息之后清洗磁盘。BSF_FORCEIFHUNG:继续广播消息,即使超时周期结束或一个接受者已挂起。 BSF_IGNORECURRENTTASK:不发送消息给属于当前任务肢纯胡的窗口。这样,应用程序就不会接收自己的消息。BSF_NOHANG:强制挂起的应用程序超时。如果一个接受者超时,不再继续广播消息。 BSF_NOTIMEOUTIFNOTHUNG:只要接受者没挂起,一直等待对消息的响应。不会出现超时。 BSF_POSTMESSAGE:寄送消息。不能和BSF_QUERY组合使用。BSF_QUERY:每次发送消息给一个接受者,只有当前接受者返回TRUE后,才能发送给下一个接受者。 lpdwRecipients:指向变量的指针,该变量含有和接收消息接受者的信裤梁息。此变量可为下列值的组合: BSM_ALLCOMPONENTS:广播到所有的系统组件。BSM_ALLDESKTOPS:Windows NT下,广播到所有的桌面。要求SE_TCB_NAME特权。BSM_APPLICATIONS:广播到应用程序。BSM_INSTALLABLEDRIVERS:Windows 95下,广播到安装驱动器。BSM_INTDRIVER:Windows 95下,广播到网络驱动器。BSM_VXDS:Windows 95下,广播到所有系统级设备驱动器。当函数返回时,此变量接受上述值的组合,以确定真正接受消息的接受者。如果此参数为NULL,则将消息广播到所有的组件。uiMessage:系统消息标识符。广播的消息WParam:32位消息特定值。IParam:32位消息特定值。返回值:如果函数调用成功,返回值是正数。如果函数不能历拦广播消息,返回值是C1。如果参数dwFlags为BSF_QUERY且至少一个接受者返回BROADCAST_QUERY_DENY给相应的消息,返回值是零。若想获得更多的错误信息,请调用GetLastError函数。 备注:如果BSF_QUERY没指定,函数发送指定的消息给所有请求的接受者,并忽略这些接受者返回的值。 速查:Windows NT:4.0及以上版本:Windows:95及以上版本;Windows CE:不支持;头文件:winuser.h;输入库:user32.lib;Unicode:在Windows NT环境下以Unicode和ANSI方式实现。
==================================================================================
与其他应用程序通信
前面我们讲的消息传递都是基于同一个应用程序的,但是在某些情况下我们可能需要向其他的应用程序发送消息,这时候我们可以采用SendMessage()函数向目标应用程序的某个窗口的句柄发送消息。其中的技巧在于获取该窗口的句柄。同时使用RegisterWindowMessage()函数创建一个唯一的消息,并且两个应用程序相互都了解这条消息的含义。同时还会用到BrodcastSystemMessage()函数,它可以向系统中的每个应用程序的主窗口发送消息。这样便可以避免出现获取另一个应用程序窗口句柄的问题。BroadcastSystemMessage()函数提供了附加的标志BSF_LPARAMPOINTER,可以将写入参数lParam的指针转化为可以被目标程序用来访问程序空间的指针,但是这个标志可能尚未进行文档标准化。
方法如下:
首先注册自己的窗口消息。不过我们这次不用WM_USER+1的技术,注册窗口消息的好处是不必费心考虑WM_USER加上某个数之后,所表示的消息标识符是否超出工程的允许范围。本例在两个工程中都使用文本字符串来注册消息。由于这个文本字符串在整个系统中应当是唯一的,因此将使用一种称为GUID的COM技术来命名消息。GUID名字生成器程序可以在MFC的BIN目录下找到,其可执行文件名为GUIDGEN.EXE。该程序将生成在应用程序已知范围内认为是唯一的文本字符串,这对应用程序来说当然是最好不过的。
1) 注册一个唯一的窗口消息
使用GUIDGEN.EXE生成一个GUID。
在应用程序中把GUID定义为窗口消息文本字符串:#define HELLO_MSG “{6047CCB1-E4E7-11d1-9B7E-00AA003D8695}”
使用::RegisterWindowsMessage()注册该窗口消息文本字符串:idHelloMsg = ::RegisterWindowMessage( HELLO_MSG )
保存消息标识符idHelloMsg,便于以后使用。
2) 向其他应用程序发送消息
使用::RegisterWindowsMessage()返回的消息标识符发送消息,可使用以下代码:
::SendMessage(hWnd, idHelloMsg,wParam,lParam)
以上代码假定事先可以通过某种方式获取目标应用程序的某个窗口的句柄。一个指向CWnd类的指针不能在程序范围之外而发挥作用。但是可以在CWnd 类中封装已获取的窗口句柄,并如下所示来发送消息:
CWnd wnd
wnd.Attach( hWnd )
wnd.SendMessage( idHelloMsg,wParam,lParam )
3) 接收已注册的窗口消息
为接收已注册的窗口消息,需要在接收窗口类,一般为CMainFrame中手工添加ON_REGISTERED_MESSAGE消息宏到消息映射中:
BEGIN_MESSAGE_MAP( CMainFrame, CMDIFrameWnd )
// {{AFX_MSG_MAP( CMainFrame ) <br>// }}AFX_MSG_MAP
ON_REGISTERED_MESSAGE( idHelloMsg,OnHelloMsg )
END_MESSAGE_MAP()
有关已注册消息的消息处理函数的代码如下:
LRESULT CMainFrame::OnHelloMsg( WPARAM wParam,LPARAM lParam )
{
// process message
return 0
}
该实例到目前为止,一直假定事先可以通过某种方式取得目标应用程序的某个窗口的句柄。但这是一个困难的任务。简单的方法是向每个应用程序广播一条消息,并且希望目标程序正在监听。由于在系统中注册了一条唯一的消息,因此只有目标程序会响应这条消息。应用程序广播的消息可能是它自己的窗口句柄,于是接收程序可以使用::SendMessage()来发送应答,也可能是用窗口句柄来结束循环。
4) 广播窗口消息
使用下面的代码广播窗口消息:
WPARAM wParam = xxx
LPARAM lParam = xxx
DWORD dwRecipients = BSM_APPLICATIONS
::BroadcastSystemMessage( BSF_IGNORECURRENTTASK,&dwRecipients,idHelloMsg,wParam,lParam )
===================================================================================
例子在百度你搜索 BroadcastSystemMessage例子 很多的,自己找吧
API原意为Application
Programming
Interface
,枝派即
应用程序编程接口
。
通常,在VB、VC等windows
编程环境
中所说的API指的是
windows *** 作系统
的
编程接口
。windows *** 作系统管理电脑中所有的软、硬件资源,我们自己写的程序想要得到一块内存,或者是想要从硬盘读取文件,或者想从网卡读取从网络中传来的数据,都需要通过windows *** 作系统来实现。那么,我们怎么告诉 *** 作系统我们想要做什么呢?就是通过调用windows *** 作系统的接口来实现的,比如想要得到一块内存空间,我们就可以调用
API函数
HeapAlloc
,然后系统就会为我们分配一块内存空间,并返回起始地址。又比如,我们想在硬盘上创建一个文件,可以调用
API函数
CreateFile
,系统就会为我们创建一个文件,并返回文件的标识(以文件句柄的形式),然后如果要向文件中写入数据,需要调用
WriteFile
,系统就会把我们的数据写入到文件猛陆贺中。
API函数
只是应用程序与 *** 作系统之间实现交互的接口,所以无论是到普通应用程序还是在游戏中,起到的作用都悉凳是一样的。
需要注意的是,windows的接口函数是API,但API并不仅仅指windows的接口函数。
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)