当前位置: 首页 > 面试题库 >

使用JNA获得GetForegroundWindow();

吕承望
2023-03-14
问题内容

我在上一个线程http://codingdict.com/questions/105948上问了类似的问题,但是我被引导使用JNI,
“它并没有取得太大的成功。。。我已经阅读了一些教程,虽然有些可以很好地工作,但其他的我仍然无法获得我所需要的信息,这就是前台窗口的标题。

现在,我正在研究JNA,但我不知道如何访问GetForegroundWindow()…我认为一旦使用以下代码(在另一个线程上找到)获得了窗口的句柄,就可以打印文本:

import com.sun.jna.*;
import com.sun.jna.win32.*;

public class jnatest {
    public interface User32 extends StdCallLibrary {
        User32 INSTANCE = (User32) Native.loadLibrary("user32", User32.class);

        int GetWindowTextA(PointerType hWnd, byte[] lpString, int nMaxCount);
    }

    public static void main(){
        byte[] windowText = new byte[512];

        PointerType hwnd = //GetForegroundWindow() (?)...
        User32.INSTANCE.GetWindowTextA(hwnd, windowText, 512);
        System.out.println(Native.toString(windowText));

    }
}

有什么建议?谢谢!


问题答案:

如何简单地添加一个方法调用以将本机GetForegroundWindow匹配到您的界面,就像这样:

import com.sun.jna.*;
import com.sun.jna.platform.win32.WinDef.HWND;
import com.sun.jna.win32.*;

public class JnaTest {
   public interface User32 extends StdCallLibrary {
      User32 INSTANCE = (User32) Native.loadLibrary("user32", User32.class);
      HWND GetForegroundWindow();  // add this
      int GetWindowTextA(PointerType hWnd, byte[] lpString, int nMaxCount);
   }

   public static void main(String[] args) throws InterruptedException {
      byte[] windowText = new byte[512];

      PointerType hwnd = User32.INSTANCE.GetForegroundWindow(); // then you can call it!
      User32.INSTANCE.GetWindowTextA(hwnd, windowText, 512);
      System.out.println(Native.toString(windowText));
   }
}


 类似资料:
  • 目前,我正试图使用JNA将非Java应用程序设置为焦点,我发现了以下代码。 我还将以下依赖项放入我的pom.xml,该项目是一个只有主文件的新项目。 这是我们的程序入口点: 理论上,在编译/运行时,程序应该只关注运行时打开的谷歌Chrome。 然而,Java给出了以下错误消息: 对于这个问题,我找到的唯一参考是使用JNA User32平台映射的NoSuchMethodError 这几乎是相同的错误

  • 问题内容: 我正在尝试获取Windows机器上所有当前正在运行的进程的列表。 我正在尝试通过JNA的winapi调用EnumProcesses-> OpenProcess-> GetModuleBaseNameW-> CloseHandle尝试OpenProcess调用时失败。GetLastError返回5(ERROR_ACCESS_DENIED)。 这是我的代码: 问题答案: 调用with 表示

  • 问题内容: 在上一个有关Windows 7任务栏的问题之后,我想诊断为什么Windows不承认我的应用程序独立于。我目前有以下JNA代码来获取: 该应用程序的输出看似乱七八糟: 意识到输出可能是UTF-16的事实,在(3)中,我尝试从UTF-16转换字节数组。老实说,我不知道我的方法是否正确,因为(a)我不知道a的大小,(b)我不知道是否确实返回了字节数组或字符串。 我知道JSmooth将在模拟此

  • 库加载良好,但似乎找不到静态变量。为什么没有加载静态变量?

  • 问题内容: 我正在计划在Windows下运行的Java程序的计划制定工作,该程序可以在背景的不同键runnig上映射不同的“宏”。问题是- 如何使Java在应用程序未聚焦时监听按键。 我发现很多观点认为这是不可能的。但是我也发现Stefano在SO上写的这本书。这种解决方案对我来说还不够好,至少没有一个重要的信息。如果没有按下该键,该函数将返回一个值。按键后,它会返回不同的值…如果函数在按键事件后

  • 我试图使用shobjidl_core. h库来运行代码,改变一个特定的监视器的壁纸,特别是我需要运行这两个函数:GetMonitor orDevicePathAt,SetWallfile。 现在,当我运行以下代码时: 我收到一个错误,提示“无法加载库'shobjidl'” 我已经尝试了任何变体的“舒比德”,但仍然找不到一个有效的。从我对JNA的理解来看,它需要一个包含库的dll,但是我找不到任何与