各位我说的不是 TopLevel 和 TopMost 而是下面的情况:首先打开我自己的程序(也就是我想让它一直在最前面显示的程序,取名为A吧),然后我打开另一个程序(取名为B吧),B程序是全屏运行的,B运行时,A不会在B的上面,我通过热键调出A,B自动最小化了,如何使A出现时B不会最小化呢?

解决方案 »

  1.   

    help you up,while miking this!
      

  2.   

    Public Declare Function SetWindowPos Lib "user32" (ByVal hwnd As Long, ByVal hWndInsertAfter As Long, ByVal x As Long, ByVal y As Long, ByVal cx As Long, ByVal cy As Long, ByVal wFlags As Long) As LongSetWindowPos Me.hwnd, HWND_TOPMOST, Me.Left / Screen.TwipsPerPixelX, Me.Top \ Screen.TwipsPerPixelY, Me.Width \ Screen.TwipsPerPixelX, Me.Height \ Screen.TwipsPerPixelY, 0这个是VB的做法,。net调用API后或许能这样做么?
      

  3.   

    //我通过热键调出A,B自动最小化了,如何使A出现时B不会最小化呢?
    不可能,全屏程序与窗口程序不可能在屏幕上并存的
    除非是假全屏(一个没有边框的大小与屏幕一样的窗口)
      

  4.   

    tookkun_3yue3(嘟啊嘟啊嘟啊嘟) ( ) 哈哈,对too
    viena(维也纳N02) 
    一般游戏外挂都可以这样,在游戏的时间可以调出,只是我不知道怎么实现.
      

  5.   

    外挂是依据游戏公开的接口什么的东西做到的吧,
    如果两个程序相互很独立,又都是TopMost,那可能就很难做到的,
    尤其是一个程序还是全屏……
      

  6.   

    toskynomadism() 不可能是游戏公开的接口,因为游戏商都在打击外挂制作者!
      

  7.   

    from1.TopMost=true;api可以这样用.   
      [DllImport("User32.dll")]   
      public   static   extern   bool   SetWindowPos(int   hWnd,int   hWndInsertAfter,int   x,int   y,int   cx,int   cy,int   wFlags);   
        
      SetWindowPos(this.Handle.ToInt32(),-1,0,0,0,0,1);   
      

  8.   

    tooxiaohutushen(程序人生) 按照你的方法试了不行啊SetWindowPos(this.Handle.ToInt32(),-1,0,0,0,0,1); 这一行我放在构造函数里了行吗?
      

  9.   

    tooxiaohutushen(程序人生) 我只要用鼠标点下调出来的程序就最小化了
      

  10.   

    我是这样的理解的就是不知道对不对,因为一个不可能出现两个全屏窗口同时存在,而windows又不知道新窗口是否为全屏窗口,故简单的将此功能从系统级禁用掉了,就像服务器端的alert一样也可能是这样,即全屏窗口必须是当前窗口或者叫活动窗口,而windows操作系统下是不可能同时出现两个活动窗口,如果是这样的话就能解释游戏外挂为什么可以在全屏的时候还能看到它仅仅是TopMost设置为true而已,就是说,它在初始化后就失去焦点,两个同时设置为TopMost为true的窗口以最后一次设置该属性的窗口为准,
      

  11.   

    towxgwxgwxg()  可以看到,并能在上面设置东西
      

  12.   

    viena(维也纳N02) 
    一般游戏外挂都可以这样,在游戏的时间可以调出,只是我不知道怎么实现.游戏外挂是采用注入钩子的方法实现的。
      

  13.   

    to
    Avoid(好象又涨分了)
    请问,C#如何实现啊
      

  14.   

    tolimingdedujuan()代码可以给我参考下吗??[email protected]
      

  15.   

    如何在游戏中弹出自己的界面 
        这个问题可以和热键问题一并解决:众所周知,Windows是一个消息驱动的32位操作系统。在Windows中,所有正在运的进程都有一个独立的2GB的虚拟地址空间,进程之间相互不可见。Windows的绝大多数API与消息是不能跨越进程的。     “Hook”在Windows中主要是用来截取消息的,形象说,就是用来“钩” 消息的。Hook实际上是一个处理消息的程序段,每当特定的消息发出,在没有到达目的窗口前,Hook函数就先捕获该消息,即Hook函数先得到处理消息的控制权。而且如果你把Hook实现在DLL文件中,那么Hook函数将会自动被系统映射到会处理那个特定消息的窗口所在的进程虚拟地址空间中。例如,你可以用Hook来捕获系统中所有的键盘输入消息(WM_KEYDOWN)来实现对电脑使用者的输入进行记录(关于Windows进程管理与Hook 的详细用法,请参阅MSDN与相关资料)。      微软的 DirectX 为Windows下的游戏带来了华丽的声光效果。但是由于DirectX采用直接访问硬件的方法提高多媒体与游戏程序的速度,因此导致了人们误以为在DirectX(确切地说是DirectDraw)下不能显示普通的Windows对话框。      幸运的是,DirectX 是支持GDI的,也就是说游戏程序可以用常规的方法在DirectX下显示对话框(在微软 DirectX 8 SDK 中有名为“FullScreenDialog”的例子)。所以现在我们的问题变为:如上所述,如何让我们的程序进入游戏的程序的内部并显示对话框。     这似乎是一个很棘手的问题。但是,有了上面所讲的Hook情况就大为不同了。我们知道既然Hook可以映射到别的进程内部,那么只要将显示对话框的函数以及对话框资源包括在Hook DLL 中不就可以调用DialogBox() 了吗?完全正确!我们用 SetWindowsHookEx() 为系统设置一个键盘消息Hook,系统会自动将这个DLL映射到游戏的进程中。每当有键盘消息,我们只要判断是不是我们所设定的热键,如果是就调用 DialogBox() 显示对话框即可。 (SE: 还有一种方法可以把 DLL 插入别的进程,那就是利用 RemoteThread  远线程,具体程序请参阅上文提到的 PauseProcess 程序。)      您可以参阅我的TestPopup程序,就演示了在DirectX下弹出界面、暂停游戏、热键等功能。
    楼主可以在下面的论坛获取更多信息http://hack.gameres.com/showthread.asp?threadid=75739
      

  16.   

    SetWindowPos(&wndTopMost,0,0,0,0,SWP_NOSIZE|SWP_NOMOVE);
      

  17.   

    tolimingdedujuan() 你的是  TopMost
      

  18.   

    tohertcloud(·£孙子兵法£·)  引用:您可以参阅我的TestPopup程序,就演示了在DirectX下弹出界面、暂停游戏、热键等功能。请问你的文章地址是什么?