问答文章1 问答文章501 问答文章1001 问答文章1501 问答文章2001 问答文章2501 问答文章3001 问答文章3501 问答文章4001 问答文章4501 问答文章5001 问答文章5501 问答文章6001 问答文章6501 问答文章7001 问答文章7501 问答文章8001 问答文章8501 问答文章9001 问答文章9501

怎么给自己的程序提供接口(API)给别的程序操作

发布网友 发布时间:2022-04-29 21:30

我来回答

5个回答

热心网友 时间:2022-06-23 05:24

API(Advanced Programmers Interface,高级程序员接口)(注:API实际是指Application Programming Interface,应用程序编程接口;此处疑为原文错误,不过在VB中也可以这么说吧!)是一套用来控制Windows的各个部件(从桌面的外观到位一个新进程分配的内存)的外观和行为的一套预先定义的Windows函数.用户的每个动作都会引发一个或几个函数的运行以Windows告诉发生了什么.

这在某种程度上很象Windows的天然代码.其他的语言只是提供一种能自动而且更容易的访问API的方法.VB在这方面作了很多工作.它完全隐藏了API并且提供了在Windows环境下编程的一种完全不同的方法.

这也就是说,你用VB写出的每行代码都会被VB转换为API函数传递给Windows.例如,Form1.Print...VB 将会以一定的参数(你的代码中提供的,或是默认参数)调用TextOut 这个API函数.

同样,当你点击窗体上的一个按钮时,Windows会发送一个消息给窗体(这对于你来说是隐藏的),VB获取这个调用并经过分析后生成一个特定事件(Button_Click).

API函数包含在Windows系统目录下的动态连接库文件中(如User32.dll,GDI32.dll,Shell32.dll...).

API 声明

正如在"什么是API"中所说,API函数包含在位于系统目录下的DLL文件中.你可以自己输入API函数的声明,但VB提供了一种更简单的方法,即使用API Text Viewer.

要想在你的工程中声明API函数,只需运行API Text Viewer,打开Win32api.txt(或.MDB如果你已经把它转换成了数据库的话,这样可以加快速度.注:微软的这个文件有很多的不足,你可以试一下本站提供下载的api32.txt),选择"声明",找到所需函数,点击"添加(Add)"并"复制(Copy)",然后粘贴(Paste)到你的工程里.使用预定义的常量和类型也是同样的方法.

你将会遇到一些问题:

假设你想在你的窗体模块中声明一个函数.粘贴然后运行,VB会告诉你:编译错误...Declare 语句不允许作为类或对象模块中的 Public 成员...看起来很糟糕,其实你需要做的只是在声明前面添加一个Private(如 Private Declare Function...).--不要忘了,可是这将使该函数只在该窗体模块可用.

在有些情况下,你会得到"不明确的名称"这样的提示,这是因为函数.常量或其他的什么东西共用了一个名称.由于绝大多数的函数(也可能是全部,我没有验证过)都进行了别名化,亦即意味着你可以通过Alias子句使用其它的而不是他们原有的名称,你只需简单地改变一下函数名称而它仍然可以正常运行.

你可以通过查看VB的Declare语句帮助主题来获取有关Alias的详细说明.

消息(Messages)

好了,现在你已经知道什么是API函数了,但你也一定听说过消息(如果你还没有,你很快就会)并且想知道它是什么.消息是Windows告诉你的程序发生了哪些事件或要求执行特定操作的基本方法.例如,当用户点击一个按钮,移动鼠标,或是向文本框中键入文字时,一条消息就会被发送给你的窗体.

所有发送的消息都有四个参数--一个窗口句柄(hwnd),一个消息编号(msg)还有两个32位长度(Long)的参数.

hwnd即要接受消息的一个窗口的句柄,msg即消息的标识符(编号).该标识符是指引发消息的动作类型(如移动鼠标),另外两个参数是该消息的附加参数(例如当鼠标移动时光标的当前位置)

但是,当消息发送给你时你为什么看不到呢--就象有人在偷你的信一样?请先别恼火,让我告诉你.

小偷其实是Visual Basic.但它并没有偷走你的信,而是在阅读了之后挑出重要的以一种好的方式告诉你.这种方式就是你代码中的事件(Event).

这样,当用户在你的窗体上移动鼠标时,Windows会发送一条WM_MOUSEMOVE消息给你的窗口,VB得到这条消息以及它的参数并运行你在事件MouseMove中的代码,同时VB会把这条消息的第二个32位数(它包含了x,y坐标,单位为像素(Pixel),每个位16位)转换为两个单精度数,单位为缇(Twip).

