C语言 模拟按键操作

源码:

#include <windows.h>
#include <string.h>
#include <stdio.h>
#include <time.h>

//#define KEYDOWN(vk_code) ((GetAsyncKeyState(vk_code) & 0x8000) ? 1 : 0) 
//#define KEYUP(vk_code)   ((GetAsyncKeyState(vk_code) & 0x8000) ? 0 : 1)
#define IsUpper(ch)      (ch >= 'A' && ch <= 'Z')
#define IsLower(ch)      (ch >= 'a' && ch <= 'z')
#define SPEED            10

/*将字符串写入到剪切板*/
int setClipbar(const char *data){
    int contentSize = strlen(data) + 1;
    HGLOBAL hMemory; LPTSTR lpMemory;
    if(!OpenClipboard(NULL)) return 0;/* 打开剪切板 */
    if(!EmptyClipboard()) return 0; /* 清空剪切板 */
    if(!(hMemory = GlobalAlloc(GMEM_MOVEABLE, contentSize))) return 0;/* 对剪切板分配内存 */
    if(!(lpMemory = (LPTSTR)GlobalLock(hMemory))) return 0;/* 锁定内存区域 */
    memcpy_s(lpMemory, contentSize, data, contentSize);    /* 复制数据到内存区域 */
    GlobalUnlock(hMemory);                                 /* 解除内存锁定 */
    if(!SetClipboardData(CF_TEXT, hMemory)) return 0;      /* 设置剪切板数据 */
    printf("成功复制【%s】到剪切板,字符串长度为%d。\n",data,contentSize);
    CloseClipboard();/* 关闭剪切板 */
    return 1;
}

/*判断模拟按键是否需要配合Shift键,并纠正键值key*/
int OnShift(char *key){
    if(IsUpper(*key)) return 1;/*大写字母*/
    if(IsLower(*key))
        *key -= 32;/*小写字母*/
    else if((*key > 32 && *key < 39) || (*key > 39 && *key < 44) ||
        (*key == 58) || (*key == 60) || (*key > 61 && *key < 65) ||
        (*key > 93 && *key < 97) || (*key > 122 && *key < 127) ){
        *key -= 16;
        return 1;
    }
    return 0;
}

/*模拟输入命令*/
int Cmd(int flag,const char *fmt,...){
    char buf[1024] = {0},*p = buf,ch;
    va_list ap; va_start(ap,fmt);
    vsprintf(buf,fmt,ap);
    if(flag){
        while(ch = *p++){
            flag = OnShift(&ch);
            printf("按下了 %s%c 键!\n",flag ? "Shift + " : "",ch);
            if(flag) keybd_event(VK_SHIFT,0,0,0);
            Sleep(SPEED);
            keybd_event(ch,0,0,0);
            keybd_event(ch,0,KEYEVENTF_KEYUP,0);
            if(flag) keybd_event(VK_SHIFT,0,KEYEVENTF_KEYUP,0);
        }
        Sleep(SPEED);
        keybd_event(VK_RETURN,0,0,0);
        keybd_event(VK_RETURN,0,KEYEVENTF_KEYUP,0);
    }else{
        if(!setClipbar(buf)){
            puts("写入到剪切板失败!");
            exit(0);
        }
        Sleep(SPEED);
        printf("按下了 Ctrl + V 键!\n");
        keybd_event(VK_CONTROL,0,0,0);
        keybd_event('V',0,0,0);
        keybd_event('V',0,KEYEVENTF_KEYUP, 0);
        keybd_event(VK_CONTROL,0,KEYEVENTF_KEYUP,0);
    }
    Sleep(SPEED);
    printf("按下了 回车 键!\n");
    keybd_event(VK_RETURN,0,0,0);
    keybd_event(VK_RETURN,0,KEYEVENTF_KEYUP,0);
    return 1;
}

int main(){
    char name[10] = {0},sex[4] = {0};
    char xmjp[5] = {0},pw[10] = {0};
    int salary = 0,num = 0;
    char str[1024] = {0};
    srand((unsigned)time(NULL));
    system("title Jason制作—QQ158095153");
    printf("请输入你的姓名:");
    scanf("%s",name);
    printf("请输入你的姓名简拼:");
    scanf("%s",xmjp);
    printf("请输入你的性别:");
    scanf("%s",sex);
    printf("请输入你的编号(学号后四位):");
    scanf("%d",&num);
    printf("请输入你的工资:");
    scanf("%d",&salary);
    printf("请输入你的MySQL密码:");
    scanf("%s",pw);
    printf("开始自动生成!\n");
    system("start cmd");/*启动命令行*/
    Sleep(1000);
    Cmd(0,"MySQL --default-character-set=latin1 -uroot -p");
    Cmd(1,"%s",pw);
    Sleep(2000);
    Cmd(0,"set names gbk;");
    Cmd(0,"create database mysql_%04d;",num);
    Cmd(0,"show databases;");
    Cmd(0,"show create database mysql_%04d;",num);
    Cmd(0,"alter database mysql_%04d default character set gbk;",num);
    Cmd(0,"show create database mysql_%04d;",num);
    Cmd(0,"use mysql_%04d;",num);
    Cmd(0,"create table %04d_%s(",num,xmjp);
    Cmd(0,"id varchar(6) primary key,");
    Cmd(0,"name varchar(10) not null,");
    Cmd(0,"sex varchar(1) default \'男\',");
    Cmd(0,"salary decimal(7,2) default 1800);");
    Cmd(0,"desc %04d_%s;",num,xmjp);
    Cmd(0,"alter table %04d_%s change id id varchar(8);",num,xmjp);
    Cmd(0,"desc %04d_%s;",num,xmjp);
    Cmd(0,"insert into %04d_%s values",num,xmjp);
    Cmd(0,"(\'%04d\',\'%s\',\'%s\',%d),",num+1,name,sex,salary + (rand() % 10) * 100);
    Cmd(0,"(\'%04d\',\'%s\',\'%s\',%d),",num+2,"张三","女",salary + (rand() % 10) * 100);
    Cmd(0,"(\'%04d\',\'%s\',\'%s\',%d),",num+3,"李四",sex,salary + (rand() % 10) * 100);
    Cmd(0,"(\'%04d\',\'%s\',\'%s\',%d),",num+4,"王五","女",salary + (rand() % 10) * 100);
    Cmd(0,"(\'%04d\',\'%s\',\'%s\',%d);",num+5,"赵六",sex,salary + (rand() % 10) * 100);
    Cmd(0,"select * from %04d_%s;",num,xmjp);
    Cmd(0,"update  %04d_%s set salary = salary + 500 where name=\'%s\';",num,xmjp,name);
    Cmd(0,"select * from %04d_%s;",num,xmjp);
    Cmd(0,"delete from %04d_%s where name=\'%s\';",num,xmjp,name);
    Cmd(0,"select * from %04d_%s;",num,xmjp);
    Cmd(0,"select sum(salary) as 工资合计  from  %04d_%s;",num,xmjp);
    Cmd(0,"select(select count(1) as num from %04d_%s where sex = '男') as '男生人数',",num,xmjp);
    Cmd(0,"(select count(1) as num from %04d_%s where sex = '女') as '女生人数';",num,xmjp);
    Cmd(0,"drop database mysql_%04d;",num);
    return 0;
}

后台操作记录:

在这里插入图片描述

执行结果:

在这里插入图片描述

  • 3
    点赞
  • 16
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值