c++ - 获取由库调用创建的窗口的窗口句柄 (HWND)

标签 c++ visual-studio winapi hwnd

编辑:我忘了提及,我没有创建窗口的 DLL 的源代码,所以我实际上无法更改函数以返回 HWND。

我正在创建一个 Win32 应用程序,并使用一个 DLL,该 DLL 通过其导出函数“void X();”之一为我创建一个窗口。我在 WinMain() 中调用 X()。

它确实为我创建了一个窗口。我想获取由此导出的库函数创建的窗口的 HWND,因为 X() 返回 void,因此我可以将其用于其他 API 调用。 有人能告诉我最容易获得 HWND 的方法吗?

我已经在这里搜索并回答了问题,但我无法以某种方式找出确切、适当的解决方案。我尝试了EnumWIndows(),然后获取进程ID,然后与当前线程进程ID进行比较。但我想应该有一种更好、更高效、更简单的方法来获取 HWND。 毕竟,我位于最初创建此窗口的进程的 WinMain 中。

如果我需要解释任何我在这里遗漏的内容,请告诉我。

我确信这是非常基本的,并且在这里公然遗漏了一些东西。对不起。 感谢和问候!

最佳答案

使用 Spy++ 或 Winspector 等工具查看您的应用创建的所有 HWND,特别是它们的类名称和窗口标题。然后,您可以将这些值复制到您的代码中,并在 DLL 创建其窗口后对 FindWindow() 进行一次调用,例如:

int WINAPI WinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance, LPSTR lpCmdLine, int nCmdShow)
{
    // ...
    X();
    HWND hWnd = FindWindow("ClassNameHere", "TitleHere");
    // ...
    return 0;
}

关于c++ - 获取由库调用创建的窗口的窗口句柄 (HWND),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14412197/

相关文章:

c++ - 函数没有 volatile。怎么修?

c++ - 将 double 类型的值写入文本文件

c++ - 没有 GetFilePointer(Ex) Windows API 函数吗?

visual-studio - 无需安装即可使用 msbuild 社区任务

windows - 如何在属性页中获得正确的背景和控件颜色?

windows - CommandLineToArgvW 怪癖

c++ - c/c++ 中的 winsock.h post 请求

c++ - 在 C++ 代码中无休止地做 while 循环?

c - 相当于 Windows 中的 "sysconf(_SC_CLK_TCK)"

visual-studio - 如何阻止 ".jfm file cannot be accessed"锁定 tfs