现在,如果你需要光标坐标的像素表示,然而VB已经把它转换成了缇,因此你需要重新把它转换为以像素为单位.在这里,Windows给了你所需要的,但VB"好意地"进行了转换而使你不得不重新转换.你可能会问--我难道不能自己接收消息吗?答案是肯定的,你可以使用一种叫做子类处理(Subclass)的方法.但你除非必须否则最好不要使用,因为这与VB的安全程序设计有一点点的违背.(注:子类处理确实有很大的风险,但如果使用得当,是很有用处的.不过有一点一定要注意,即千万不要使用VB的断点调试功能,这可能会导致VB崩溃!)

需要补充说明的是:你可以发送消息给你自己的窗口或其他的窗口,只需调用SendMessage或PostMessage(SendMessage会使接受到消息的窗口立刻处理消息,而PostMessage是把消息发送到一个称为消息队列的队列中去,等候处理(它将会在该消息处理完后返回,例如有些延迟)).你必须制定接受消息的窗口的句柄,欲发送消息的编号(所有的消息的编号均为常量,你可以通过API Text Viewer查得)以及两个32位的参数。

另一种含义:

1:美国石油协会(API:American Petrolenm Institute):制定机油标准的组织。汽车用发动机机油必须符合API提出的标准。

2:API还有一种含意:空气污染指数。【英文 air pollution index 的缩写】

3:在JAVA中,API除了有应用“程序程序接口”的意思外,还特指JAVA API的说明文档,也称为JAVA帮助文档。

参考资料:http://bk.baidu.com/view/16068.htm

热心网友 时间:2022-06-23 05:24

图形库中的一组API定义调用绘制图标函数的方式,以于屏幕上显示图标。程序中调用,编译时连接到这组API,执行时便调用API的实现(库)来显示图标。

操作系统的API可用来分配内存或访问文件。许多系统与应用程序提供API接口与实现,比如图形系统,数据库,网络,Web服务,甚至于某些游戏。

一组API经常是一套软件开发工具包(SDK)的一部分。SDK亦可包含其它工具亦或至于硬件,两个术语并不完全等同.

API有诸多不同设计。用于快速执行的接口通常包括函数,常量,变量与数据结构。也有其它方式,如通过解释器,或是提供抽象层以遮蔽同API实现相关的信息,确保使用API的代码无需更改而适应实现变化。

API 就是应用程序编程接口。它是能用来操作组件、应用程序或者操作系统的一组函数。典型的情况下,API 由一个或多个提供某种特殊功能的 DLL 组成。

DLL 是一个文件,其中包含了在 Microsoft® Windows® 下运行的任何应用程序都可调用的函数。运行时,DLL 中的函数动态地链接到调用它的应用程序中。无论有多少应用程序调用 DLL 中的某个函数,在磁盘上只有一个文件包含该函数,且只在它调入内存时才创建该 DLL。

您听到最多的 API 可能是 Windows API,它包括构成 Windows 操作系统的各种 DLL。每个 Windows 应用程序都直接或间接地与 Windows API 互动。Windows API 保证 Windows 下运行的所有应用程序的行为方式一致。

注意 随着 Windows 操作系统的发展,现已发布了几个版本的 Windows API。Windows 3.1 使用 Win16 API。Microsoft® Windows NT®、Windows 95 和 Windows 98 平台使用 Microsoft® Win32® API。
除 Windows API 外,其他一些 API 也已发布。例如,邮件应用程序编程接口 (MAPI) 是一组可用于编写电子邮件应用程序的 DLL。

API 传统上是为开发 Windows 应用程序的 C 和 C++ 程序员编写的,但其他的编程语言(包括VBA)也可以调用 DLL 中的函数。因为大部分 DLL 主要是为 C 和 C++ 程序员编写和整理说明的,所以调用 DLL 函数的方法与调用 VBA 函数会有所不同。在使用 API 时必须了解如何给 DLL 函数传递参数。

警告 调用 Windows API 和 其他 DLL 函数可能会给您的应用程序带来不良影响。从自己的代码中直接调用 DLL 函数时,您绕过了 VBA 通常提供的一些安全机制。如果在定义或调用 DLL 函数时出现错误(所有程序员都不可避免),可能会在应用程序中引起应用程序错误(也称为通用性保护错误,或 GPF)。最好的解决办法是在运行代码以前保存该项目,并确保了解 DLL 函数调用的原理。

热心网友 时间:2022-06-23 05:25

简单的说就是将你的代码封装成DLL,然后其他程序调用这个DLL中的函数;如果你的代码使用了MFC,那么可以封装成MFC DLL。
新建工程时有相应的选择,具体的建议你先查一下DLL方面的相关知识,MFC DLL网上也有很多例子。
我做过这方面的工作,可以Hi我。

热心网友 时间:2022-06-23 05:25

