java - 如何使用 Java 在屏幕上移动 Windows 窗口?

标签 java winapi java-native-interface window-managers window-management

我一直在考虑制作一个带有 GUI 的窗口管理器,可能是用 Java 编写的。但是,我正在努力找出移动不属于我的程序的窗口的最佳方法。

到目前为止,我似乎应该使用 JNI 与 Windows API 进行交互,但我还没有找到任何有用的示例。

有人知道该怎么做吗?

谢谢!

PS。如果有更好的语言可以做到这一点,我不一定会依赖 Java。

最佳答案

如果目的是拥有一个快速的窗口管理器,那么使用 C++ 或 C#,甚至 Delphi 肯定会更好。

但是如果您最熟悉 Java,这是可以做到的。

如果您选择(老化的)JNI,您将必须用 C 或 Delphi 编写 Java 应用程序将使用的 DLL。您应该使用 JNA而是访问 Windows 的窗口处理 API 函数。

您将使用的一些功能是:

    HWND WINAPI GetWindow(HWND hWnd, UINT uCmd);
    HWND WINAPI FindWindow(LPCTSTR lpClassName, LPCTSTR lpWindowName);
    BOOL WINAPI EnumWindows(WNDENUMPROC lpEnumFunc, LPARAM lParam);
    HWND WINAPI WindowFromPoint(POINT Point);
    BOOL WINAPI MoveWindow(HWND hWnd, int X, int Y, int nWidth, int nHeight, BOOL bRepaint);

一旦获得窗口句柄(HWND),您就可以对该窗口执行任何您喜欢的操作。

EnumWindows function reference at MSDN

关于java - 如何使用 Java 在屏幕上移动 Windows 窗口?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9835070/

相关文章:

java - 解码 html 响应

java - 无法在 IntelliJ-IDEA 中访问 JavaFX 类 "WebPage"

c++ - 检索具有多个重叠 I/O 请求的缓冲区

c++ - 具有 BS_AUTORADIOBUTTON 样式的自绘按钮

android - 在 Android 游戏中将 java.nio.IntBuffer 传递给 C 函数

java - 使用 JNI 将数据类型从 Java 传递到 C(反之亦然)

android - 从 Java 实例化 JNI 库的多个副本

java - Lambda 和泛型 : Why Does This Compile?

java - JNDI:哪种操作成本较高? LDAP 重新绑定(bind)() 或(取消绑定(bind)() 和绑定(bind)())

java - 为什么我对 winapi GetWindowPlacement 的调用失败(使用 JNA)?