【问题标题】:Java and Autoit can't send key like TAB, ENTER or something else?Java 和 Autoit 不能发送诸如 TAB、ENTER 或其他键之类的键?
【发布时间】:2015-09-09 14:21:13
【问题描述】:

我是 autoit 的新手,正在尝试将其与 java 应用程序集成。我不能让它发送 entertabctrl,它只发送纯文本。

代码是这样的:

private void jButton4ActionPerformed(java.awt.event.ActionEvent evt) {                                         

    String jacobDllVersionToUse;
        if (jvmBitVersion().contains("32")){
            jacobDllVersionToUse = "jacob-1.18-M2-x86.dll";
        }
        else {
            jacobDllVersionToUse = "jacob-1.18-M2-x64.dll";
        }
     try{ 
    File file = new File("lib", jacobDllVersionToUse);
    System.setProperty(LibraryLoader.JACOB_DLL_PATH, file.getAbsolutePath());

    AutoItX x = new AutoItX();
    x.run("Skype", "C:/Program Files (x86)/Skype/Phone", AutoItX.SW_SHOW);
    x.winActivate("Skype");
    x.winWaitActive("Skype");
    x.sleep(2000);
    x.send("{TAB}!n" );
     }catch(Exception e){

   } 
}                                        

我已经试过了:

  • x.controlSend("Window Title","text","","{ENTER}",false);
  • x.send("{TAB}!n" );
  • x.send("{TAB}n" );

【问题讨论】:

  • 您的 AutoIt 代码在哪里?一个小的功能方法会很好。 "AutoItX" 是什么?
  • 啊,您使用的是 AutoItX4Java,不是吗?附带说明一下,您必须注意在后台线程中运行所有 AutoIt 代码,否则它可能会冻结您的 Swing GUI。
  • 另外,这段代码的总体目标是什么?如果您希望将文本推送到 Swing 文本组件中,那么可能有更好的方法来做到这一点。
  • 是的,我使用 AutoItX4Java,我知道冻结的问题,我正在努力解决这个问题,但现在我必须修复 autoit 脚本,你的建议
  • 目标是在 Skype 上自动登录,只按一个​​按钮这是应用程序的一部分,用于在某些网站和某些应用程序上自动登录,它必须发送诸如 ENTER、TAB、ALT 之类的信息

标签: java automation autoit jacob


【解决方案1】:

它适用于对 Milos 的真假你给我解决方案

    private void jButton4ActionPerformed(java.awt.event.ActionEvent evt) {                                         
    String sql="select * from app_1 where id_user_main=?";  
    String jacobDllVersionToUse;
        if (jvmBitVersion().contains("32")){
            jacobDllVersionToUse = "jacob-1.18-M2-x86.dll";
        }
        else {
            jacobDllVersionToUse = "jacob-1.18-M2-x64.dll";
        }
     try{ 
    File file = new File("lib", jacobDllVersionToUse);
    System.setProperty(LibraryLoader.JACOB_DLL_PATH, file.getAbsolutePath());
    AutoItX x = new AutoItX();
    x.run("Skype", "C:/Program Files (x86)/Skype/Phone", AutoItX.SW_SHOW);
    x.winWait("Skype");
    x.winActivate("Skype");
    x.winWaitActive("Skype");
    x.sleep(2000);
    x.send("{TAB}!n", false );

     }catch(Exception e){

   } 
}                                        

请大家帮忙

【讨论】:

    【解决方案2】:

    您缺少 WinWait。

    试试这个

    private void jButton4ActionPerformed(java.awt.event.ActionEvent evt) {                                         
    
        String jacobDllVersionToUse;
            if (jvmBitVersion().contains("32")){
                jacobDllVersionToUse = "jacob-1.18-M2-x86.dll";
            }
            else {
                jacobDllVersionToUse = "jacob-1.18-M2-x64.dll";
            }
         try{ 
        File file = new File("lib", jacobDllVersionToUse);
        System.setProperty(LibraryLoader.JACOB_DLL_PATH, file.getAbsolutePath());
    
        AutoItX x = new AutoItX();
        x.run("Skype", "C:/Program Files (x86)/Skype/Phone", AutoItX.SW_SHOW);
        x.winWait("Skype");
        x.winActivate("Skype");
        x.winWaitActive("Skype");
        x.sleep(2000);
        x.send("{TAB}!n", false );
         }catch(Exception e){
    
       } 
    }     
    

    【讨论】:

    • Thy,但仍然是同样的问题,它以文本形式发送 {TAB}!n
    • @Tehnic 在发送函数中添加了 0。 x.send("{TAB}!n", 0 );这将使它发送特殊密钥。如果您想将它们原始发送,请将其设置为 1,就像现在发生的那样。
    • @Tehnic 也试试这个 x.send("{TAB}{ALT}n", 0 );
    • 你的米洛斯就是我做到了,但不是用真假数字 x.send("{TAB}!n", false );新的还可以
    • 太好了,我会将其添加到答案中,如果它有助于解决您的问题,请随时选择我的答案。
    猜你喜欢
    • 2018-09-23
    • 1970-01-01
    • 2021-11-13
    • 2012-08-15
    • 1970-01-01
    • 1970-01-01
    • 2016-04-12
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多