📄 windows api函数使用技巧i.htm
字号:
<html><head><style type="text/css"><!--.p9 { font-family: "宋体"; font-size: 9pt}a {text-transform: none; text-decoration: none;}a:hover {text-decoration: underline; color: #FF0000;}--></style><title></title></head><body background="di2001.jpg"><h3 align="center"><font COLOR="#AOAO99">Windows API函数使用技巧</font></h3><table width="100%"> <tr> <td><font color="0000FF"><a name="1">得到WINDOWS的SYSTEM路径:</a></font></td> </tr> <tr> <td> 方法:<br> var<br> MySysPath : PCHAR ;<br> begin<br> GetMem(MySysPath,255);<br> GetSystemDirectory(MySysPath,255);<br> end;<br> 注:MySysPath为SYSTEM路径<br> </td> </tr> <tr> <td><font color="0000FF"><a name="2">得到程序的路径</a></font></td> </tr> <tr> <td> ExtractFileDir(Application.Exename);<br> </td> </tr> <tr> <td><font color="0000FF"><a name="3">察看文件是否存在</a></font></td> </tr> <tr> <td> FileExists(FileName:String):Boolean;<br> </td> </tr> <tr> <td><font color="0000FF"><a name="4">改变文件扩展名</a></font></td> </tr> <tr> <td> ChangeFileExt(FileName:String)<br> </td> </tr> <tr> <td><font color="0000FF"><a name="5">得到文件的扩展名</a></font></td> </tr> <tr> <td> ExtractFileExt(FileName:String):String;<br> </td> </tr> <tr> <td><font color="0000FF"><a name="6">如何取得Windows的临时文件目录?</a></font></td> </tr> <tr> <td>适合版本:Delphi 3,2.0,1.0<br> Windows 95 & NT都指定了放置临时文件的目录,然而,用户能改变临时目录的位置而不使用缺省的目录。这篇文章的目的是告诉你如何得到Windows 95 & NT当前的临时目录位置。这个Windows API函数 GetTempPath就是解决这个问题的。其函数原形为:<br> DWORD GetTempPath(DWORD nBufferLength, LPTSTR lpBuffer);<br> 下面的例子示范如何使用:<br> function GetTempDirectory: String;<br> var<br> TempDir: array[0..255] of Char;<br> begin<br> GetTempPath(255, @TempDir);<br> Result := StrPas(TempDir);<br> end;<br> 备注:临时目录的确定原则:<br> 1,如果有TMP环境变量则临时目录为TMP指定的目录<br> 2,如果没有TMP环境变量而有TEMP环境变量,则为TEMP变量指定的目录<br> 3,如果TMP和TEMP都没有定义,则取当前目录为临时目录<br> </td> </tr> <tr> <td><font color="0000FF"><a name="7">程序不出现在任务栏</a></font></td> </tr> <tr> <td> 一般Windows 95运行程序时都会在任务栏上出现按钮,如果你的程序是一个监视程序,那么出现按钮就不是明智之举了。要实现该功能就要在OnCreate事件里利用到API函数SetWindowLong<br> procedure TForm1.FormCreate(sender:TObject);<br> begin<br> SetWindowLong(Application,Handle,GWL_EXSTYLE,WS_EX_TOOLWINDOW);<br> end;<br> </td> </tr> <tr> <td><font color="0000FF"><a name="8">改计算机名</a></font></td> </tr> <tr> <td>改变计算机在网络中的名字,重新启动后才生效<br> SetComputerName('Hello World');<br> </td> </tr> <tr> <td><font color="0000FF"><a name="9">控制热启动</a></font></td> </tr> <tr> <td>要使系统的热启动键(Ctrl+Alt+Del)失效,使用以下语句<br> SystemParametersInfo(SPI_SCREENSAVERRUNNING, 1, 0, 0);<br> 要恢复系统的热启动键(Ctrl+Alt+Del),使用以下语句<br> SystemParametersInfo(SPI_SCREENSAVERRUNNING, 0, 0, 0);<br> </td> </tr> <tr> <td><font color="0000FF"><a name="10">临时路径</a></font></td> </tr> <tr> <td>有时需要Windows的临时路径来做备份等工作,那么就要知道路径在哪,下面的程序帮你忙:<br> var aa:pchar;<br> begin<br> GetTempPath(20,aa); //返回路径名<br> edit1.text:=aa;<br> end;<br> </td> </tr> <tr> <td><font color="0000FF"><a name="11">返回程序执行参数</a></font></td> </tr> <tr> <td> 有关 Delphi 传入应用程式的命令列参数, 请参考以下的说明:<br> 用ParamCount函数取得命令参数的个数:<br> 呼叫 ParamStr(0), 传回执行档的档名(含路径)<br> 呼叫 ParamStr(n), 传回第n个参数的内容<br> procedure TForm1.FormCreate(Sender: TObject);<br> var<br> sFileName: string;<br> begin<br> if ParamCount > 0 then begin (* 有执行参数传入 *)<br> sFileName := ParamStr(1); (* 取得参数内容 *)<br> if FileExists(sFileName) then<br> Memo1.Lines.LoadFromFile(sFileName)<br> else<br> Application.MessageBox('找不到指定的档案', '讯息', 48);<br> end;<br> end;<br> </td> </tr> <tr> <td><font color="0000FF"><a name="12">关闭Windows</a></font></td> </tr> <tr> <td>控制WINDOWS的开关:如关闭WINDOWS,重新启动WINDOWS等, ExitWindowsEx(UINT uFlags,DWORD dwReserved);是实现这一功能的API函数<br> 首先定义常数<br> const<br> EWX_FORCE=4; //关闭所有程序并以其他用户身份登录<br> EWX_LOGOFF=0; //重新启动计算机并切换到MS-DOS方式<br> EWX_REBOOT=2; //重新启动计算机<br> EWX_SHUTDOWN=1;//关闭计算机<br> 运行时给How赋值,让他等于EWX_SHUTDOWN或其他,调用以下语句<br> ExitWindowsEx(How,0);<br> </td> </tr> <tr> <td><font color="0000FF"><a name="13">关闭外部应用程序</a></font></td> </tr> <tr> <td>如何在 Delphi 应用程序中, 去关闭外部已开启的应用程序?<br> 下面给出一段在 Delphi 中关闭“计算器”程序为例:<br> var<br> HWndCalculator : HWnd;<br> begin<br> // find the exist calculator window<br> HWndCalculator := Winprocs.FindWindow(nil, '计算器'); // close the exist Calculator<br> if HWndCalculator <> 0 then<br> SendMessage(HWndCalculator, WM_CLOSE, 0, 0);<br> end;<br> </td> </tr> <tr> <td><font color="0000FF"><a name="14">得到执行程序的目录</a></font></td> </tr> <tr> <td> SysUtils 单元中有 ExtractFileDir 与 ExtractFilePath两个类似的函数, 用哪一个?没有太大的关系。<br> 不过有以下的差别: ExtractFilePath 传回值的最後一个字元是反斜杠“/”。<br> procedure TForm1.Button1Click(Sender: TObject);<br> begin<br> ShowMessage(ExtractFileDir(Application.Exename));<br> // ie: c:\temp<br> ShowMessage(ExtractFilePath(Application.Exename));<br> // ie: c:\temp\<br> end;<br> 相同点: 如果执行文件在根目录下(如:C:\SAMPLE.EXE)的话, 两者的传回值相同, 且最后一个字符都是“/”。<br> </td> </tr> <tr> <td><font color="0000FF"><a name="15">使用GetFileVersionInfo 得到版本信息的例子 </a></font></td> </tr> <tr> <td>Samples Using GetFileVersionInfo?<br> 回答1:<br> procedure GetBuildInfo(var V1, V2, V3, V4: Word);<br> var<br> VerInfoSize: DWORD;<br> VerInfo: Pointer;<br> VerValueSize: DWORD;<br> VerValue: PVSFixedFileInfo;<br> Dummy: DWORD;<br> begin<br> VerInfoSize := GetFileVersionInfoSize(PChar(ParamStr(0)), Dummy);<br> GetMem(VerInfo, VerInfoSize);<br> GetFileVersionInfo(PChar(ParamStr(0)), 0, VerInfoSize, VerInfo);<br> VerQueryValue(VerInfo, '\', Pointer(VerValue), VerValueSize);<br> with VerValue^ do<br> begin<br> V1 := dwFileVersionMS shr 16;<br> V2 := dwFileVersionMS and $FFFF;<br> V3 := dwFileVersionLS shr 16;<br> V4 := dwFileVersionLS and $FFFF;<br> end;<br> FreeMem(VerInfo, VerInfoSize);<br> end;<br> ------------------------------------------<br> 回答2<br> If you want a component, check out TVersionInfoResource at<br> http://www.pobox.com/~bstowers/delphi/ in the My Stuff section. D1/D2/D3/C++B<br> compatible, freeware with full source code and a small demo.<br> And you can see the http://www.aye.net/~bstowers/delphi/<br>
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -