📄 api集.htm
字号:
shell32.dll,Control_RunDLL
mmsys.cpl,,1",SW_SHOWNORMAL);<BR><BR>//MIDI<BR><BR>WinExec("rundll32.exe
shell32.dll,Control_RunDLL mmsys.cpl,,2",SW_SHOWNORMAL);<BR><BR>//CD
音乐<BR><BR>WinExec("rundll32.exe shell32.dll,Control_RunDLL
mmsys.cpl,,3",SW_SHOWNORMAL);<BR><BR>//设备<BR><BR>WinExec("rundll32.exe
shell32.dll,Control_RunDLL
mmsys.cpl,,4",SW_SHOWNORMAL);<BR><BR> 16、系统<BR><BR>//常规<BR><BR>WinExec("rundll32.exe
shell32.dll,Control_RunDLL
sysdm.cpl,,0",SW_SHOWNORMAL);<BR><BR>//设备管理器<BR><BR>WinExec("rundll32.exe
shell32.dll,Control_RunDLL
sysdm.cpl,,1",SW_SHOWNORMAL);<BR><BR>//硬件配置文件<BR><BR>WinExec("rundll32.exe
shell32.dll,Control_RunDLL
sysdm.cpl,,2",SW_SHOWNORMAL);<BR><BR>//性能<BR><BR>WinExec("rundll32.exe
shell32.dll,Control_RunDLL
sysdm.cpl,,3",SW_SHOWNORMAL);<BR><BR> 17、显示器<BR><BR>//背景<BR><BR>WinExec("rundll32.exe
shell32.dll,Control_RunDLL
desk.cpl,,0",SW_SHOWNORMAL);<BR><BR>//屏幕保护<BR><BR>WinExec("rundll32.exe
shell32.dll,Control_RunDLL
desk.cpl,,1",SW_SHOWNORMAL);<BR><BR>//外观<BR><BR>WinExec("rundll32.exe
shell32.dll,Control_RunDLL
desk.cpl,,2",SW_SHOWNORMAL);<BR><BR>//设置<BR><BR>WinExec("rundll32.exe
shell32.dll,Control_RunDLL desk.cpl,,3",SW_SHOWNORMAL); <BR><BR> 这些例子在Windows
98和Windows 2000中都可以使用通过,前提是在控制面板中安装了该项目。<BR></P>
<P><FONT color=#ff0000>API技巧集(三) </FONT></P>
<P> (一)闪烁程序的标题栏<BR><BR> 在某些专业的应用程序中,当程序需要提醒用户或要引起用户的注意时,就不停地闪烁程序的标题栏。要实现这个功能,只需要一个Timer组件和使用一个API函数--FlashWindow。<BR><BR> 使用API函数FlashWindow可以闪烁显示指定窗口,让窗口在活动与非活动的状态之间切换,它有两个参数:hwnd和bInvert,头文件为“winuser.h”。其中,参数hwnd为要闪烁的窗口句柄,参数bInvert是一个bool变量,设为true时,程序窗口标题栏从活动切换到非活动状态、或反向切换,当设为false时,窗口标题栏还原为最初的状态。如果配合一个时间组件(Timer组件),以一定的时间间隔执行语句:<BR><BR>FlashWindow(Form1-$#@62;Handle,true);<BR><BR>程序窗口的标题栏就在活动、非活动的状态之间不停地切换。若把hwnd指定成为应用程序的句柄(Application-$#@62;Handel),将会闪烁程序在任务栏上的标题栏。<BR><BR> 下面就让我们来做一个闪烁窗口标题栏和任务栏上标题栏的程序。<BR><BR> 首先,在Form1中添加三个按钮Button1、Button2和Button3,把它们的属性分别为“闪烁窗口标题栏”、“闪烁任务标题栏”和“停止闪烁”,再加入两个时间组件Timer1和Timer2,将两个Timer组件的Enabled属性都设为false,将Interval属性都设为为500(即半秒),改变这个属性的值可以修改闪烁的频率。<BR><BR> 然后,双击Timer1,在OnTimer事件中加入:<BR><BR>FlashWindow(Form1-$#@62;Handle,true);<BR><BR> 双击Timer2,在OnTimer事件中加入:<BR><BR>FlashWindow(Application-$#@62;Handel,true);<BR><BR> 双击Button1,在Button1的OnClick事件中加入:<BR><BR>Timer1-$#@62;Enabled=true;<BR><BR> 双击Button2,在Button2的OnClick事件中加入:<BR><BR>Timer2-$#@62;Enabled=true;<BR><BR> 最后,双击Button3,在Button3的OnClick事件中加入:<BR><BR>Timer1-$#@62;Enabled=false;<BR><BR>Timer2-$#@62;Enabled=false;<BR><BR>FlashWindow(Form1-$#@62;Handle,false);<BR><BR>FlashWindow(Application-$#@62;Handel,false);<BR><BR> 这样,一个简单的例子就完成了。按F9编译运行程序,你就可闪烁窗口标题栏或是闪烁任务栏上?
题栏了。<BR><BR><BR> (二)拖动无标题窗体<BR><BR> 现在的Windows应用程序,大都使用了图形化的界面、不规则窗口技术,使得程序界面更加漂亮了。但是,使用界面一般要先把窗体的标题栏去掉(在BCB中,将窗体的BorderStyle属性设为bsNone,就可以把窗体的标题栏去掉),这样就不能使用原来的标题栏了,出现了窗口不能移动的问题。没有标题栏怎样用鼠标拖动窗体呢?我们可以使用Windows的API函数SendMessage来解决这个问题。<BR><BR> 首先,新建一个工程,把窗体的BorderStyle属性设为bsNone去掉窗体的标题栏,按F12键切换到代码编辑窗口,在头部加入包含头文件"winuser.h"的代码:<BR><BR>#include
$#@60;winuser.h$#@62;<BR><BR> 然后,在窗体的 OnMouseDown 事件中加入下面的代码:<BR><BR>if(Button
==
mbLeft)//判断是否按了鼠标左键<BR><BR>{<BR><BR>ReleaseCapture();//释放鼠标操作<BR><BR>SendMessage(
Handle, WM_NCLBUTTONDOWN, HTCAPTION,
0);<BR><BR>}<BR><BR> 这样,用鼠标左键点住窗口拖动,就可以实现拖动没有标题的窗口了。也可以在窗体上添加组件,然后在该组件的
OnMouseDown
事件中加入上面的代码,这样也可以点住这个组件拖动窗口。你还可以把SendMessage函数的第一个参数修改为这个组件的句柄,如:往窗体添加一个Button组件,在它的
OnMouseDown 事件中加入上面的代码,其中把SendMessage那行语句改为:<BR><BR>SendMessage(
Button1-$#@62;Handle, WM_NCLBUTTONDOWN, HTCAPTION,
0);<BR><BR>这样就可以在程序运行时,用鼠标在窗口的范围内移动Button1了。<BR><BR> (三)隐藏程序在任务栏的图标<BR><BR> 使用API函数ShowWindow可以隐藏一个程序在任务栏的图标,它被包含在头文件“winuser.h”里面。<BR><BR> 1、隐藏任务栏图标的代码就是:<BR><BR>ShowWindow(Application-$#@62;Handle,
SW_HIDE);<BR><BR> 2、要重新显示的时候就使用:<BR><BR>ShowWindow(Application-$#@62;Handle,
SW_SHOW);<BR><BR> 但是,如果将程序最小化后,在任务栏的图标就会重新出现。若要在程序还原最小化后,程序在任务栏的图标重新被隐藏起来,可以在窗体的OnPaint事件中加入隐藏程序在任务栏的图标的代码,这样,程序只有在最小化时任务栏才会出现图标,当程序还原最小化时图标又会重新被隐藏起来。</P>
<P><BR><FONT
color=#ff0000>API技巧集(三)</FONT><BR><BR><BR><BR><BR> (四)重启、关闭Windows<BR><BR> 当用户修改了Windows里面的一些设置,Windows经常会提问是否要重新启动计算机,当用户点Yes的时候,计算机将会自动重启。这个就是API函数ExitWindowsEx的一个典型的应用。<BR><BR> ExitWindowsEx,顾名思义就是退出Windows的函数,它有两个参数,第一个是退出Windows的选项,常用的有:EWX_REBOOT(重新启动计算机),EWX_SHUTDOWN(关闭计算机),EWX_LOGOFF(注销当前用户),第二个参数系统保留没有使用,可设为0。<BR><BR> 在自编的程序中(如:注册表修改程序),当用户修改了某项设置需要重新启动计算机的时候,就要使用EWX_REBOOT选项重启计算机。如:<BR><BR>ExitWindowsEx(EWX_REBOOT,0);<BR><BR> 使用WX_SHUTDOWN选项,可以实现关机。如:<BR><BR>ExitWindowsEx(EWX_SHUTDOWN,0);<BR><BR> 当需要注销的时候,就使用EWX_LOGOFF选项。如:<BR><BR>ExitWindowsEx(EWX_LOGOFF,0);<BR></P>
<P>api技巧集(四)<BR><BR><BR><BR>函数名:<BR><BR> SetWindowPos<BR><BR>头文件:<BR><BR> winuser.h<BR><BR>函数原型:<BR><BR> BOOL
SetWindowPos<BR> (<BR> HWND hWnd, //窗口句柄<BR> HWND hWndInsertAfter,
//排列顺序的句柄<BR> int X, //水平坐标<BR> int Y, //垂直坐标<BR> int cx, //宽<BR> int cy,
//高<BR> UINT uFlags
//窗口定位标识<BR> );<BR><BR>说明:<BR><BR> 这个函数能改变窗口的大小、位置和设置子窗口、弹出窗口或顶层窗口的排列顺序。<BR> 返回值:<BR><BR> BOOL,如果返回值非零表示成功,返回零表示失败。错误信息请参看GetLastError函数。<BR><BR>参数表:<BR><BR> 参数
类型及说明<BR> hwnd HWND,欲定位的窗口句柄<BR> hWndInsertAfter
HWND,置于hwnd前面的窗口句柄。这个参数必须是窗口的句柄或是下面的值之一: HWND_BOTTOM
将窗口置于其它所有窗口的底部<BR> HWND_NOTOPMOST
将窗口置于其它所有窗口的顶部,并位于任何最顶部窗口的后面。如果这个窗口非顶部窗口,这个标记对该窗口并不产生影响<BR> HWND_TOP
将窗口置于它所有窗口的顶部<BR> HWND_TOPMOST
将窗口置于其它所有窗口的顶部,并位于任何最顶部窗口的前面。即使这个窗口不是活动窗口,也维持最顶部状态<BR><BR>x: <BR> <BR> int,指定窗口新的X坐标<BR><BR>Y: <BR><BR> int,指定窗口新的Y坐标<BR><BR>cx: <BR><BR> int,指定窗口新的宽度<BR><BR>cy: <BR><BR> int,指定窗口新的高度<BR><BR>wFlags:<BR><BR> UINT,指定窗口状态和位置的标记。这个参数使用下面值的组合:
SWP_DRAWFRAME 围绕窗口画一个框<BR> SWP_FRAMECHANGED
发送一条WM_NCCALCSIZE消息进入窗口,即使窗口的大小没有发生改变。如果不指定这个参数,消息WM_NCCALCSIZE只有在窗口大小发生改变时才发送<BR> SWP_HIDEWINDOW
隐藏窗口<BR> SWP_NOACTIVATE 不激活窗口<BR> SWP_NOCOPYBITS 屏蔽客户区域<BR> SWP_NOMOVE
保持当前位置(X和Y参数将被忽略)<BR> SWP_NOOWNERZORDER 不改变所有窗口的位置和排列顺序<BR> SWP_NOREDRAW
窗口不自动重画<BR> SWP_NOREPOSITION 与SWP_NOOWNERZORDER标记相同 r> SWP_NOSENDCHANGING
防止这个窗口接受WM_WINDOWPOSCHANGING消息<BR> SWP_NOSIZE
保持当前大小(cx和cy会被忽略)<BR> SWP_NOZORDER
保持窗口在列表的当前位置(hWndInsertAfter将被忽略)<BR> SWP_SHOWWINDOW
显示窗口<BR><BR><BR>备注:<BR><BR> 如果设置了SWP_SHOWWINDOW或SWP_HIDEWINDOW标记,这个窗口不发生移动或改变大小。窗口成为最顶级窗口后,它的所有子窗口也会进入最顶级。一旦将其设为非最顶级,则它的所有子窗口也会转为非最顶级。<BR><BR>相关函数:<BR><BR> MoveWindow,SetActiveWindow,SetForegroundWindow<BR><BR>例子:<BR><BR> //设置顶层窗口<BR> SetWindowPos(
Handle, HWND_TOPMOST, 0, 0, 0, 0,
SWP_NOMOVE||SWP_NOSIZE);<BR><BR> //取消顶层窗口<BR> SetWindowPos( Handle,
HWND_NOTOPMOST, 0, 0, 0, 0, SWP_NOMOVE||SWP_NOSIZE);<BR><BR><BR><FONT
color=#ff0000><BR>api技巧集(四)</FONT><BR><BR><BR><BR><BR>超级链接效果<BR><BR> 在很多共享软件的关于对话框里有一些模仿网页的超级链接,如主页URL或E-Mail之类的,当鼠标移到它上面的时候,文字变成红色的,当鼠标离开时,文字又变回原来的蓝色,如果用鼠标点击这个链接则会弹出浏览器窗口打开指定的URL或是运行默认的E-Mail程序撰写新邮件,就和真的超链接一样。你是不是也想在你的程序里做一个呢?其实,我们只要调用API函数ShellExecute和在鼠标移动时改变一下文字的颜色,就可以在自己的程序中出现这种效果。<BR><BR> 首先新建一个工程,在窗体Form1上添加两个Label组件,它们的Name属性使用默认的Label1和Label2。<BR><BR> 然后在Form1的OnCreate事件中加入代码:<BR><BR>Label1-$#@62;Cursor=crHandPoint;<BR><BR>Label2-$#@62;Cursor=crHandPoint;<BR><BR>Label1-$#@62;Font-$#@62;Color
=clBlue;<BR><BR>Label2-$#@62;Font-$#@62;Color
=clBlue;<BR><BR>Label1-$#@62;Caption="主页:初学者之家网站";<BR><BR>Label2-$#@62;Caption="E-Mail:fdlweb@sina.com";<BR><BR> 再在Label1的OnClick(单击)事件中加入:<BR><BR>//蓝色的字请改成自己的主页地址<BR><BR>ShellExecute(Handle,NULL,"http://fdlweb.myrice.com/",NULL,NULL,SW_SHOWNORMAL);<BR><BR> 在OnMouseMove事件中加入:<BR><BR>Label1-$#@62;Font-$#@62;Color=clRed;<BR><BR> 在Label2的OnClick事件中加入:<BR><BR>//蓝色的字请改成自己邮箱地址<BR><BR>ShellExecute(Handle,NULL,"mailto:fdlweb@sina.com",NULL,NULL,SW_SHOWNORMAL);<BR><BR> 在OnMouseMove事件中加入:<BR><BR>Label2-$#@62;Font-$#@62;Color=clRed;<BR><BR> 最后在Form1的OnMouseMove事件中加入:<BR><BR>Label1-$#@62;Font-$#@62;Color=clBlue;<BR><BR>Label2-$#@62;Font-$#@62;Color=clBlue;<BR><BR> 代码输入完了,按F9编译运行程序就看到效果了。<BR><BR><BR><BR>拷贝屏幕<BR><BR> BitBlt函数可以将一幅位图从一个设备场景拷贝到另一个设备场景,这个函数经常用在抓图程序和游戏编程方面,也可以用来做基于桌面的屏幕保护程序。下面让我们用BitBlt函数来做一个虚假桌面的程序:<BR><BR> 首先,添加一个Image组件到窗体中,将窗体Form1的BorderStyle属性设为:bsNone。<BR><BR> 接着在窗体的OnCreate事件加入程序代码:<BR><BR>Left=0;<BR><BR>Top=0;<BR><BR>Width=Screen-$#@62;Width;<BR><BR>Height=Screen-$#@62;Height;<BR><BR>Image1-$#@62;Left=0;<BR><BR>Image1-$#@62;Top=0;<BR><BR>Image1-$#@62;Width=Screen-$#@62;Width;<BR><BR>Image1-$#@62;Height=Screen-$#@62;Height;<BR><BR>//这句代码就是将桌面拷贝到组件Image1中来存放,<BR><BR>//
其中GetDC(0)返回桌面设备的句柄(HDC)<BR><BR>BitBlt(Image1-$#@62;Canvas-$#@62;Handle,0,0,Screen-$#@62;Width,Screen-$#@62;Height,GetDC(0),0,0,SRCCOPY);<BR><BR> 按F9运行,一个假的桌面就出来了,在这个“桌面”上怎么按鼠标都没有反应,可以用来捉弄人喔!。有些桌面的小游戏也是这么干的,你可以在这个程序的基础上加上更多的功能,如在窗体上加上Label组件和Timer组件,用Timer组件来控制Label组件在窗体上移动,再在窗体Form1的OnKeyDown事件和Image1的OnMouseDown事件中加入关闭窗口的代码“Close();”,最后将编译了的程序的扩展名改为scr,这就成了一个文字在桌面上乱动的屏幕保护程序了。<BR><BR><BR><BR><BR><BR><BR>取得磁盘总空间和剩余空间<BR><BR> 要取得磁盘总空间和剩余空间,最简单直接的方法是调用API函数
GetDiskFreeSpace。<BR><BR> GetDiskFreeSpace函数有5个参数,第一个参数是要判断可用空间的驱动器名,第二个参数是一个存放每簇扇区数的变量,第三个参数是一个存放每扇区字节数的变量,第四个参数是存放剩余簇数的变量,第五个参数是存放总簇数的变量。套用相应计算磁盘空间的公式即可得出指定驱动器的总空间或剩余空间。<BR><BR>磁盘总空间和剩余空间的计算公式分别为:<BR><BR> 磁盘上剩余空间(字节)
= 簇的扇区数 * 扇区的字节数 * 剩余簇数<BR><BR> 磁盘上总空间(字节) = 簇的扇区数 * 扇区的字节数 *
总簇数<BR><BR>下面就是取得C盘的总空间和剩余空间的例子:<BR><BR>unsigned long
Sectors,Bytes,Free,Total;<BR><BR>GetDiskFreeSpace("C:\\",&Sectors,&Bytes,&Free,&Total);<BR><BR>//可用空间(单位:MB)<BR><BR>int
FreeKB = Bytes * Sectors * Free / 1024;<BR><BR>//总空间(单位:MB)<BR><BR>int TotalKB =
Bytes * Sectors * Total / 1024;<BR><BR>ShowMessage("C盘的可用空间有:" +
IntToStr(FreeKB) + "MB,总空间有:" + IntToStr(TotalKB) +"MB");<BR><BR></P>
<P><FONT color=#ff0000>api技巧集(五) </FONT></P>
<P>提取图标<BR><BR><BR> 调用API函数ExtractIcon可以提取出在程序文件中的图标,它的头文件是shellapi.h,原型为:<BR><BR>HICON
ExtractIcon<BR>(<BR>HINSTANCE hInst, //实例句柄<BR>LPCTSTR lpszExeFileName,
//要提取图标的那个程序的文件名<BR>UINT nIconIndex
//要提取的图标的索引<BR>);<BR><BR> 调用该函数时,参数hInst一般设为当前应用程序的实例句柄,如:Form1-$#@62;Handle。<BR><BR> 参数lpszExeFileName为需要提取图标的程序文件的完整路径,这个程序文件可以是EXE文件、DLL文件、ICO文件等,只要是包含有图标资源的文件一般都可以提取图标。<BR><BR> 当参数nIconIndex指定一个图标的索引可以返回指向图标的句柄,如指定的文件中不存在图标,则返回零,当参数nIconIndex设为-1,函数返回文件的图标总数。<BR><BR> 函数返回的句柄可以赋给一个用TIcon类声明的变量,再使用该变量的SaveToFile方法就可以把图标保存出来。<BR><BR>例子:<BR><BR>TIcon
*Icon = new TIcon();<BR>AnsiString FileName =
"C:\\WINDOWS\\SYSTEM\\SHELL32.DLL";<BR>int
TotalIcon;<BR>//得到文件SHELL32.DLL的总图标数<BR>TotalIcon =
(int)ExtractIcon(Form1->Handle,FileName.c_str(),
-1);<BR>//提取第一个图标,0为第一个,1为第二个,类推...<BR>Icon->Handle = ExtractIcon(
Form1->Handle, FileName.c_str(),
0);<BR>//保存图标<BR>Icon->SaveToFile("C:\\1.ICO");<BR> 下面给出一个完整的图标提取程序源码。<BR><BR> 这个程序需要四个按钮控件(Button)、四个文本标签控件(Label)、两个文本框控件(Edit)、一个水平滚动条控件(ScrollBar)、一个打开文件对话框控件(OpenDialog)、一个保存文件对话框控件(SaveDialog)和一个图片控件(Image),还有一个Panel控件是装饰用的。界面如图所示:<BR><BR> <BR><BR> 把各个控件排列好,再把四个Label控件的Caption属性修改一个,最后输入程序代码,运行程序,一个提取图标的程序就出来了,你以后也就不会为没有图标资源可用而发愁了。<BR><BR>程序清单(Unit1.cpp):<BR>//---------------------------------------
----------------------<BR>#include $#@60;vcl.h$#@62;<BR>#pragma
hdrstop<BR>#include
"Unit1.h"<BR>//----------------------------------------------------------------<BR>#pragma
package(smart_init)<BR>#pragma resource "*.dfm"<BR>TForm1 *Form1;<BR>AnsiString
FileName;<BR>TIcon *Icon = new TIcon();<BR>int
TotalIcon;<BR>//----------------------------------------------------------------<BR>__fastcall
TForm1::TForm1(TComponent* Owner)<BR>:
TForm(Owner)<BR>{<BR>}<BR><BR>//----------------------------------------------------------------<BR><BR>void
__fastcall TForm1::FormCreate(TObject *Sender)<BR>{<BR><BR>Caption="图标小偷
1.0";<BR>Button1-$#@62;Caption="选择文件";<BR>Button2-$#@62;Caption="保存图标";<BR>Button3-$#@62;Caption="保存所有";<BR>Button4-$#@62;Caption="退出";<BR>Edit1-$#@62;Text=0;<BR>Edit2-$#@62;Text=0;<BR>Image1-$#@62;Width=32;<BR>Image1-$#@62;Height=32;<BR>OpenDialog1-$#@62;Filter="可执行文件(*.exe,*.dll)|*.exe;*.dll|图标文件(*.ico)|*.ico|所有文件(*.*)|*.*";<BR>SaveDialog1-$#@62;Filter="图标文件|*.ico";<BR>ScrollBar1-$#@62;Enabled=false;<BR>Button2-$#@62;Enabled=false;<BR>Button3-$#@62;Enabled=false;<BR><BR>}<BR>//----------------------------------------------------------------<BR>void
__fastcall TForm1::Button1Click(TObject
*Sender)<BR>{<BR><BR>if(OpenDialog1-$#@62;Execute())<BR>{<BR><BR>TotalIcon =
(int)ExtractIcon( Form1-$#@62;Handle, OpenDialog1-$#@62;FileName.c_str(), -1
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -