java Fn键

时间:2023-03-08 22:02:46
java Fn键

需求分析

我想开机禁用触摸板.

方案设计

  • 安装驱动:比较麻烦,驱动也不一定支持开机禁用触摸板.
  • 编程实现,让一段代码开机禁用触摸板

编程实现也分好几种方法:

  • 使用windows API禁用触摸板,这需要了解windows的API.
  • 模拟键盘按键,开机就通过按键禁用触摸板.(如是你闻,这正是我想说的).这种方法非常好.

    解决一个问题有两种解决方案:模拟人的行为和真正的去执行操作.例如提交表单这个动作可以用selenium模拟浏览器提交表单,也可以使用httpClient库提交表单.通常,模拟人的行为实现起来简单稳定,可靠性高,对操作对象的依赖程度比较低(只要用户接口不变,我就无需重写代码).一言以蔽之,通过用户接口来模拟人的行为,往往能够独辟蹊径,巧妙简洁的解决问题.

我的电脑禁用/启用触摸板快捷键是Fn+F6.如果你的电脑这个快捷键不包含Fn,那是最好.否则本文描述的方案不可行.

关键类Robot

使用java.awt.Robot类可以模拟人的很多操作,包括按键,鼠标,屏幕截图等各种操作.
那么问题来了,在java中KeyEvent.VK_...没有Fn键.因为Fn键属于用户的私有按键,涉及系统关键操作,不允许程序控制这个按键.你可以编一段代码测试一下,当按下键盘键时,输出键值,会发现按Fn时,啥都不输出,好像没有按键一样.
解决方案只剩下一种了,通过JNI调用操作系统底层接口.