gpt4 book ai didi

java - 无法使用 Jython + JNA 获取当前前台窗口标题

转载 作者:太空宇宙 更新时间:2023-11-04 15:11:38 25 4
gpt4 key购买 nike

我正在尝试使用 JNA 和 Jython 获取当前的前台窗口标题。我的代码只是 Java 代码的翻译,以实现相同的目的。 Java 中的代码可以工作 - 我已经测试过它 - 并取自这里:https://stackoverflow.com/a/10315344/1522521

当我调用 GetLastError() 时,我得到 1400 代码,即 ERROR_INVALID_WINDOW_HANDLE - 表明窗口句柄无效。我确信窗口句柄是正确的,因为我可以成功调用 GetWindowTextLength(); ShowWindow(handle, WinUser.SW_MINIMIZE);ShowWindow(handle, WinUser .SW_MAXIMIZE); 获取标题的长度(似乎是正确的)并操作窗口。

我有一种预感,问题在于我如何使用变量 text 作为 GetWindowText() 的参数。根据 JNA 的 Javadoc,它假设是 JNA 复制文本的 char[] 缓冲区。由于我只是传递“字符串”,因此可能不正确。这是我的代码:

    def get_current_window_text():
"""
Get current foreground window title.
"""
handle = User32.INSTANCE.GetForegroundWindow()
if User32.INSTANCE.IsWindowVisible(handle):
print "Text lenght:", User32.INSTANCE.GetWindowTextLength(handle)

max_length = 512
text = ''
result = User32.INSTANCE.GetWindowText(handle, text, max_length)
print "Copied text length:", result
if result:
print "Window text:", text
return result

else:
last_error_code = Kernel32.INSTANCE.GetLastError()
if last_error_code == Kernel32.ERROR_INVALID_WINDOW_HANDLE:
print "[ERROR] GetWindowText: Invalid Window handle!"

else:
print "[ERROR] Unknown error code:", last_error_code

else:
print "[ERROR] Current window is not visible"

最佳答案

我的预感是正确的,问题在于调用 GetWindowText() 时的参数不正确。它应该是 char[] - 而不是 Jython 变量。这促使我进行更多研究并发现一些我以前不知道的东西 - Jython 中的 Java 数组。如 Jython 文档 http://www.jython.org/archive/21/docs/jarray.html 中所述:

许多 Java 方法需要 Java 数组对象作为参数。这些参数的使用方式意味着它们必须对应于固定长度的可变序列,有时是原始数据类型。添加 PyArray 类是为了支持这些 Java 数组,并且该类的实例将从生成数组的任何 Java 方法调用中自动返回。此外,还提供了“jarray”模块,允许 Jython 用户自己创建这些数组,主要目的是将它们传递给 Java 方法。

文档也有映射表。工作代码将是这样的:

import jarray    

text_length = User32.INSTANCE.GetWindowTextLength(handle)
max_length = 512
text = jarray.zeros(text_length, 'c')
result = User32.INSTANCE.GetWindowText(handle, text, max_length)
print 'Copied text:', result

关于java - 无法使用 Jython + JNA 获取当前前台窗口标题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21276634/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com