【问题标题】:How to scan open windows如何扫描打开的窗口
【发布时间】:2012-05-28 05:14:36
【问题描述】:

是否可以使用 java 扫描所有打开的窗口并找到指定的窗口。说记事本?例如,我希望记事本在前面和中间打开并准备就绪,它打开了,当我运行我的程序时,它会扫描所有打开的窗口并将记事本向前移动。

【问题讨论】:

  • “当我运行我的程序时,它会扫描所有打开的窗口并将记事本向前移动。” 一种方法是使用Desktop.open(File),在这种情况下,文件是相关联的用记事本。例如。 app-help.txt。这是一个奇怪的要求。当您的应用程序出现时,为什么要将任何其他窗口置于最前面。开始,any 其他应用有什么相关性。有你的吗?
  • 嗯,我的程序有点像我们在爬行,我希望它在记事本上按历史顺序发布它访问的链接,这样我就可以看到历史。不是一个很大的要求,但我想拥有一个。
  • “查看历史” 忘记记事本吧。对历史条目使用JList,对每个条目的详细信息使用JEditorPane 或其他组件。

标签: java window


【解决方案1】:

我在 Windows 系统方面拥有丰富的经验。而且我知道在 Windows Management Instrumentation (WMI) 中正确满足了 Windows 系统的特定要求。我已经成功地使用了 WMI,就像你正在做的那样,但我从来没有用 Java 做过。这是一个链接 WMI explanations。请告诉我您尝试了哪些并陈述您的结论。

相信我,一旦您知道如何使用 Java 访问 WMI,您几乎可以在 Windows 系统上执行任何操作。当然,如果我有这样的要求,我会使用 C# 和 .NET。但 Java 是您的选择 

【讨论】:

    【解决方案2】:

    这可以通过 JNA 完成。

    import com.sun.jna.platform.win32.User32;
    import com.sun.jna.platform.win32.WinDef.HWND;
    
    
    // https://github.com/twall/jna#readme
    //    you need 2 jars : jna-3.5.1.jar and platform-3.5.1.jar
    
    public class ActivateNotepad {
    
        public static void main(String[] args) {
                HWND hwnd = User32.INSTANCE.FindWindow("Notepad", null);
                if (hwnd == null) {
                    System.out.println("No Notepad instance detected");
                }
                else{
                    System.out.println("Notepad instance found.");
                    User32.INSTANCE.SetForegroundWindow(hwnd);  
                }
            }
    }
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-08-31
      • 1970-01-01
      • 2012-04-15
      • 1970-01-01
      相关资源
      最近更新 更多