1

源程序下载
1：打开外部已开启的应用程序
打开计算器应用程序，SW_NORMAL这个参数的说明可以到Windows.Pas单元里面去看说明。
WinExec(Pchar('C:\Windows\calc.exe'), SW_NORMAL) ;
2：关闭外部已开启的应用程序
关闭计算器程序，
procedure TForm1.Button2Click(Sender: TObject);
var
HWndCalculator : HWnd;
begin
// find the exist calculator window
HWndCalculator := FindWindow(nil, '计算器'); // close the exist Calculator
if HWndCalculator <> 0 then
SendMessage(HWndCalculator, WM_CLOSE, 0, 0);
end;
3：把自己的菜单项加入系统菜单
要解决这个问题，有两个工作要做：
Ⅰ：如何把用户菜单项加入系统菜单，
Ⅱ：如何才能响应这一菜单项。
解决问题Ⅰ：首先需要获取系统菜单的句柄，这一点可用API函数getsystemmenu()来获取，有了系统菜单句柄，用API函数appendmenu()向系统菜单中加入用户菜单选项了。
解决问题Ⅱ：需要重载WM_SYSCOMMAND或WM_MENUSELECT消息。当用户从菜单中选一项时，系统便会发出WM_COMMMAND消息，而对于系统菜单，则会发出WM_SYSCOMMAND消息，重载这个消息，并判断选中菜
单的ID值是否为用户设定值便可以了。
在Private声明部分，说明了过程，procedure User_SysMenu(var msg:twmmenuselect); message wm_syscommand;用于响应用户菜单事件。
procedure TForm1.user_sysmenu(var msg:TWMMENUSELECT);
begin
if msg.iditem=100 then Label1.Caption := '你已经成功了，真是不可思议'
else inherited; { 作缺省处理,必须调用这一过程}
end;
procedure TForm1.Button3Click(Sender: TObject);
Var
Menutemp : HMENU ;
begin
MenuTemp := GetSystemMenu(handle,false); //获取系统菜单句柄
AppendMenu(MenuTemp,MF_SEPARATOR,0,nil);
AppendMenu(MenuTemp,MF_STRING,100,'测试'); //加入用户菜单
end;
源程序下载