在C中为我自己的应用程序获取HWND

won*_*rer 6 c windows hwnd

因为我找不到这个问题的答案,所以我进一步研究了MSDN,我找到了isChild().它可能会给我另一个问题的答案.

现在,为了使用isChild(),我需要传递我要检查的父应用程序的HWND,在本例中是我自己的应用程序.如何获得自己应用程序的HWND?

我不知道标题因为它不断变化所以我不能使用FindWindow().

谢谢

编辑:

由于不清楚,我将添加更多信息:我不是在创建一个窗口.我无权访问窗口的创建.我的代码是一段代码,它与其他程序员编写的任何应用程序一起编译,我无法访问窗口的创建方式,标题或任何其他信息.那么,如何将HWND运行到我正在运行的应用程序的"WINDOW"中?

jal*_*alf 9

您的应用程序没有HWND.窗户确实如此.应用程序可能没有窗口,也可能有很多窗口,因此"获取应用程序的HWND"没有通用功能.

显而易见的解决方案就是在拿到手柄时握住手柄.创建窗口时,将返回HWND.存储它.


Mik*_*nov 6

使用GetTopWindow()和GetNextWindow()来遍历windows z-order.

但是,不要认为这是必要的,但是你可以使用GetCurrentProcessId()和GetWindowThreadProcessId(),可能会有以下内容对你有所帮助:

HWND FindMyTopMostWindow()
{
    DWORD dwProcID = GetCurrentProcessId();
    HWND hWnd = GetTopWindow(GetDesktopWindow());
    while(hWnd)
    {
        DWORD dwWndProcID = 0;
        GetWindowThreadProcessId(hWnd, &dwWndProcID);
        if(dwWndProcID == dwProcID)
            return hWnd;            
        hWnd = GetNextWindow(hWnd, GW_HWNDNEXT);
    }
    return NULL;
 }
Run Code Online (Sandbox Code Playgroud)