怎么通过句柄控制其他程序主窗口的Visible属性

如何通过句柄控制其他程序主窗口的Visible属性
防止重复打开,希望在第二次开启程序时激活已打开程序,遇到点问题

var
  Handle : THandle; //程序句柄
  MHandle : THandle; //主窗口句柄
begin
  Application.Initialize;
  Handle:= FindWindow(nil,'A');
  MHandle:= FindWindow(nil,'B');
  Application.Title := 'A';
  if Handle <> 0 then
  begin
  if IsIconic(Handle) then //判断程序是否最小化
  ShowWindow(Handle, SW_RESTORE);
  if MHandle<>0 then
  begin
  ShowWindow(Handle, SW_RESTORE);
  ..... //实现将主窗口Visible属性设为True
  end;
  SetForegroundWindow(Handle);
  SetActiveWindow(Handle);
  end

主要我使用CoolTrayIcon将程序最小化到托盘了,CoolTrayIcon源码中实现最小化到托盘用了两句代码:
  Application.MainForm.Visible := False;
  ShowWindow(Application.Handle, SW_HIDE);
恢复用了下面两句:
  ShowWindow(Application.Handle, SW_RESTORE);
  Application.MainForm.Visible := True;

所以如果只执行ShowWindow(Handle, SW_RESTORE);
并不能恢复程序,只能在任务栏中出现,但是看不到窗口,所以请教怎么控制已知句柄窗口的Visible属性

ShowWindow(MHandle, SW_RESTORE);能够是窗口显示,但是下一次调用CoolTrayIcon源码中实现最小化到托盘的命令就无效了,我跟踪一下发现Application.MainForm.Visible := False;不起作用了,除非再执行一下Application.MainForm.Visible := True;才能恢复

所以如果能够直接控制已知句柄窗口的Visible属性应该能解决我的问题
当然如果有其他不这么复杂的方法更好,多谢了!


------解决方案--------------------
已知句柄窗口 也是 delphi的vcl吗?
强制类型转换 有没有效果?
------解决方案--------------------
http://topic.****.net/u/20110707/16/6ce84817-012f-486a-a8b4-b74ff3ea6107.html