可以实现,首先要知道这几个函数的意思
[DllImport("kernel32.dll", CharSet = CharSet.Auto, SetLastError = true)]
static extern bool CreateProcess(string lpApplicationName, string lpCommandLine, SECURITY_ATTRIBUTES lpProcessAttributes,
SECURITY_ATTRIBUTES lpThreadAttributes, bool bInheritHandles, int dwCreationFlags, IntPtr lpEnvironment,
string lpCurrentDirectory,STARTUPINFO lpStartupInfo, PROCESS_INFORMATION lpProcessInformation);
[DllImport("kernel32.dll")]
static extern bool CreatePipe(out IntPtr hReadPipe, out IntPtr hWritePipe,
SECURITY_ATTRIBUTES lpPipeAttributes, uint nSize);
[DllImport("kernel32.dll", EntryPoint = "PeekNamedPipe", SetLastError = true)]
static extern bool PeekNamedPipe(IntPtr handle, byte[] buffer, uint nBufferSize, ref uint bytesRead,
ref uint bytesAvail, ref uint BytesLeftThisMessage);
[DllImport("kernel32.dll")]
static extern bool ReadFile(IntPtr hFile, byte[] lpBuffer,
uint nNumberOfBytesToRead, out uint lpNumberOfBytesRead, IntPtr lpOverlapped);
[DllImport("kernel32", SetLastError = true, ExactSpelling = true)]
static extern Int32 WaitForSingleObject(IntPtr handle, Int32 milliseconds);
[DllImport("kernel32.dll", SetLastError = true)][return: MarshalAs(UnmanagedType.Bool)]
static extern bool CloseHandle(IntPtr hObject);
[DllImport("kernel32.dll", SetLastError = true)][return: MarshalAs(UnmanagedType.Bool)]
static extern bool TerminateProcess(IntPtr hProcess, uint uExitCode);

[DllImport("Kernel32.dll", SetLastError = true)]
private static extern int GetExitCodeProcess(IntPtr hProcess, ref int lpExitCode);
1、创建pipe;
2、创建进程;
3、在B进程没有结束前读取管道中的数据

这样不仅能获得B进程的返回值,甚至B进程执行过程的输出值也能获取

热心网友 时间:2022-06-23 05:26

这COM技术的一种,可以做成GUI EXE, 象Word, Excel;也可以做成Service.
从CoRegisterClassObject(...)看起吧, COM是Windows的一大支柱,但弄明白了它, 你也就可以当老大了.
声明声明:本网页内容为用户发布,旨在传播知识,不代表本网认同其观点,若有侵权等问题请及时与本网联系,我们将在第一时间删除处理。E-MAIL:11247931@qq.com
ipad屏幕显示变小了 iPad图表分散且变小如何解决? ipad2 没电关机后再打开 所有图标缩小分散 然后强制重启后恢复 但是所 ... iPad图表分散且变小!怎么解决? 古巨基最新那个12分钟的歌叫什么名字 人类发明飞机的历史 ...我们约好后天去爬山,到时候我可以趁机拉她的手吗? 一个陌生男的看见车在女生身边经过他一把就拉着女生的手说小心点... 延安政治文化语境对解放区文学创作产生了哪些影响 新文学碑林简介 建设银行有儿童银行卡吗 操作系统为用户提供哪些接口?它们的区别是什么 我是农历十一月十七日出生的是什么星座 现在办中国银行卡要年费吗给小孩办需要什么证件 十一月17是什么星座 为什么说接口提供的功能,接口不是抽象的么,怎么会提供功能呢? 怎样将光盘刻录到新的光盘里 固定资产重估后减值怎么作帐务处理? 11月17号是什么星座的 1999年11月17日的是什么星座 在刻录光盘时,为什么要先把文件作成镜像文件再进行刻录? 以前年度固定资产减值的账务处理 光盘一次刻录和轨道一次刻录有什么区别? 固定资产评估减值的会计处理方法 资产减值如何做会计处理: 阳历十一月十七日是什么星座 那11月17日出生什么星座? 固定资产减值准备处置转回账务处理 存货、应收款项、固定资产、无形资产” 这四种资产减值的账务处理? 涉及固定资产减值准备如何做账 花薪电子信用卡是什么意思 作为接口的提供方,需要做日志记录吗 对外提供的接口应该注意哪些问题 广东华兴银行可以拿U盾吗? java 类 提供接口 什么意思 手工睫毛怎么清理桌子 采用接口的提供接口方案,不采用接口的提供商品维护和管理的具体方案 手工假睫毛是怎么做出来的?原料是什么哦? 什么是服务和接口 怎么修剪假睫毛?!~ Java中接口到底是什么,老是听到什么你给我提供一个接口之类的话语。 加工假睫毛用的毛料如何变直? 支付宝里广东华兴银行怎么能找到,投的钱在哪里能看到? 手工假睫毛怎么做 华为手机开启了超级省电模式充电时智能充电模式还能起作用吗? 关于假睫毛的这些事,你了解多少? 怎样粘假睫毛?请尽量详细说明 驾驶证扣6分审验告知信息未生成是什么意思? 在12123更换驾驶证显示未获取到您的体检信息不允许办理业务啥意思... 为啥交管12123上面显示驾驶证年审通过了,手机短信却提示未年审?