同福客栈's Archiver
客栈 ? Delphi ? delphi 的api函数 查看完整版本: delphi 的api函数
libosong 发表于 2007-10-12 21:12 delphi 的api函数
什么是API函数
Win32 API即为Windows应用程序编程接口(Application Programming Inte**ce)。所有在Win32平台上运行的应用程序都可以调用这些函数。
早期的PC机内存非常少,Windows的设计者们不仅要把大量的代码和资源放入,而且还要留出足够的空间让应用程序运行,解决这种矛盾的方法就是通过让多个程序共享常用的代码来实现,这些被共享的代码就是今天所说的API函数。
随着软件技术的不断发展,在Windows平台上出现了很多优秀的可视化编程环境,程序员可以采用“所见即所得”的编程方式来开发具有精美用户界面和功能的应用程序。这些可视化编程环境操作简便、界面友好,比如:Visual C++、Delphi和Visual Basic等。在这些工具中提供了大量的控件,实现了API的部分功能,加速了Windows应用程序的开发。但程序员要想开发出更灵活、更实用、更具效率的应用程序,必然要涉及到直接使用API函数。 API函数的分类 分类 单元
功能及库文件 基本管理 windows
操作系统的基本功能,提供分配内存、 管理任务、装入资源、文件操作等 shell例程 shellapi
win32提供的外壳例程, 如加载其它程序、管理登录等 mci接口 mmsystem
多媒体mci编程接口(winmm.dll) 注册表管理 regstr
win32系统中注册表的管理 消息传送接口 mapi
微软消息传送系统的编程接口(mapi32.dll)
winsocket winsock
winsocket网络编程接口(wsock32.dll) 标准对话框 comdlg
win32的标准对话框,如打开文件、 打印等(comdlg32.dll) activex activex
对象连接与嵌入ole函数 win32外壳扩展 shlobj
针对系统外壳的编程接口,
对资源管理器的某些功能或对象进行扩展
[[i] 本帖最后由 libosong 于 2007-10-12 21:23 编辑 [/i]]
libosong 发表于 2007-10-12 21:13 API函数按不同功能被存放在不同的动态链接库文件中,这些动态链接库文件一般是以DLL为扩展名。在上表中,列举出了编程时较常用的几大类API函数及其主要功能、库文件名和对应的Delphi单元。
Delphi调用API函数实例
Delphi中定义了相应单元,给出了所有Win32 API函数的接口。Delphi调用API函数非常简单,甚至不需要声明外部引用,只需将使用的单元名放在Uses子句中就可以,其它的工作全部由系统定义的单元完成。下面,我们给出几个Delphi中使用API函数的实例,帮助大家理解。
1、在“文档”菜单中添加新项及清空项目
在Windows的开始菜单中有一个文档菜单,保存了最近处理过的文档信息,如何增加新项或将其清空呢?我们可以利用API函数SHAddtoRecentDocs()来实现,它定义在Shlobj单元中,使用前要先在Uses中加以说明。下面为处理方法:
uses shlobj;
procedure TForm1.Button1Click(Sender: TObject); begin
SHAddtoRecentDocs(SHARD_PATH, Pchar('c:\\mydir\\aaa.txt')); //增加新的一项 end;
procedure TForm1.Button2Click(Sender: TObject); begin
SHAddtoRecentDocs(SHARD_PATH, nil); //清空文档菜单 end;
2、使窗口标题栏闪烁
在Windows中,常用窗口标题栏的闪烁来提醒用户,向你的程序中加入这一功能一定很有意思。API函
数Flash Windows( )可以使一个特定的窗口闪动一次,如果将其放在计时器中调用,标题栏闪烁就很容易实现。
procedure TForm1.Button1Click(Sender: TObject); begin
Timer1.Interval:=500; //计时器的间隔时间,每500毫秒触发一次 Timer1.Enabled:=Not Timer1.Enabled; //切换计时器的激活或停止状态 end;
procedure TForm1.Timer1Timer(Sender: TObject); begin
FlashWindow(Form1.Handle,TRUE); //闪烁标题栏 end;
FlashWindows()有两个参数:第一个参数指明窗口的句柄;第二个参数指定窗口是闪动还是恢复始状态。这个函数定义在Windows单元中,是Delphi的缺省单元,故不必再用Uses子句进行说明。
3、在程序中播放WAV声音文件
Windows启动时那声嘹亮的号角声是否让你感到振奋。OK!让我们在自己的程序中来实现它。仅仅播放一个WAV声音文件,当然不需要劳驾MediaPlayer构件,API函数SndPlaySound()就可以很好地完成这一工作。它定义在MMSystem单元中,有两个参数:第一个指明WAV文件的路径、文件名;第二个指明播放方式。实例如下:
uses MMSystem;
procedure TForm1.FormCreate(Sender: TObject); begin
SndPlaySound('c:\\windows\\media\\tada.wav',SND_ASYNC) end;
API函数数量众多,在平时的学习使用中不断积累,加深理解,编程水平一定会有一个大的提高。
大家别误会,这里的戴妃可不是已经香销玉殒的英国王妃,而是INPRISE的招牌产品DELPHI的中文译名!介绍DELPHI的文章已经很多了,大家是不是被它强大的开发功能所折服?可视化编程的出现,使很多朋友圆了程序梦。的确,几个控件的搭配再加上几条语句,也许一个软件就出来了。但是,你是否已不满足使用别人的元件?想更深入的了解WINDOWS的编程?更换的掌握DELPHI?OK,请继续往下看。
DOS下的INT21H对于开发DOS程序很重要,而对于在WINDOWS下开发程序,了解API函数是很有必要的。元件就像招式,而API函数就好比内功心法,有了高深的内力,那么学习招式就易如反掌啦。所以,掌握的API函数越多,你就越可能成为DELPHI高手,甚至WINDOWS编程高手。所以,无论是C++,VB还是DELPHI都无一例外的支持API函数的调用,C++和DELPHI是全面支持API函数,而VB仅支持部分API函数(部分也不少了,已经有几百条之多),尤其是DELPHI调用API函数最方便,已经达到与API函数合二为一的境界,调用API函数和使用自身的函数几乎一样。下面我将为大家详细讲解API函数在DELPHI中的使用,每条语句我都会写个小例子,让大家更能明白其是如何使用的。如果你认真看完本文后,相信大家一定会对DELPHI编程有更深的了解。但是千万不要半途而废,畏难怕繁,记
住:欲练神功,必下苦功!学编程,可不是玩游戏,不能弄个FPE啥作弊的。
(一)控件与消息函数
①语法:AnyPopup: BOOL;
单元:windows.pas(该单元DELPHI会自行在USES里加上,下同)
作用:判断屏幕上是否存在任何弹出式窗口
返回值:BOOL,如存在弹出式菜单,则返回TRUE
注解:对该函数来说,弹出式菜单包含所有可见的包容**窗口,无论弹出式还是重叠窗口
示例:
procedure TForm1.Button1Click(Sender: TObject);
begin
if (AnyPopup) then
Label1.Caption:=?Pop-ups found: TRUE'
else
Label1.Caption:=?Pop-ups found: FALSE';
end;
②语法:EnableWindow(hWnd: HWND; bEnable: BOOL): BOOL;单元:windows.pas
作用:指定的窗口里允许或禁止所有鼠标及键盘输入
返回值:BOOL,如果返回真,WINDOWS已经禁止,否则返回假
示例:
procedure TForm1.Button1Click(Sender: TObject);
begin
if (IsWindowEnabled(Edit1.Handle)) then
begin
EnableWindow(Edit1.Handle,FALSE);
Button1.Caption:=?Enable Window';
Edit1.Text:=?This window is disabled';
end
else
begin
EnableWindow(Edit1.Handle,TRUE);
Button1.Caption:=?Disable Window';
Edit1.Text:=?This window is enabled';
end;
end;
③语法:FlashWindow(hWnd: HWND; bInvert: BOOL): BOOL;
单元:windows.pas
作用:闪烁显示指定窗口。这意味着窗口的标题和说明文字会发生变化,似乎从活动切换到非活动状态、或反向切换。通常对不活动的窗口应用这个函数,引起用户的注意
返回值:BOOL,如窗口在调用前处于活动状态,则返回TRUE
注解:该函数通常与一个计数器组合使用,生成连续的闪烁效果。
在windows nt及windowsfor workgroup中,bInvert参数会被忽略。
但在windows 95中不会忽略
示例:
procedure TForm1.Timer1Timer(Sender: TObject);
begin