自动锁洛谷代码
自动锁洛谷也失效了(而且对于键盘会判断错),于是便在之前的基础上做了一个更好的
#pragma once
#include <stdio.h>
#include <io.h>
#include <string>
#include <conio.h>
#include <iostream>
#include <windows.h>
#include <bits/stdc++.h>
#define isKeyDown(VK_NONAME) ((GetAsyncKeyState(VK_NONAME) & 0x8000) ? 1:0) //判断某个按键是否按下
using namespace std;
int wtime=0;
inline void swap(char &a,char &b) {char t=a;a=b;b=t;}
char cmd[210]="start https://www.luogu.org/api/auth/lock?uid=";
void loadUid(int uid)
{
char st[210];
int len=0;
while(uid>0)
{
st[++len]=(uid%10)+'0';
uid/=10;
}
for(int i=1;i<=len/2+1;i++)
swap(st[i],st[len-i+1]);
strcat(cmd,st+1);
}
void lock(int uid)
{
printf("%s\n",cmd);
system(cmd);
}
void help()
{
printf("/***********************************\n");
printf("Author:@Zimo [email protected]\n");
printf("此程序将会在鼠标、键盘没有操作一段时间后自动锁定洛谷。\n");
printf("直到再次按下键盘/移动鼠标后才重新判断鼠标、键盘状态。\n");
printf("***********************************/\n");
}
bool equ(POINT a,POINT b) {return a.x!=b.x || a.y!=b.y;}
bool keyboardHit()
{
return isKeyDown(VK_LBUTTON)||isKeyDown(VK_RBUTTON)||isKeyDown(VK_CANCEL)||isKeyDown(VK_MBUTTON)||isKeyDown(VK_BACK)||isKeyDown(VK_TAB)||isKeyDown(VK_RETURN)||isKeyDown(VK_SHIFT)||isKeyDown(VK_CONTROL)||isKeyDown(VK_MENU)||isKeyDown(VK_PAUSE)||isKeyDown(VK_CAPITAL)||isKeyDown(VK_ESCAPE)||isKeyDown(VK_SPACE)||isKeyDown(VK_PRIOR)||isKeyDown(VK_NEXT)||isKeyDown(VK_END)||isKeyDown(VK_HOME)||isKeyDown(VK_LEFT)||isKeyDown(VK_UP)||isKeyDown(VK_RIGHT)||isKeyDown(VK_DOWN)||isKeyDown(VK_SNAPSHOT)||isKeyDown(VK_INSERT)||isKeyDown(VK_DELETE)||isKeyDown(VK_LWIN)||isKeyDown(VK_RWIN)||isKeyDown(VK_APPS)||isKeyDown(VK_NUMPAD0)||isKeyDown(VK_NUMPAD1)||isKeyDown(VK_NUMPAD2)||isKeyDown(VK_NUMPAD3)||isKeyDown(VK_NUMPAD4)||isKeyDown(VK_NUMPAD5)||isKeyDown(VK_NUMPAD6)||isKeyDown(VK_NUMPAD7)||isKeyDown(VK_NUMPAD8)||isKeyDown(VK_NUMPAD9)||isKeyDown(VK_F1)||isKeyDown(VK_F2)||isKeyDown(VK_F3)||isKeyDown(VK_F4)||isKeyDown(VK_F5)||isKeyDown(VK_F6)||isKeyDown(VK_F7)||isKeyDown(VK_F8)||isKeyDown(VK_F9)||isKeyDown(VK_F10)||isKeyDown(VK_F11)||isKeyDown(VK_F12)||isKeyDown(VK_F13)||isKeyDown(VK_F14)||isKeyDown(VK_F15)||isKeyDown(VK_F16)||isKeyDown(VK_F17)||isKeyDown(VK_F18)||isKeyDown(VK_F19)||isKeyDown(VK_F20)||isKeyDown(VK_F21)||isKeyDown(VK_F22)||isKeyDown(VK_F23)||isKeyDown(VK_F24)||isKeyDown(VK_NUMLOCK)||isKeyDown(VK_SCROLL);
}
int main()
{
help();
inuid:
printf("\n请输入User ID:");
char ls[110];
scanf("%s",ls+1);
int len=strlen(ls+1);
int uid=0,d=1;
for(int i=len;i>=1;i--)
if(ls[i]>'9' || ls[i]<'0')
{
printf("格式有误,请重新输入。");
goto inuid;
}
else
uid+=(ls[i]-'0')*d,d*=10;
loadUid(uid);
inwtime:
printf("\n请输入等待时间(正整数,单位ms):");
scanf("%s",ls+1);
len=strlen(ls+1);
wtime=0;
d=1;
for(int i=len;i>=1;i--)
if(ls[i]>'9' || ls[i]<'0')
{
printf("格式有误,请重新输入。");
goto inwtime;
}
else
wtime+=d*(ls[i]-'0'),d*=10;
printf("\n是否要隐藏此窗口? (Y/n)");
char hh=getche();
printf("\n");
if(hh=='y' || hh=='Y')
{
HWND hwnd=::GetForegroundWindow();
MoveWindow(hwnd,0,0,0,0,true);
}
while(1)
{
while(1)
{
int st=clock();
bool bk=true;
POINT cst;GetCursorPos(&cst);
while(clock()-st<=wtime)
{
if(keyboardHit())
{
bk=false;
break;
}
POINT hh;
GetCursorPos(&hh);
if(equ(hh,cst))
{
bk=false;
break;
}
}
if(bk==true)
{
lock(uid);
break;
}
}
POINT cst;GetCursorPos(&cst);
while(1)
{
if(keyboardHit()) break;
POINT hh;GetCursorPos(&hh);
if(equ(hh,cst)) break;
}
}
return 0;
}