目前我用过得方法:
关于隐藏:
Form1.Hide;--在Create事件中失败,按键可以;
ShowWindow(Application.Handle, SW_HIDE);--在Create事件中失败,按键中可以隐藏窗口,但是在任务栏中有显示;
Application.ShowMainForm:=False;---均可以隐藏;
关于显示:对比timer与其他程序中获得该程序句柄后用Application.ShowMainForm:=False;隐藏以后:
ShowWindow(Form1.Handle, SW_SHOW);---Timer中可以显示,但是在其他程序中用SetForeGroundWindow(WinHandle);失败
其他多种方式也是如此效果
目前我想做的一件事情是:在其他的程序中获得该隐藏程序的handle,然后将其显示
可是一直不成功,我的系统是XPsp2,delphi7!还请高人指教,人都搞郁闷了!

解决方案 »

  1.   

    在Window98以下,如果程序要激活自己,只需要简单的调用SetForegroundWindow即可达到目的。但到Win98以后,再也没有这么简单了。
        在Window98以下,如果程序要激活自己,只需要简单的调用SetForegroundWindow即可达到目的。但到Win98以后,再也没有这么简单了。新建一个简单的工程,加进一个Timer控件,设置时间间隔为3秒,接着在时间事件中写SetForegroundWindow(Handle),好,运行程序,将窗口切换到后台,3秒钟之后,你看到的只是任务栏上闪了闪,窗口仍然躺在后面。这是怎么回事呢,原来在Win98以后,窗口要使用SetForegroundWindow激活自己,必须得到“允许”,允许的方式有很多种,我只介绍最简单的一种,就是利用这个API:LockSetForegroundWindow先解锁Foreground的窗口,然后再调用SetForegroundWindow。LockSetForegroundWindow在Delphi的Windows单元中并没有声明,需要自己声明,我将激活的函数重新封装如下,需要的朋友直接用就可以了:const
      LSFW_LOCK     = 1;
      LSFW_UNLOCK   = 2;
    function LockSetForegroundWindow(uLockCode: DWORD): BOOL; stdcall;implementationfunction LockSetForegroundWindow; external  'user32.dll' name 'LockSetForegroundWindow';function wdSetForegroundWindow(Handle: THandle): Boolean;
    begin
    //-----------------------------------------------------
    //作者:linzhenqun
    //时间:2006-11-1
    //说明:使Win98以上的窗口都可以设置Foreground的函数
    //-----------------------------------------------------
      if ((Win32Platform = VER_PLATFORM_WIN32_NT) and (Win32MajorVersion> 4))//up win 2000
        or ((Win32Platform = VER_PLATFORM_WIN32_WINDOWS) and  //up win 98
        ((Win32MajorVersion > 4) or
        ((Win32MajorVersion = 4) and
        (Win32MinorVersion > 0)))) then
        LockSetForegroundWindow(LSFW_UNLOCK);
      Result := SetForegroundWindow(Handle);
    end;现在你在时间事件中写下如下代码:Application.Restore;wdSetForegroundWindow(Handle);那么,窗口就可以自己激活自己了,爽吧!抄别人的, 的确是个好方法!
      

  2.   

    感谢楼上,在我刚发完帖子之后就解决了,原来有个两个程序共同的互斥的handle没有释放造成的问题!
      

  3.   

    在其它的程序中可以用FindWindow和ShowWindow,不知道是不是这个意思
    Handle := FindWindow(nil,'窗体名');
    ShowWindow(Handle,SW_Show)