利用API函数开发DELPHI程序 |
Windows的API函数是 利用程序开发的有力辅助工具,对它们的 适当 使用,可大大 加强和改良 利用程序与系统打交道的 威力,使自己的程序 真正 存在底层操作 性能 。作为RAD工具的 根底代表,BORLANDDELPHI 固然 本身也已提供了大 量强有力的函数和过程,但在某些场合、要求下, 使用API函数将使你的程序进一步得到改 善,并可拓宽 规模,简化程序代码 。 在DELPHI中 引用API函数,和 使用DELPHI 本身的函 数、过程 几乎没有区别 。在DELPHI目录下有一个WINDOWS.PAS文件, 但凡在其中申明过的API 函数,都可在编程时直接 引用而 毋庸另加 注明 。只不过要 留神, 标准API函数都是以C或C++为 标准进行数据 构造定义的,而DELPHI 使用的是OBJECTPASCAL语言, 因此在 引用时应特殊注 意参数和函数 本身的数据类型 。如一个API函数若为布尔值,则在DELPHI中就应以TRUE、FALSE 而不能用0、非0来对返回值进行推断 。 下面以三个小例子来 注明API函数在DELPHI中的 使用 。 一、当地化 信息框 想让自己的 信息框显示“OK”、“Cancel”还是“确定”、“ 取缔”?假如想使程序彻底当地化,那么还是抛弃MessageDlg和ShowMessage吧——都怪DELPHI 没有 。用MessageBox这个API函数照样容易 。 使用语法为: MessageBox(HWND:hWND,lpMessage: PChar,lpCaption:PChar,uType:Cardinal); 各参数中,第一个为 信息框所属的窗口句柄,第二 个为要显示的 信息,第三个为 信息框的 题目,第四个为 信息框的类型,函数返回值为整型数 。 为使 信息框有所归属,第一个参数设为目前窗口, 猎取其句柄的 步骤是 使用另一个API函数:GetActiveWindows(),且不需任何参数 。 例1)Messagebox示例: 1.重要构件及属性的设置: form1:caption:messagebox示例 bordericons:biMaximize和biHelp设为false panel1:caption:文字 部分Alignment:taLeftJustify panel2:caption:图象 部分Alignment:taLeftJustify button1'button12:caption分别为:确定、确定 取缔、 确定协助 取缔、是不是、重试 取缔、终止重试 取缔、 信息、 发问、系统图标、 忠告、 停留、组合 模式 bitbtn1:kind:bkClose 如图一所示: 2.事件 注明:(详见源程序,下仅举两例) {文字 部分以button2click()为例} procedureTForm1.Button2Click(Sender:TObject); begin casemessagebox(getactivewindow(), 显示确定、 取缔框,例子, okcancel) ofidok:messagebox(getactivewindow(), 您按下的是“确定”按钮, 后果,mb_ok); idcancel:messagebox(getactivewindow(), 您按下的是“ 取缔”按钮, 后果,mb_ok); end; end; {图象 部分以button8click()为例} procedureTForm1.Button8Click(Sender:TObject); begin messagebox(getactivewindow(),显示 忠告图标,例子, mb_iconwarning) end; 二、改良Windows9x的系统登录的安全性: Win9x的“消费者登录”窗口 堪称来者不拒,密码不 对比样 可以“登堂入室”,系统为消费者保留的个人设置等信息也就毫无保密性可言,通过查 看Profiles目录,可轻松地将其复制或删除 。 固然Win95、Win98的 利用对象是个人消费者,但 在某些场合下,还是让登录窗口起点作用的好 。 要使系统登录 存在安全性,对非法 使用者真正能 拒之门外, 不妨用两个API函数来实现此 目标 。 例二)系统登录 审查 1.重要构件及属性设置: form1:caption:CheckUser height、width:设为最小值 2.事件 注明: //定义变量 private size:cardinal; name:pchar; entry:boolean;{Privatedeclarations} procedureTCheckUser.FormShow(Sender:TObject); begin size:=64; name:=StrAlloc(64); { 审查消费者名,推断是按了“ 取缔”按钮还是键入了新消费者名} ifGetUsername(name,size) thenifname=’wj’//‘wj’为小编机器的登录消费者名 {在此,若同意的合法 使用者不止一个,还可利用关系运算指定 一个以上的消费者进入 。 如:if(name=’computer1’)or(name=’computer2’) } thenentry:=true; close; end; procedureTCheckUser.FormClose (Sender:TObject;varAction:TCloseAction); begin ifnotentry thenExitWindowsEx(EWX_REBOOT,32); //若消费者名不对,则再一次启动Windows end; procedureTCheckUser.FormCreate(Sender:TObject); begin entry:=false;//设定初始值 end; 编译 结束后,生成EXE文件, 而后 打开注册表—— 使用Regedit,找到HKEY_LOCAL_MACHINESOFTWAREMicrWindowsCurrentVersionRUN 行,增加键值名(如:CheckUser)及键值(EXE文件所在的 完全路径) 。如图所示: 好了,再一次启动一次,没有正确的密码还能进入吗 ? 三.没有“媒体播放器”的声音播放 目前做了一个小程序,想在“对于”窗口外加一段 声音 注明,但小小的“对于”FORM放上一个长长的、Visible属性需为False的MediaPlayer构 件 着实别扭 。东查西找之下,还是靠API函数SNDPLAYSOUND()解决了问题——从而 开脱了MediaPlayer 的“ 禁锢” 。例三) 使用API函数操纵声音文件的播放:( 部分代码) procedureTaboutBox.FormShow(Sender:TObject); begin //播放目前目录下的welcome.wav文件 sndplaysound(‘welcome.wav’,snd_async) end; procedureTAboutBox.FormClick(Sender:TObject); begin // 停留播放 sndplaysound(‘’,snd_async); end; 别忘了,在USES子句中加入mmsystem单元 。假如只 需求播放声音,那么一条API函数就能实现 性能的还用得着MediaPlayer来大动干戈吗? 总之, 使用DELPHI的“聪慧的程序员”们应该 充足 施展DELPHI调用API函数容易快捷的优势,好好利用API函数以更好地为自己程序服务 。 |