| 
一、拖动无标题窗体: 
 包含头文件: 
#include $#@60;winuser.h$#@62; 
在窗体或组件的 onMouseDown 事件中加入以下代码: 
if(Button == mbLeft) { ReleaseCapture(); SendMessage( Handle, WM_NCLBUTTONDOWN, HTCAPTION, 0); } 
二、弹出和关闭光驱: 
包含头文件: 
#include $#@60;mmsystem.h$#@62; 
在窗体的OnCreate事件中加入: 
mciSendString("open cdaudio alias cd wait shareable",0,0,0); 
1、要弹出光驱时使用: 
mciSendString("set cd door open",0,0,0); 
2、要关闭光驱时使用: 
mciSendString("set cd door closed",0,0,0); 
三、提取图标: 
包含头文件: 
#include $#@60;shellapi.h$#@62; 
例子: 
TIcon *Icon = new TIcon(); AnsiString FileName = "C:\\WINDOWS\\SYSTEM\\SHELL32.DLL"; int TotalIcon; 
//得到文件SHELL32.DLL的总图标数 TotalIcon = (int)ExtractIcon(Form1->Handle,FileName.c_str(), -1); 
//提取第一个图标,0为第一个,1为第二个,类推... Icon->Handle = ExtractIcon( Form1->Handle, FileName.c_str(), 0); 
//保存图标 Icon->SaveToFile("C:\\1.ICO"); 
四、设置顶端窗口(永在上面): 
包含头文件: 
#include $#@60;winuser.h$#@62; 
1、设置顶层窗口 
SetWindowPos( Handle, HWND_TOPMOST, 0, 0, 0, 0, SWP_NOMOVE||SWP_NOSIZE); 
2、取消顶层窗口 
SetWindowPos( Handle, HWND_NOTOPMOST, 0, 0, 0, 0, SWP_NOMOVE||SWP_NOSIZE); 
 API技巧集 (二) 
12/3/2000 0:0:0··符东亮··yesky 
  (一)不规则窗口 
  Windows提供的只是标准的矩形窗口,要想建立一个不规则的窗口就需要调用API函数来实现。建立一个不规则的窗口,一般是先用创建区域的API函数建立一个不规则的区域,再用API函数SetWindowRgn改变窗口的区域。这些API函数在C++ Builder中包含在头文件wingdi.h和winuser.h里面,因此,要使用这些API函数就要先在程序头部加上包含头文件的语句: 
include $#@60;wingdi.h$#@62; 
include $#@60;winuser.h$#@62; 
  SetWindowRgn函数能改变一个窗口的区域,该函数有三个参数,第一个参数hWnd是欲设置区域的窗口句柄,第二个参数hRgn是欲设置的区域,第三个参数bRedraw一般设为true,即立即重画窗口。 
  用来创建区域的API函数有多个,最常用的有三个: 
  1、CreateRectRgn函数,用来创建一个由X1、Y1和X2、Y2坐标点确定的矩形区域。当坐标点X1和Y1相等、X2和Y2也相等的时候,创建的是一个正方形。 
  例子: 
//创建长方形 
HRGN hRect=CreateRectRgn(0,0,400,200); 
SetWindowRgn(Handle,hRect,true); 
//创建正方形 
HRGN hRect=CreateRectRgn(0,0,300,300); 
SetWindowRgn(Handle,hRect,true); 
  2、CreateEllipticRgn函数,用来创建一个由X1、Y1和X2、Y2坐标点确定的矩形所内切的椭圆。同样,X1、Y1和X2、Y2坐标点所确定的矩形为正方形时,创建的就是一个圆形。 
  例子: 
//创建椭圆 
HRGN hElliptic=CreateEllipticRgn(0,0,400,250); 
SetWindowRgn(Handle,hElliptic,true); 
//创建圆形 
HRGN hElliptic=CreateEllipticRgn(0,0,400,400); 
SetWindowRgn(Handle,hElliptic,true); 
  3、CombineRgn函数,能将两个区域组合为一个新区域,它有四个参数,第一个参数hrgnDest保存合并后的新区域,第二个参数hrgnSrc1、三个参数hrgnSrc2为欲合并的两个区域,第四个参数fnCombineMode是区域组合的方式,它的值是为下面组合方式之一: 
  组合方式 说明 
RGN_AND 建立两个区域的交集 
RGN_COPY 建立hrgnSrc1的拷贝 
RGN_DIFF 建立两个区域不相交的部分 
RGN 建立两个区域的并集 
RGN_XOR 建立除两个区域并集之外的部分 
  例子: 
