c++ 键盘/鼠标交互+特殊输入/输出+窗口常用函数

注:实测可用于Dev-C++5.1.1,不保证其他编译器可用。

I头文件

需要头文件:

#include <cstdio>
#include <conio.h>
#include <cstdlib>
#include <cstring>
#include <fstream>
#include <iostream>
#include <windows.h>
#include <algorithm>

或:

#include <bits/stdc++.h>
#include <conio.h>
#include <windows.h>

II键盘函数

函数:

键按下#define KEY_DOWN(VK_NONAME) ((GetAsyncKeyState(VK_NONAME) & 0x8000) ? 1:0)
键弹起#define KEY_UP(VK_NONAME) ((GetAsyncKeyState(VK_NONAME) & 0x8000) ? 0 : 1)
使键按下keybd_event(VK_NONAME,0,0,0);
使键弹起keybd_event(VK_NONAME,0,KEYEVENTF_KEYUP,0);

使用方法:

1.if(KEY_DOWN(某个键))或if(KEY_UP(某个键)) 检测该键是否按下/未按下

2.keybd_event(某个键,0,0,0);或keybd_event(某个键,0,KEYEVENTF_KEYUP,0);使该键是否按下/弹起(实际使用可参照下文鼠标函数click_left())

键码表(替换“某个键”):

    VK_LBUTTON             鼠标左键                      0x01 
    VK_RBUTTON             鼠标右键                      0x02 
    VK_CANCEL              Ctrl + Break                  0x03 
    VK_MBUTTON             鼠标中键                      0x04 
    VK_BACK                Backspace 键                   0x08 
    VK_TAB                 Tab 键                        0x09 
    VK_RETURN              回车键                        0x0D 
    VK_SHIFT               Shift 键                      0x10 
    VK_CONTROL             Ctrl 键                       0x11 
    VK_MENU                Alt 键                         0x12 
    VK_PAUSE               Pause 键                      0x13 
    VK_CAPITAL             Caps Lock 键                  0x14 
    VK_ESCAPE              Esc 键                        0x1B 
    VK_SPACE               空格键                       0x20 
    VK_PRIOR               Page Up 键                    0x21 
    VK_NEXT                Page Down 键                  0x22 
    VK_END                 End 键                        0x23 
    VK_HOME                Home 键                       0x24 
    VK_LEFT                左箭头键                      0x25 
    VK_UP                  上箭头键                      0x26
    VK_RIGHT               右箭头键                      0x27 
    VK_DOWN                下箭头键                      0x28 
    VK_SNAPSHOT            Print Screen 键               0x2C 
    VK_Insert              Insert 键                     0x2D 
    VK_Delete              Delete 键                     0x2E 
    '0' – '9'             数字 0 - 9                    0x30 - 0x39 
    'A' – 'Z'             字母 A - Z                    0x41 - 0x5A 
    VK_LWIN                左WinKey(104键盘才有)         0x5B 
    VK_RWIN                右WinKey(104键盘才有)         0x5C 
    VK_APPS                AppsKey(104键盘才有)          0x5D 
    VK_NUMPAD0            小键盘 0 键                    0x60 
    VK_NUMPAD1            小键盘 1 键                    0x61 
    VK_NUMPAD2            小键盘 2 键                    0x62 
    VK_NUMPAD3            小键盘 3 键                    0x63 
    VK_NUMPAD4            小键盘 4 键                    0x64 
    VK_NUMPAD5            小键盘 5 键                    0x65 
    VK_NUMPAD6            小键盘 6 键                    0x66 
    VK_NUMPAD7            小键盘 7 键                    0x67 
    VK_NUMPAD8            小键盘 8 键                    0x68 
    VK_NUMPAD9            小键盘 9 键                    0x69 
    VK_F1 - VK_F24        功能键F1 – F24                0x70 - 0x87 
    VK_NUMLOCK            Num Lock 键                    0x90 
    VK_SCROLL             Scroll Lock 键                 0x91 

III鼠标函数

函数:

