1

如果我没记错的话,flutter 目前是用 windows 的 win32 库实现的(尽管一些文档页面指出这可能会更改为 .NET 或其他一些框架,因为 Flutter windows 处于非常早期的开发阶段并且可能随时更改时间而不保持向后兼容性)。有什么方法可以获取当前 Flutter 应用程序的 win32 窗口句柄吗?

4

2 回答 2

4
static final _user32 = DynamicLibrary.open('user32.dll');

static final findWindowA = _user32.lookupFunction<
      Int32 Function(Pointer<Utf8> _lpClassName, Pointer<Utf8> _lpWindowName),
      int Function(Pointer<Utf8> _lpClassName,
          Pointer<Utf8> _lpWindowName)>('FindWindowA');

int hWnd = findWindowA('FLUTTER_RUNNER_WIN32_WINDOW'.toNativeUtf8(), nullptr);
print(hWnd);

'FLUTTER_RUNNER_WIN32_WINDOW' 是在 windows/runner/win32_window.cpp 中定义的 Flutter 的窗口类名,如果用户运行多个 Flutter 应用程序,您可以使其唯一。

toNativeUtf8 是来自 dart ffi 的函数。

于 2021-06-28T11:50:21.517 回答
3

是的:

  • 在当前的框架 API 中,您可以使用GetNativeWindow(). 如果您想要顶级窗口,您可以使用标准 Win32 API 从那里向上走。

  • 假设您使用的是 FDE Windows 运行程序,您还可以使用 .cpp 直接在 main.cpp 中获取顶级窗口GetHandle()

于 2019-12-21T21:42:22.200 回答