//创建一个圆形和长方形交集的组合形状 
HRGN hRect=CreateRectRgn(0,0,300,300); 
HRGN hElliptic=CreateEllipticRgn(0,0,400,250); 
CombineRgn(hRect,hRect,hElliptic,RGN_OR); 
SetWindowRgn(Handle,hRect,true); 
  当需要将窗口还原为标准Windows矩形窗口时,只要将SetWindowRgn函数的hRgn参数设为0就行了,如: 
SetWindowRgn(Handle,0,true); 
 API技巧集 (二) 
  (二)得到系统声卡的个数 
  当我们编写一个多媒体程序(如播放器)的时候,有时需要检测一下计算机中是否安装了声卡,如果没有装声卡程序则会终止运行。 
  在这里,我们就要使用API函数waveOutGetNumDevs,调用这个函数可返回系统中安装了的声卡的个数。在C++ Builder 5.0中,它被包含在头文件“mmsystem.h”里面。 
  例子: 
  1、首先在程序头部加入包含头文件的代码: 
#include $#@60;mmsystem.h$#@62; 
  2、在窗体的OnCreate事件中加入下面的代码: 
int Num; 
//得到声卡的个数 
Num=waveOutGetNumDevs(); 
if(Num) 
ShowMessage("你有安装了"+IntToStr(Num)+"块声卡"); 
else 
{ 
ShowMessage("你没有安装声卡!\n程序终止运行!"); 
Close(); 
} 
  3、编译运行程序。 
API技巧集 (二) 
   (三)获得、设置鼠标双击的间隔时间 
  在指定间隔的时间内,连续两次鼠标单击操作称为双击,双击间隔的时间可以在控制面板中的鼠标属性里面改变。若要在自编的应用程序中能获得或设置鼠标双击的间隔时间,我们只需使用Windows的两个API函数GetDoubleClickTime和SetDoubleClickTime。调用GetDoubleClickTime可以返回鼠标双击的间隔时间,而使用SetDoubleClickTime则可以设置鼠标双击间隔的时间。 
  下面让我们来做一个获得和设置鼠标双击间隔时间的简单的程序: 
  首先,在Borland C++ Builder 5.0 中新建一个工程,往窗体Form1中添加两个Button组件,把它们的Caption属性分别改为“获取双击间隔时间”和“设置双击间隔时间”,再添加一个Edit组件,将Edit1的Text属性改为“200”,添加一个Label组件,把Caption属性改为“毫秒”。 
  然后,双击按钮Button1,在它的onClick(单击)事件中加入下面的代码: 
//返回鼠标双击间隔时间 
ShowMessage("鼠标双击间隔时间为"+IntToStr(GetDoubleClickTime())+"毫秒"); 
  再双击按钮Button2,也在它的onClick事件中加入代码: 