获取y int gy(){
    POINT pt; 
    GetCursorPos(&pt);
    return pt.x;
}
获取x int gx(){
    POINT pt; 
    GetCursorPos(&pt);
    return pt.y;
}
设置 SetCursorPos(x,y);}
左键点击void click_left(){
    mouse_event(MOUSEEVENTF_LEFTDOWN,0,0,0,0);  
    Sleep(5); 
    mouse_event(MOUSEEVENTF_LEFTUP,0,0,0,0); 
} 
右键点击void click_right(){
    mouse_event(MOUSEEVENTF_RIGHTDOWN,0,0,0,0);  
    Sleep(5);   
    mouse_event(MOUSEEVENTF_RIGHTUP,0,0,0,0);  
}

使用方法:

gx()或gy() 获取鼠标x,y坐标

SetCursorPos(x,y); 设置鼠标x,y坐标

click_left();使鼠标左键点击

click_right();使鼠标右键点击

IV输入函数

函数:

正常读入cin/scanf/getline
无痕读入getch()
检测按下kbhit()

使用方法:

cin/scanf/getline

getch() 常与kbhit()搭配,不输出在控制台的输入

kbhit();检测有无键按下

V输出函数

函数:

清屏system("cls")
光标跳至void GOTO(int x,int y){
    CONSOLE_SCREEN_BUFFER_INFO csbiInfo;
    HANDLE hConsoleOut;
    hConsoleOut = GetStdHandle(STD_OUTPUT_HANDLE);
    GetConsoleScreenBufferInfo(hConsoleOut,&csbiInfo);
    csbiInfo.dwCursorPosition.Y = x;
    csbiInfo.dwCursorPosition.X = y;
    SetConsoleCursorPosition(hConsoleOut,csbiInfo.dwCursorPosition);
}
设置颜色#define setcolor(x) SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE),x)
设置颜色system("color XY");

使用方法:

system("cls") 清屏(速度较慢,可替换为GOTO(0,0))

GOTO(int x,int y) 光标跳至

setcolor(x) 设置颜色为x

system("color XY"); 设置颜色为背景:X文字:Y

颜色表(替换“x”和"XY"):

system("color XY");颜色

    0 = 黑色       8 = 灰色
    1 = 蓝色       9 = 淡蓝色
    2 = 绿色       A = 淡绿色
    3 = 浅绿色     B = 淡浅绿色
    4 = 红色       C = 淡红色
    5 = 紫色       D = 淡紫色
    6 = 黄色       E = 淡黄色
    7 = 白色       F = 亮白色

setcolor(x)颜色(背景色编码+文字色编码即可)

    文字   
    1   深蓝色
    2   深绿色
    3   深青色
    4   深红色
    5   深粉色
    6   黄色
    7   深白色
    8   灰色
    9   浅蓝色
    10  浅绿色
    11  浅青色
    12  浅红色
    13  浅粉色
    14  浅黄色
    15  浅白色

    背景 
    1~15        黑色
    16~31       深蓝色
    32~47       深绿色
    48~63       深青色
    64~79       深红色
    80~95       深粉色
    96~111      深黄色
    112~127     深白色
    128~143     灰色
    144~159     浅蓝色
    160~175     浅绿色
    176~191     浅青色
    192~207     浅红色
    208~223     浅粉色
    224~239     浅黄色
    240~255     浅白色

VI窗口函数

函数:

获取窗口GetForegroundWindow();
隐藏/显示ShowWindow(hWnd,SW_NONAME);
最大化HWND hwnd = 窗口;
    int cx = GetSystemMetrics(SM_CXSCREEN);
    int cy = GetSystemMetrics(SM_CYSCREEN);
    LONG l_WinStyle = GetWindowLong(hwnd,GWL_STYLE);
    SetWindowLong(hwnd,GWL_STYLE,(l_WinStyle | WS_POPUP | WS_MAXIMIZE) & ~WS_CAPTION & ~WS_THICKFRAME & ~WS_BORDER);
    SetWindowPos(hwnd, HWND_TOP, 0, 0, cx, cy, 0);

使用方法:

1.GetForegroundWindow(); 获取最前方窗口ID

2.ShowWindow(hWnd,状态);使hWnd(可用HWND hWnd=GetForegroundWindow();获取)变为(HIDE:隐藏/SHOW:显示)某状态

3.(省略...)最大化使窗口最大化

  • 10
    点赞
  • 84
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值