即使启动一个全屏显示的游戏,如何能够做到让自己写的程序界面仍然显示在最前端??
用SetWindowPos API不行啊。

解决方案 »

  1.   

    创建窗体的时候,使它的父窗口是你的桌面然后再用SetActiveWindow试试呢
      

  2.   

    设置SetWindowPos的第二个参数为HWND_TOPMOST试试
      

  3.   

    设置SetWindowPos的第二个参数为HWND_TOPMOST是不可以的,启动游戏一样被覆盖
      

  4.   

    我的应用程序已经启动了,游戏是后启动的。不是很清楚游戏的父窗口如何获取,而且要判定用户运行的程序是否为游戏好像不太可能。游戏窗口是能取到的, 当前程序是否为游戏应该也是能判断的.
    //取到当前顶层窗口
    HWND topHwnd=  ::GetForegroundWindow();
    //下面是取当前程序对应的EXE名称,
    #include <tlhelp32.h> //注意包含 HANDLE hModuleSnap = INVALID_HANDLE_VALUE; 
    MODULEENTRY32 me32; 
    CString szPath;
    CString szExeName;
    hModuleSnap = CreateToolhelp32Snapshot( TH32CS_SNAPMODULE, dwPID ); 
    me32.dwSize = sizeof( MODULEENTRY32 );  if( !Module32First( hModuleSnap, &me32 ) ) 

    CloseHandle( hModuleSnap );     // Must clean up the snapshot object! 
    return ""; 

    szPath=me32.szExePath;
    int nPos=szPath.ReverseFind('\\'); 
    szExeName=szPath.Right(szPath.GetLength()- nPos-1);
    CloseHandle( hModuleSnap ); 你应该是知道游戏EXE名称的吧, 用取到的对比一下就OK了,有什么问题可以直接了到我的信箱
    [email protected] 

      

  5.   

    刚刚掉了一句,要先取进程ID, 再取进程名称 DWORD dwPID=0;
      otherID=GetWindowThreadProcessId(topHwnd,&dwPID);
      

  6.   

    完整程序
    #include <tlhelp32.h> //注意包含HWND topHwnd=  ::GetForegroundWindow();//当前程序窗口
    //下面是取当前程序对应的EXE名称, DWORD dwPID=0; //当前进程ID
      GetWindowThreadProcessId(topHwnd,&dwPID); HANDLE hModuleSnap = INVALID_HANDLE_VALUE; 
    MODULEENTRY32 me32; 
    CString szPath;
    CString szExeName;          //当前进程EXE名称
    hModuleSnap = CreateToolhelp32Snapshot( TH32CS_SNAPMODULE, dwPID ); 
    me32.dwSize = sizeof( MODULEENTRY32 );  if( !Module32First( hModuleSnap, &me32 ) ) 

    CloseHandle( hModuleSnap );     // Must clean up the snapshot object! 
    return ""; 

    szPath=me32.szExePath;
    int nPos=szPath.ReverseFind('\\'); 
    szExeName=szPath.Right(szPath.GetLength()- nPos-1);
    CloseHandle( hModuleSnap ); 
    最后比较一下szExeName, 如果是你要找的游戏进程名称,那么topHwnd就是游戏窗口了
      

  7.   

    wndTopMost不可以吗?
    (该窗口将保持她的顶层位置,即使她并不是活动窗口)书上是怎么说的!
      

  8.   

    下面代码能让你的窗口始终在最前端SetWindowPos(&this->wndTopMost ,0,0,0,0,SWP_NOSIZE);
      

  9.   

    谢谢zhrwolf1(清风)提供的大量源码!!
    我希望做的是窗口在任何游戏上能能悬浮,并且游戏不最小化,下午还接着试。