//设置鼠标双击间隔时间 
SetDoubleClickTime(StrToInt(Edit1-$#@62;Text)); 
  最后,按F9编译运行一下程序。点击窗口中的“获取双击间隔时间”按钮就会弹出一个显示当前系统鼠标双击间隔的时间,若要设置鼠标双击间隔的时间,只要改变文本框中的数值,比如300吧,再点击“设置双击间隔时间”按钮就可以了。需要注意的是,鼠标双击间隔时间的单位是毫秒,设置的值越小,间隔的时间就越小,双击的速度就越快,系统默认的是400毫秒,可不要设得太小了,否则“我的电脑”会打不开的(你双击的速度不够快,^_^)。 
 API技巧集 (二) 
  (四)启动控制面板控制台应用程序 
  在控制面板里有许多的控制面板项目,这些项目就是控制台应用程序,它们都是标准的DLL(动态链接库)文件,我们经常需要通过它们来对Windows进行配置。rundll32.exe就是专门用来调用DLL文件的程序,在C++ Builder编程中,我们可以通过使用API函数WinExec运行外部程序rundll32.exe调用DLL来实现启动控制面板的控制台应用程序。下面是收集的一些调用DLL启动控制台应用程序的例子: 
  1、打开控制面板   
WinExec("rundll32.exe shell32.dll,Control_RunDLL",SW_SHOWNORMAL); 
  2、打开方式对话框 
WinExec("rundll32.exe shell32.dll,OpenAs_RunDLL "c:\\autoexec.bat"",SW_SHOWNORMAL); 
  3、添加Modem 
WinExec("rundll32.exe shell32.dll,Control_RunDLL modem.cpl,,add",SW_SHOWNORMAL); 
  4、添加打印机 
WinExec("rundll32.exe shell32.dll,SHHelpShortcuts_RunDLL AddPrinter",SW_SHOWNORMAL); 
  5、复制磁盘 
WinExec("rundll32.exe diskcopy.dll,DiskCopyRunDll",SW_SHOWNORMAL); 
  6、鼠标 
WinExec("rundll32.exe shell32.dll,Control_RunDLL main.cpl",SW_SHOWNORMAL); 
  7、网络 
WinExec("rundll32.exe shell32.dll,Control_RunDLL netcpl.cpl",SW_SHOWNORMAL); 
  8、密码 
WinExec("rundll32.exe shell32.dll,Control_RunDLL password.cpl",SW_SHOWNORMAL); 
  9、游戏控制器 
WinExec("rundll32.exe shell32.dll,Control_RunDLL joy.cpl",SW_SHOWNORMAL); 
  10、日期/时间 
WinExec("rundll32.exe shell32.dll,Control_RunDLL timedate.cpl",SW_SHOWNORMAL); 
  11、Internet 属性 WinExec("rundll32.exe shell32.dll,Control_RunDLL inetcpl.cpl",SW_SHOWNORMAL); 
  12、添加/删除程序 
//安装/卸载 
WinExec("rundll32.exe shell32.dll,Control_RunDLL appwiz.cpl,,1",SW_SHOWNORMAL); 
//Windows 安装 
WinExec("rundll32.exe shell32.dll,Control_RunDLL appwiz.cpl,,2",SW_SHOWNORMAL); 
//启动盘 
WinExec("rundll32.exe shell32.dll,Control_RunDLL appwiz.cpl,,3",SW_SHOWNORMAL); 
  13、区域设置 
//区域设置 
WinExec("rundll32.exe shell32.dll,Control_RunDLL intl.cpl,,0",SW_SHOWNORMAL); 
//数字 
WinExec("rundll32.exe shell32.dll,Control_RunDLL intl.cpl,,1",SW_SHOWNORMAL); 
//货币 
WinExec("rundll32.exe shell32.dll,Control_RunDLL intl.cpl,,2",SW_SHOWNORMAL); 
//时间 
WinExec("rundll32.exe shell32.dll,Control_RunDLL intl.cpl,,3",SW_SHOWNORMAL); 
//日期 
WinExec("rundll32.exe shell32.dll,Control_RunDLL intl.cpl,,4",SW_SHOWNORMAL); 
  14、辅助选项 
//键盘 
WinExec("rundll32.exe shell32.dll,Control_RunDLL access.cpl,,1",SW_SHOWNORMAL); 
//声音 
WinExec("rundll32.exe shell32.dll,Control_RunDLL access.cpl,,2",SW_SHOWNORMAL); 
//显示 
WinExec("rundll32.exe shell32.dll,Control_RunDLL access.cpl,,3",SW_SHOWNORMAL); 
//鼠标 
WinExec("rundll32.exe shell32.dll,Control_RunDLL access.cpl,,4",SW_SHOWNORMAL); 
//常规 
WinExec("rundll32.exe shell32.dll,Control_RunDLL access.cpl,,5",SW_SHOWNORMAL); 
  15、多媒体 
//音频 
WinExec("rundll32.exe shell32.dll,Control_RunDLL mmsys.cpl,,0",SW_SHOWNORMAL); 
//视频 
WinExec("rundll32.exe shell32.dll,Control_RunDLL mmsys.cpl,,1",SW_SHOWNORMAL); 
//MIDI 
WinExec("rundll32.exe shell32.dll,Control_RunDLL mmsys.cpl,,2",SW_SHOWNORMAL); 
//CD 音乐 
WinExec("rundll32.exe shell32.dll,Control_RunDLL mmsys.cpl,,3",SW_SHOWNORMAL); 
//设备 
WinExec("rundll32.exe shell32.dll,Control_RunDLL mmsys.cpl,,4",SW_SHOWNORMAL); 
  16、系统 
//常规 
WinExec("rundll32.exe shell32.dll,Control_RunDLL sysdm.cpl,,0",SW_SHOWNORMAL); 
//设备管理器 
WinExec("rundll32.exe shell32.dll,Control_RunDLL sysdm.cpl,,1",SW_SHOWNORMAL); 
//硬件配置文件 
WinExec("rundll32.exe shell32.dll,Control_RunDLL sysdm.cpl,,2",SW_SHOWNORMAL); 
//性能 
WinExec("rundll32.exe shell32.dll,Control_RunDLL sysdm.cpl,,3",SW_SHOWNORMAL); 
  17、显示器 
//背景 
WinExec("rundll32.exe shell32.dll,Control_RunDLL desk.cpl,,0",SW_SHOWNORMAL); 
//屏幕保护 
WinExec("rundll32.exe shell32.dll,Control_RunDLL desk.cpl,,1",SW_SHOWNORMAL); 
//外观 
WinExec("rundll32.exe shell32.dll,Control_RunDLL desk.cpl,,2",SW_SHOWNORMAL); 
//设置 
WinExec("rundll32.exe shell32.dll,Control_RunDLL desk.cpl,,3",SW_SHOWNORMAL);   
  这些例子在Windows 98和Windows 2000中都可以使用通过,前提是在控制面板中安装了该项目。  |