发信人: lofe ()感激生活(), 信区: BorlandDev
标  题: 关闭外部应用程序 (转载)
发信站: 哈工大紫丁香 (2000年09月01日18:51:13 星期五), 站内信件

【 以下文字转载自 VisualProgram 讨论区 】
【 原文由 alias 所发表 】
下面给出一段在 Delphi 中关闭“计算器”程序为例: 
var 
HWndCalculator : HWnd; 
begin 
// find the exist calculator window 
HWndCalculator := Winprocs.FindWindow(nil, '计算器'); // close the exist  
Calculator 
if HWndCalculator <> 0 then  
SendMessage(HWndCalculator, WM_CLOSE, 0, 0); 
end; 
 
                     程序中使用自定义的鼠标 
 
一.建立工程与一个资源档 
用Image Editor编辑一个鼠游标 
  (Fild | New | Resource File) 
新建一个 CURSOR_1 的 CURSOR, 设定好它的 Hot Spot 
  (Cursor | Set Hot Spot) 
存档时注意要和建立的Project存在同一个目录 
在本例我们先假定为 MyCursor.res 
二. 程序部分 
定义一个常数crMyCursor, 这个常数您必须设成大於零 
的任何整数, 以 LoadCursor() 函数将自订的鼠标资源 
load 进来, 以下为源代码: 
// unit.pas 
unit Unit1; 
interface 
uses 
SysUtils, WinTypes, WinProcs, Messages, Classes,  
Graphics, Controls, Forms, Dialogs; 
const 
crMyCursor = 1; (* 宣告一个常数 *) 
type 
TForm1 = class(TForm) 
procedure FormCreate(Sender: TObject); 
private 
{ Private declarations } 
public 
{ Public declarations } 
end; 
var 
Form1: TForm1; 
{$R mycursor.res}//这行$R不可少, 否则自订的鼠游标就出不来了 
implementation 
{$R *.DFM} 
procedure TForm1.FormCreate(Sender: TObject); 
begin 
//将鼠标资源 load 进来  
Screen.Cursors[crMyCursor] := LoadCursor (hInstance,'CURSOR_1'); 
Cursor := crMyCursor;//指定 form1 的 cursor 为自订鼠标 
Button1.Cursor := crMyCursor;//指定Button1的cursor为自订鼠标 
end; 
end. 
 
                  得到Windows用户名和序列号 
 
如何得到Windows的用户名称和产品序列号呢? 
1. 可以用 WNetGetUser() 这个函数来得到 user name; 
2. Windows 95 的产品序号可以用 TRegistry 到 Registry Database 中找出来; 
// 取得用户名称 
function GetUserName: AnsiString; 
var 
lpName: PAnsiChar; 
lpUserName: PAnsiChar; 
lpnLength: DWORD; 
begin 
Result := ''; 
lpnLength := 0; 
WNetGetUser(nil, nil, lpnLength); // 取得字串长度 
if lpnLength > 0 then 
begin 
GetMem(lpUserName, lpnLength); 
if WNetGetUser(lpName, lpUserName, lpnLength) = NO_ERROR then 
Result := lpUserName; 
FreeMem(lpUserName, lpnLength); 
end; 
end; { GetUserName } 
 
// 取得 Windows 产品序号 
function GetWindowsProductID: string; 
var 
reg: TRegistry; 
begin 
Result := ''; 
reg := TRegistry.Create; 
with reg do 
begin 
RootKey := HKEY_LOCAL_MACHINE; 
OpenKey('Software\Microsoft\Windows\CurrentVersion', False); 
Result := ReadString('ProductID'); 
end; 
reg.Free; 
end; 
 
                              实现打开文件 
 
打开Windows已经注册的文件其实很简单,根据以下代码定义一个过程: 
procedure URLink(URL:PChar); 
begin 
ShellExecute(0, nil, URL, nil, nil, SW_NORMAL); 
end; 
在要调用的地方使用 
URLink('Readme.txt'); 
如果是链接主页的话,那么改用 
URLink('http://gui.yeah.net'); 
 
                        得到执行程序的目录 
 
  SysUtils 单元中有 ExtractFileDir 与 ExtractFilePath两个类似的函数, 用哪 
一个?没有太大的关系。 
  不过有以下的差别: ExtractFilePath 传回值的最後一个字元是反斜杠“/”。 
procedure TForm1.Button1Click(Sender: TObject); 
begin 
ShowMessage(ExtractFileDir(Application.Exename)); 
// ie: c:\temp 
ShowMessage(ExtractFilePath(Application.Exename)); 
// ie: c:\temp\ 
end; 
相同点: 如果执行文件在根目录下(如:C:\SAMPLE.EXE)的话, 两者的传回值相同, 
且最后一个字符都是“/”。 
 
                       将鼠标锁定在一定范围 
 
如何将鼠标锁定在一定的范围内呢? 
请在Form中放置二个 Button, 然後分别为这两个按钮定义OnClick响应事件如下: 
// 限制 
procedure TForm1.Button1Click(Sender: TObject); 
var 
rtButton2: TRect; 
begin 
rtButton2 := Button2.BoundsRect; 
MapWindowPoints(handle, 0, rtButton2, 2); // 座标换算 
ClipCursor(@rtButton2); // 限制鼠标移动区域 
end; 
 
// 还原 
procedure TForm1.Button2Click(Sender: TObject); 
var 
rtScreen: TRect; 
begin 
rtScreen := Rect(0, 0, Screen.Width, Screen.Height); 
ClipCursor(@rtScreen); 

--
☆ 来源:.哈工大紫丁香 bbs.hit.edu.cn.[FROM: mig.bbs@smth.org]
--
※ 转载:.哈工大紫丁香 bbs.hit.edu.cn.[FROM: club.hit.edu.cn]
[百宝箱] [返回首页] [上级目录] [根目录] [返回顶部] [刷新] [返回]
Powered by KBS BBS 2.0 (http://dev.kcn.cn)
页面执行时间:3.375毫秒