- android - 多次调用 OnPrimaryClipChangedListener
- android - 无法更新 RecyclerView 中的 TextView 字段
- android.database.CursorIndexOutOfBoundsException : Index 0 requested, 光标大小为 0
- android - 使用 AppCompat 时,我们是否需要明确指定其 UI 组件(Spinner、EditText)颜色
目前,我正在尝试使用 JNA 将非 Java 应用程序设置为焦点,我发现了以下代码。
import com.sun.jna.platform.win32.User32;
import com.sun.jna.platform.win32.WinDef.HWND;
public class win32functions{
public static void setFocusToWindowsApp(String applicationTitle, int windowState) {
int state = windowState;
switch (state) {
default:
case 0:
state = User32.SW_SHOWNORMAL;
break;
case 1:
state = User32.SW_SHOWMAXIMIZED;
break;
case 2:
state = User32.SW_SHOWMINIMIZED;
break;
}
User32 user32 = User32.INSTANCE;
HWND hWnd = user32.FindWindow(null, applicationTitle);
if (user32.IsWindowVisible(hWnd)) {
if (state != User32.SW_SHOWMINIMIZED) {
user32.ShowWindow(hWnd, User32.SW_SHOWMINIMIZED);
}
user32.ShowWindow(hWnd, state);
user32.SetFocus(hWnd);
}
}
}
我还将以下依赖项放入我的 pom.xml 中,该项目是一个新项目,只有一个主文件。
<properties>
<jna.version>5.5.0</jna.version>
</properties>
<dependencies>
<dependency>
<groupId>net.java.dev.jna</groupId>
<artifactId>jna</artifactId>
<version>${jna.version}</version>
</dependency>
<dependency>
<groupId>net.java.dev.jna</groupId>
<artifactId>jna-platform</artifactId>
<version>${jna.version}</version>
</dependency>
</dependencies>
这是我们的程序入口点:
public class EntryPoint{
public static void main(String[] args) throws Exception
{
win32functions.setFocusToWindowsApp("Google Chrome", 0);
}
}
理论上,在编译/运行时,程序应该只关注 Google Chrome,它在运行时打开。
但是,Java 给出以下错误消息:
Exception in thread "main" java.lang.NoSuchMethodError: 'com.sun.jna.Library com.sun.jna.Native.load(java.lang.String, java.lang.Class, java.util.Map)'
at com.sun.jna.platform.win32.User32.<clinit>(User32.java:49)
at win32functions.setFocusToWindowsApp(win32functions.java:21)
at EntryPoint.main(EntryPoint.java:16)
我发现这个问题的唯一引用是这个 NoSuchMethodError using JNA User32 platform map
几乎是同样的错误,解决方案是更改 JNA 和 JNA-platform 的版本。但是,在我的 Maven 依赖项中,我对平台和 JNA 使用相同的版本。有人能给我一些见解吗?其实我真的很绝望,所以才来这里问。
最佳答案
该异常指向与您链接的问题相同的直接错误原因,具体来说,您的项目找不到 Native
类的 JNA 5.x 版本(使用 load(String, Class, Map)
方法),这表明您的类路径上有旧版本的 com.sun.jna.Native
类。
看来您已经怀疑这一点,并且您的 pom.xml
摘录单独看来是正确的,但您没有提供足够的上下文来了解是否存在另一个导致加载错误版本的常见错误。以下操作之一应该有助于解决您的问题:
pom.xml
文件中首先列出 jna
和 jna-platform
依赖项。如果您有任何其他依赖项可以传递加载早期版本的 JNA,它们可能会首先处理它们。pom.xml
文件更新/刷新/重新加载项目依赖项。
mvn install
或 mvn package
应该可以完成此操作。Maven > Update Project
。Native.jar
的 jar/包。 Spring Boot 是这里的常见罪魁祸首。关于java - 使用 JNA SetForeGroundWindow,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59606969/
使用 powershell 代码,我尝试更改窗口的位置(工作正常)并将此窗口“始终位于顶部”。 请在下面找到我的代码: Import-Module C:/install/WASP/wasp.dll f
这个问题已经有答案了: Bring to forward window when minimized (2 个回答) 已关闭 8 年前。 无法找到有关此主题的任何好的答案,所以也许有人可以帮助我。我正
我刚刚编写了简单的脚本来启动应用程序,并且我正在尝试使用“SendKeys”模块将击键发送到该应用程序。有一个“快照”按钮,但我无法让 Python 单击“快照”按钮,因为新窗口没有焦点。所以我计划使
我正在尝试启动一个应用程序并将其置于最前面。但是,应用程序启动正常,但最终会落后启动应用程序。请注意,在已运行的最小化应用程序上使用类似的方法效果很好(为简洁起见,从该示例中删除了该代码)——它仅在启
我有一个用 C# 编写的应用程序,它向另一个程序发送 key 。为此,我在发送有效的键之前调用了 SetForegroundWindow 方法。问题是当我使用 RDC 连接到计算机并最小化 RDC 窗
我使用这个问题 How to force C# .net app to run only one instance in Windows? 将我的 C# Windows 应用程序限制为一次只允许一个实
我正在使用 C# 应用来监听全局组合键 (ctrl+F9),这会将特定窗口置于最前面。 这是我用来将窗口置于最前面的代码,它仅在由 Button 事件触发时有效: private void b
目前,我正在尝试使用 JNA 将非 Java 应用程序设置为焦点,我发现了以下代码。 import com.sun.jna.platform.win32.User32; import com.sun.
我正在开发一个消息传递工具。消息窗口是整个应用程序的一部分。当有消息传来时,我需要窗口转到前面。我正在使用这段代码: if( m_hwnd == NULL || !::IsWindow(m_h
我写了一个图像匹配 C++ 工具,它是一个通知区域工具(无可见窗口)。它获得了另一个窗口的句柄并将其聚焦,然后匹配它保存的图像。现在这个工具正在完善,但我关注的程序的制作者(不是我写的)推送了一个更新
我有一系列相当复杂的应用程序,这些应用程序依赖于在前台切换应用程序的能力。 我的问题是,在前台切换应用程序每 5 或 6 次,它根本无法使应用程序前进。 GetLastError 不报告任何问题。我经
这是我想做的: 1)用用户名打开一个应用程序 2)提供一些输入 3)为具有不同用户名的应用程序打开第二个窗口 4)再输入一些信息 5)切换到第一个应用程序窗口,做一些事情 6)切换到第二个应用 我正在
我知道这听起来很邪恶,但我的意图根本不是这个。 用户点击“延迟拍摄”并开始倒计时,在此期间他们将焦点转到另一个应用程序,然后在倒计时之后用户希望我的应用程序收回焦点。 SetForegroundWin
谁能给我解释一下 setactivewindow 和 setforegroundwindow 有什么区别(使用来自 www.pinvoke.net/# 的 pinvoke 初看,您可以告诉我它设置了事
BringWindowToTop , SetForegroundWindow , SwitchToThisWindow , SetWindowPos , ShowWindow 所有这些都被描述为显示和
我注意到 Haskell Win32 api没有 SetForegroundWindow 函数,而且我对 haskell 不够熟练,无法自己添加此功能。是否有任何方法可以使用 haskell 复制它,
我正在寻找使用 FindWindow() 和 SetForegroundWindow() 切换到不同应用程序的旧 User32.dll 版本的替代方案. 我确实找到了使用 Process.GetPro
我在使用 PInvoke 的 .NET 中使用 SetForegroundWindow API。 当我在 Visual Studio 中调试时使用 API 时,它工作得很好。但是当应用程序正常运行时它
我是 SFML Team 的一员我们目前正在研究“请求”窗口焦点的功能。目标是在 Windows、OS X 和 Linux 上获得非常相似的行为。 对于 Windows,一个人得到相当简单的 SetF
我正在尝试使用 c# 将进程窗口设置为前台/焦点(从当时没有焦点的应用程序),因此我使用的是 user32.dll static extern bool SetForegroundWindow(Int
我是一名优秀的程序员,十分优秀!