你如何判断一个字符需要将降至键入shift键?
题
我写一些代码键入使用机器人类字符串。一切都很好大多(好吧,我必须用一个大的switch语句获取字符键码),除了一些键没有键码,因为他们实际上是<大骨节病>移骨节病> +其他一些重要的组合。对于大写字母,这很容易检查,使用Character.isUpperCase(c)
,但对所有的符号,如!@#$%^&*()_+
和各种标点符号不被认为是“大写”虽然他们确实需要转变,以产生thier按键被按下。我试着用搜索引擎的它,但只是发现了一个论坛的帖子,没有令人满意的答案。有没有什么办法,以确定是否被按下的字符需要转移,如果是这样,什么字符是“未移位”的版本?
编辑:下面是代码我到目前为止
public void GenerateKeyTyped(char c) {
if (Character.isUpperCase(c)) {
r.keyPress(KeyEvent.VK_SHIFT);
}
r.keyPress(GetKeyCode(c));
r.keyRelease(GetKeyCode(c));
if (Character.isUpperCase(c)) {
r.keyRelease(KeyEvent.VK_SHIFT);
}
}
解决方案
我不知道的方式来直接解决您的问题(我刚刚结束了使用这些字符的地图),但它可能给你一些建议:
import java.io.*;
import java.util.*;
import java.awt.*;
import java.awt.event.*;
import javax.swing.*;
public class Main3 {
public static void main(String[] args) {
try {
Robot robot = new Robot();
HashMap<String, String> map = new HashMap<String, String>();
map.put("!", "1");
map.put("@", "2");
map.put("#", "3");
char[] charz = "abcdefgABCDEFG123!#".toCharArray();
for(int i = 0; i < charz.length; i++)
{
System.out.print(charz[i] + " : ");
boolean shiftRequired = false;
String key = String.valueOf(charz[i]);
String value = map.get(key);
if (value != null)
{
shiftRequired = true;
key = value;
}
else if (Character.isUpperCase(key.charAt(0)))
{
shiftRequired = true;
}
else
{
key = key.toUpperCase();
}
KeyStroke ks = KeyStroke.getKeyStroke("pressed " + key.toUpperCase());
int keyCode = ks.getKeyCode();
System.out.println(keyCode);
if (shiftRequired)
robot.keyPress(java.awt.event.KeyEvent.VK_SHIFT);
robot.keyPress( keyCode );
robot.keyRelease( keyCode );
if (shiftRequired)
robot.keyRelease(java.awt.event.KeyEvent.VK_SHIFT);
}
} catch(Exception e) {
e.printStackTrace();
}
}
}
其他提示
我不知道,如果你正在寻找什么是可能的。你可以创建自己的表,但请记住,它会那么只有一个键盘布局工作(许多语言都有自己的键盘布局更适合其特定的字符集,此外,还有,可能有它的Dvorak布局自己的移动VS不移位键),除非你考虑到所有的键盘布局,要支持,并为那些创建自定义表。
你能使用AWT类?这样的事情可能工作:
AWTKeyStroke ks = AWTKeyStroke.getAWTKeyStroke('!');
int modifers = ks.getModifiers();
if ((modifiers & KeyEvent.VK_SHIFT) == KeyEvent.VK_SHIFT) {
// Shift pressed
}
不隶属于 StackOverflow