java 模拟输入

package cn.net.haotuo;

import com.sun.jna.platform.win32.BaseTSD;
import com.sun.jna.platform.win32.User32;
import com.sun.jna.platform.win32.WinDef;
import com.sun.jna.platform.win32.WinUser;


/**
 * Created by lenovo on 2017/4/27.
 * 使用winID来获得窗口的类型和标题,然后发送消息或者其他操作
 */
public class POPO {
    public static void main(String[] args) {

        WinDef.HWND hwnd = User32.INSTANCE.FindWindow
                ("Notepad", null); // 第一个参数是Windows窗体的窗体类,第二个参数是窗体的标题。不熟悉windows编程的需要先找一些Windows窗体数据结构的知识来看看,还有windows消息循环处理,其他的东西不用看太多。
        if (hwnd == null) {
            System.out.println("Excel is not running");
        } else {
            User32.INSTANCE.ShowWindow(hwnd, 9);        // SW_RESTORE
            User32.INSTANCE.SetForegroundWindow(hwnd);   // bring to front
            User32.INSTANCE.SetFocus(hwnd);
            String username = "123";
            for (Character c : username.toCharArray()) {
                sendChar(c);
                sendCharPress(c);
                sendCharRelease(c);
            }


        }
    }

    static WinUser.INPUT input = new WinUser.INPUT();

    static void sendChar(char ch) {

        input.type = new WinDef.DWORD(WinUser.INPUT.INPUT_KEYBOARD);
        input.input.setType("ki"); // Because setting INPUT_INPUT_KEYBOARD is not enough: https://groups.google.com/d/msg/jna-users/NDBGwC1VZbU/cjYCQ1CjBwAJ
        input.input.ki.wScan = new WinDef.WORD(0);
        input.input.ki.time = new WinDef.DWORD(0);
        input.input.ki.dwExtraInfo = new BaseTSD.ULONG_PTR(0);
        // Press
        input.input.ki.wVk = new WinDef.WORD(Character.toUpperCase(ch)); // 0x41
        input.input.ki.dwFlags = new WinDef.DWORD(0);  // keydown
        User32.INSTANCE.SendInput(new WinDef.DWORD(1), (WinUser.INPUT[]) input.toArray(1), input.size());

        // Release
        input.input.ki.wVk = new WinDef.WORD(Character.toUpperCase(ch)); // 0x41
        input.input.ki.dwFlags = new WinDef.DWORD(2);  // keyup

        User32.INSTANCE.SendInput(new WinDef.DWORD(1), (WinUser.INPUT[]) input.toArray(1), input.size());

    }


    static void sendCharPress(char ch) {

        input.type = new WinDef.DWORD(WinUser.INPUT.INPUT_KEYBOARD);
        input.input.setType("ki"); // Because setting INPUT_INPUT_KEYBOARD is not enough: https://groups.google.com/d/msg/jna-users/NDBGwC1VZbU/cjYCQ1CjBwAJ
        input.input.ki.wScan = new WinDef.WORD(0);
        input.input.ki.time = new WinDef.DWORD(0);
        input.input.ki.dwExtraInfo = new BaseTSD.ULONG_PTR(0);
        // Press
        input.input.ki.wVk = new WinDef.WORD(Character.toUpperCase(ch)); // 0x41
        input.input.ki.dwFlags = new WinDef.DWORD(0);  // keydown
        User32.INSTANCE.SendInput(new WinDef.DWORD(1), (WinUser.INPUT[]) input.toArray(1), input.size());

    }

    static void sendCharRelease(char ch) {

        input.type = new WinDef.DWORD(WinUser.INPUT.INPUT_KEYBOARD);
        input.input.setType("ki"); // Because setting INPUT_INPUT_KEYBOARD is not enough: https://groups.google.com/d/msg/jna-users/NDBGwC1VZbU/cjYCQ1CjBwAJ
        input.input.ki.wScan = new WinDef.WORD(0);
        input.input.ki.time = new WinDef.DWORD(0);
        input.input.ki.dwExtraInfo = new BaseTSD.ULONG_PTR(0);


        // Release
        input.input.ki.wVk = new WinDef.WORD(Character.toUpperCase(ch)); // 0x41
        input.input.ki.dwFlags = new WinDef.DWORD(2);  // keyup

        User32.INSTANCE.SendInput(new WinDef.DWORD(1), (WinUser.INPUT[]) input.toArray(1), input.size());

    }
}
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
好的,以下是用Java模拟输入一个班学生的成绩,以菜单形式实现成绩输入的代码: ```java import java.util.Scanner; public class Main { public static void main(String[] args) { Scanner scanner = new Scanner(System.in); int[] scores = new int[30]; // 假设班级有30名学生 int count = 0; // 记录已输入成绩的学生数量 while (true) { System.out.println("请选择操作:"); System.out.println("1. 输入成绩"); System.out.println("2. 显示成绩"); System.out.println("3. 退出"); int choice = scanner.nextInt(); switch (choice) { case 1: if (count >= 30) { System.out.println("班级人数已满,无法继续输入成绩!"); break; } System.out.println("请输入第" + (count + 1) + "位学生的成绩:"); int score = scanner.nextInt(); if (score < 0 || score > 100) { System.out.println("成绩输入错误,请重新输入!"); break; } scores[count++] = score; System.out.println("成绩输入成功!"); break; case 2: System.out.println("班级成绩如下:"); for (int i = 0; i < count; i++) { System.out.println("第" + (i + 1) + "位学生的成绩为:" + scores[i]); } break; case 3: System.out.println("程序已退出!"); return; default: System.out.println("输入错误,请重新选择操作!"); break; } } } } ``` 程序运行后,会显示菜单供用户选择操作,用户可以选择输入成绩、显示成绩或退出程序。如果选择输入成绩,程序会提示用户输入学生的成绩,输入完成后会将成绩保存到数组中,并提示输入成功。如果选择显示成绩,程序会遍历数组并输出每个学生的成绩。如果选择退出程序,程序会结束运行。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值