实现方案有以下几种:
1、用SetWindowsHookEx(WH_KEYBOARD_LL / WH_KEYBOARD);
2、反复检查GetKeyboardState的值,自己确定键是否被按下;
3、其他的方法都不行的话,用DirectInput;
参考如下:
重载PreTranslate函数,在里面加判断:
if (WM_KEYDOWN == pMsg->message)
{
if ((VK_F10 == pMsg->wParam))
{
dosomething;
}
}
#include<iostream>/GetKeyState()函数是windowsh中的函数,当括号内的键被按下时,其值小于0,/
#include<windowsh>/并且只要在只要键处于被按下的状态,其值都会小于0,当键被松开时,其值大于0/
using namespace std;
int main()
{
while(1){
if((GetKeyState(VK_CONTROL)<0)&&(GetKeyState('A')<0)){
cout<<"CONTROL+A";
while(GetKeyState(VK_CONTROL)<0&&GetKeyState('A')<0) ;//只要键被按下,就会有一定的持续时间。
}
}
}
//自己耗费1天半的呕心沥血之作,希望对你有用!
循环遍历,查询到值相同的,就记录下, 然后保存到另一个Map即可
下面按照要求,写了一个参考代码,读完测试一下就懂了
import javautilArrayList;import javautilArrays;
import javautilHashMap;
import javautilMap;
import javautilTreeMap;
public class Demo {
public static void main(String[] args) {
TreeMap<String, Integer> map = new TreeMap<String, Integer>();
mapput("a", 1);
mapput("b", 2);
mapput("c", 1);
mapput("d", 2);
//result 的键 是 Integer, 值是ArrayList,因为需要存的可能不是一个
HashMap<Integer, ArrayList<String>> result = new HashMap<Integer, ArrayList<String>>();
for (MapEntry<String, Integer> entry : mapentrySet()) {
String k=entrygetKey();
int v=entrygetValue();
if(resultcontainsKey(v)){//如果存在
resultget(v)add(k);
}else{//如果不存在
resultput(v, new ArrayList<String>(ArraysasList(k)));
}
}
Systemoutprintln(result);
}
}
以上就是关于VC++怎样获取键盘是哪一个按键 按下了全部的内容,包括:VC++怎样获取键盘是哪一个按键 按下了、在dev环境下,如何利用C语言获得键盘键值、java 在treemap 中怎么获取有相同值的键等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)