这次我好好把这个程序完善了一下,优化如下:
1.每页阅读时间变准确了
2.提供两种阅读模式:顺序阅读和反复翻书
3.界面优化,更加好看
4.错误输入处理

#include <stdio.h>
#include <stdlib.h>
#include <Windows.h> 
#include <conio.h>
 
int nScreenWidth, nScreenHeight;
void click(int x, int y)
{
	//屏幕在水平和垂直方向上均匀分割成65535×65535个单元
	mouse_event(MOUSEEVENTF_ABSOLUTE|MOUSEEVENTF_MOVE, x*65535/nScreenWidth, y*65535/nScreenHeight, 0, 0);
	
	Sleep(50);//稍微延时50ms 
    mouse_event(MOUSEEVENTF_LEFTDOWN,0,0,0,0);//鼠标左键按下 
    mouse_event(MOUSEEVENTF_LEFTUP,0,0,0,0);//鼠标左键抬起
 }
 void move(int x,int y)
 {
 	mouse_event(MOUSEEVENTF_ABSOLUTE|MOUSEEVENTF_MOVE, x*65535/nScreenWidth, y*65535/nScreenHeight, 0, 0);
 }
 
void main()
{
	//HANDLE handle_color = GetStdHandle(STD_OUTPUT_HANDLE);
	POINT ptB = { 0, 0 };
	int choice1,choice2;	
	char choice3,back;
	int x=-1,y=-1,nochange_right_x,nochange_right_y,nochange_left_x,nochange_left_y;
	float time;
	int scan,scan2;
	LPPOINT xy = &ptB;	//位置变量
	
	backmenu:
	system("title 自动阅读 by andywang") ;
	printf("自动阅读 V2.0\n");
	choose_again:
	printf("1.顺序阅读模式\n");
	printf("2.反复翻书模式\n");//72, 442 1920*1080下 
	printf("3.更多信息\n");
	SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE),FOREGROUND_INTENSITY |FOREGROUND_GREEN);
	printf(">>");
	scanf("%d",&choice1);
	fflush(stdin);
	SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE),FOREGROUND_INTENSITY |  FOREGROUND_RED | FOREGROUND_GREEN | FOREGROUND_BLUE);
	switch((int)choice1)
	{
		case 1:		//1.顺序阅读 
			c1_chooseagain:
			printf("请先进入阅读界面并调整窗口位置和大小,窗口不能遮挡按钮。\n");
			printf("请选择一种输入坐标的方式:\n");
			printf("1.自动获取\n"); 
			printf("2.手动输入\n");
			printf("9.返回主菜单\n");
			nScreenWidth = GetSystemMetrics(SM_CXSCREEN);
    		nScreenHeight = GetSystemMetrics(SM_CYSCREEN);
    		printf("当前屏幕分辨率为:%d %d(可能因为设置了缩放与实际情况不符)\n", nScreenWidth, nScreenHeight);
    		SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE),FOREGROUND_INTENSITY |FOREGROUND_GREEN);
    		printf(">>");
			scanf("%d",&choice2);
			fflush(stdin);
			SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE),FOREGROUND_INTENSITY |  FOREGROUND_RED | FOREGROUND_GREEN | FOREGROUND_BLUE);
			if(choice2==1)//自动 
			{
				printf("把鼠标移动到按钮上并按q获取位置,按e确认并结束。\n");
				while(1)
				{
					choice3=getch();
					if(choice3=='e')
						break;
					else if(choice3=='q')
					{
					GetCursorPos(xy);	
					x=xy->x;y=xy->y;
					printf("x=%d,y=%d\n",x ,y);
					}
				}
				nochange_right_x=x;nochange_right_y=y;
				printf("请输入单页阅读时间,单位秒(建议在60-120之间,至少为3)。\n");
				while(1)
				{
				scan=scanf("%f",&time);
				fflush(stdin);
				if(scan==0|time<3)
					{
					printf("请重新输入:\n");
					continue;
					}
				break;
				}
				
				time=time *  1000 ;
				printf("开始阅读。\n");
				while(1)
				{
					x=nochange_right_x;y=nochange_right_y;
					printf("点击%d,%d\n",x,y);
					click(x,y);
					printf("开始休息%f毫秒\n",time/2-(nochange_right_x-100)/2);
					Sleep(time/2-(nochange_right_x-50));
					for(x=nochange_right_x;x>=100;x--)
					{ 
						move(x,y);
						printf("移动到%d,%d\n",x,y);
						Sleep(1);
					} 
					printf("移动结束,移动了%d毫秒\n",nochange_right_x-100);
					x=nochange_right_x;y=nochange_right_y;
					printf("开始休息%f毫秒\n",time/2-(nochange_right_x-100)/2);
					Sleep(time/2-(nochange_right_x-50)); 
					system("cls");
				}
    		}
    		else if(choice2==2)		//手动 
    		{
    			printf("请输入右侧按钮逻辑坐标,用空格隔开。\n");
    			
				while(1)
				{
					SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE),FOREGROUND_INTENSITY |FOREGROUND_GREEN);
    				printf(">>");
					scan=scanf("%d",&x);
					scan2=scanf("%d",&y);
					fflush(stdin);
					SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE),FOREGROUND_INTENSITY |FOREGROUND_RED | FOREGROUND_GREEN | FOREGROUND_BLUE);
					if(scan==0|scan2==0|x<0)
						{
						printf("请重新输入:\n");
						continue;
						}
					break;
				}
				nochange_right_x=x;nochange_right_y=y;
				printf("请输入单页阅读时间,单位秒(建议在60-120之间,至少为3)。\n");
				while(1)
				{
				SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE),FOREGROUND_INTENSITY |FOREGROUND_GREEN);
				printf(">>");
				scan=scanf("%f",&time);
				fflush(stdin);
				SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE),FOREGROUND_INTENSITY |FOREGROUND_RED | FOREGROUND_GREEN | FOREGROUND_BLUE);
				if(scan==0|time<3)
					{
					printf("请重新输入:\n");
					continue;
					}
				break;
				}
				
				time=time *  1000 ;
				printf("开始阅读。\n");
				while(1)
				{
					x=nochange_right_x;y=nochange_right_y;
					printf("点击%d,%d\n",x,y);
					click(x,y);
					printf("开始休息%f毫秒\n",time/2-(nochange_right_x-100)/2);
					Sleep(time/2-(nochange_right_x-50));
					for(x=nochange_right_x;x>=100;x--)
					{ 
						move(x,y);
						printf("移动到%d,%d\n",x,y);
						Sleep(1);
					} 
					printf("移动结束,移动了%d毫秒\n",nochange_right_x-100);
					x=nochange_right_x;y=nochange_right_y;
					printf("开始休息%f毫秒\n",time/2-(nochange_right_x-100)/2);
					Sleep(time/2-(nochange_right_x-50)); 
					system("cls");
				}
			}
			else if(choice2==9)
			{
				system("cls");
				goto backmenu;
			}
			else
			{
				system("cls");
				printf("未知选项,请重新输入:\n");
				goto c1_chooseagain;
			}
		case 2:		//2.反复阅读 
				c2_chooseagain:
				printf("请先进入阅读界面并调整窗口位置和大小,窗口不能遮挡按钮。\n");
				printf("请选择一种输入坐标的方式:\n");
				printf("1.自动获取\n"); 
				printf("2.手动输入\n");
				printf("9.返回主菜单\n");
				nScreenWidth = GetSystemMetrics(SM_CXSCREEN);
    			nScreenHeight = GetSystemMetrics(SM_CYSCREEN);
    			printf("当前屏幕分辨率为:%d %d(可能因为设置了缩放与实际情况不符)\n", nScreenWidth, nScreenHeight);
    			SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE),FOREGROUND_INTENSITY |FOREGROUND_GREEN);
    			printf(">>");
				scanf("%d",&choice2);
				fflush(stdin);
				SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE),FOREGROUND_INTENSITY |FOREGROUND_RED | FOREGROUND_GREEN | FOREGROUND_BLUE);
				if(choice2==1)
				{
				chooseagain1:
				printf("把鼠标移动到【右侧】按钮上并按q获取位置,按e确认并结束。\n");
				while(1)
				{
					choice3=getch();
					if(choice3=='e')
						break;
					else if(choice3=='q')
					{
					GetCursorPos(xy);	
					x=xy->x;y=xy->y;
					printf("x=%d,y=%d\n",x ,y);
					}
				}
				nochange_right_x=x;nochange_right_y=y;
				printf("把鼠标移动到【左侧】按钮上并按q获取位置,按e确认并结束。\n");
				while(1)
				{
					choice3=getch();
					if(choice3=='e')
						break;
					else if(choice3=='q')
					{
					GetCursorPos(xy);	
					x=xy->x;y=xy->y;
					printf("x=%d,y=%d\n",x ,y);
					}
				}
				nochange_left_x=x;nochange_left_y=y;
				if(nochange_left_x>nochange_right_x)
				{
					printf("左右不分?你输入的左侧按钮坐标大于右侧按钮坐标\n");
					goto chooseagain1;
				}
				printf("请输入单页阅读时间,单位秒(建议在60-120之间,至少为3)。\n");
				while(1)
				{
				SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE),FOREGROUND_INTENSITY |FOREGROUND_GREEN);
				printf(">>");
				scan=scanf("%f",&time);
				fflush(stdin);
				SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE),FOREGROUND_INTENSITY |FOREGROUND_RED | FOREGROUND_GREEN | FOREGROUND_BLUE);
				if(scan==0|time<3)
					{
					printf("请重新输入:\n");
					continue;
					}
				break;
				}
				
				time=time *  1000 ;
				printf("开始阅读。\n");
				while(1)
				{
					x=nochange_right_x;y=nochange_right_y;
					printf("点击右侧按钮%d,%d\n",x,y);
					click(x,y);
					printf("开始休息%f毫秒\n",time/2-(nochange_right_x-100)/2);
					Sleep(time/2-(nochange_right_x-50));
					for(x=nochange_right_x;x>=100;x--)
					{ 
						move(x,y);
						printf("移动到%d,%d\n",x,y);
						Sleep(1);
					} 
					printf("移动结束,移动了%d毫秒\n",nochange_right_x-100);
					x=nochange_right_x;y=nochange_right_y;
					printf("开始休息%f毫秒\n",time/2-(nochange_right_x-100)/2);
					Sleep(time/2-(nochange_right_x-50)); 
					
					//system("cls");
									
					x=nochange_left_x;y=nochange_left_y;
					printf("点击左侧按钮%d,%d\n",x,y);
					click(x,y);				
					printf("开始休息%f毫秒\n",time/2-(nochange_right_x-100)/2);
					Sleep(time/2-(nochange_right_x-50));
					for(x=x;x<=nScreenWidth-100;x++)
					{ 
						move(x,y);
						printf("移动到%d,%d\n",x,y);
						Sleep(1);
					} 
					printf("移动结束,移动了%d毫秒\n",nochange_right_x-100);
					x=nochange_right_x;y=nochange_right_y;
					printf("开始休息%f毫秒\n",time/2-(nochange_right_x-100)/2);
					Sleep(time/2-(nochange_right_x-50)); 
					system("cls");
				}
				}
			if(choice2==2)
			{
				chooseagain2:
				printf("请输入右侧按钮逻辑坐标,用空格隔开。\n");
				while(1)
				{
					SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE),FOREGROUND_INTENSITY |FOREGROUND_GREEN);
					printf(">>");
					scan=scanf("%d",&x);
					scan2=scanf("%d",&y);
					fflush(stdin);
					SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE),FOREGROUND_INTENSITY |FOREGROUND_RED | FOREGROUND_GREEN | FOREGROUND_BLUE);
					if(scan==0|scan2==0|x<0)
						{
						printf("请重新输入:\n");
						continue;
						}
					break;
				}
				nochange_right_x=x;nochange_right_y=y;
				printf("请输入左侧按钮逻辑坐标,用空格隔开。\n");
				while(1)
				{
					SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE),FOREGROUND_INTENSITY |FOREGROUND_GREEN);
					printf(">>");
					scan=scanf("%d",&x);
					scan2=scanf("%d",&y);
					fflush(stdin);
					SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE),FOREGROUND_INTENSITY |FOREGROUND_RED | FOREGROUND_GREEN | FOREGROUND_BLUE);
					if(scan==0|scan2==0|x<0)
						{
						printf("请重新输入:\n");
						continue;
						}
					break;
				}
				nochange_left_x=x;nochange_left_y=y;
				if(nochange_left_x>nochange_right_x)
				{
					printf("左右不分?你输入的左侧按钮坐标大于右侧按钮坐标\n");
					goto chooseagain2;
				}
				printf("请输入单页阅读时间,单位秒(建议在60-120之间,至少为3)。\n");
				while(1)
				{
				SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE),FOREGROUND_INTENSITY |FOREGROUND_GREEN);
				printf(">>");	
				scan=scanf("%f",&time);
				fflush(stdin);
				SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE),FOREGROUND_INTENSITY |FOREGROUND_RED | FOREGROUND_GREEN | FOREGROUND_BLUE);
				if(scan==0|time<3)
					{
					printf("请重新输入:\n");
					continue;
					}
				break;
				}
				
				time=time *  1000 ;
				printf("开始阅读。\n");
				while(1)
				{
					x=nochange_right_x;y=nochange_right_y;
					printf("点击右侧按钮%d,%d\n",x,y);
					click(x,y);
					printf("开始休息%f毫秒\n",time/2-(nochange_right_x-100)/2);
					Sleep(time/2-(nochange_right_x-50));
					for(x=nochange_right_x;x>=100;x--)
					{ 
						move(x,y);
						printf("移动到%d,%d\n",x,y);
						Sleep(1);
					} 
					printf("移动结束,移动了%d毫秒\n",nochange_right_x-100);
					x=nochange_right_x;y=nochange_right_y;
					printf("开始休息%f毫秒\n",time/2-(nochange_right_x-100)/2);
					Sleep(time/2-(nochange_right_x-50)); 
					//system("cls");
					
					
					x=nochange_left_x;y=nochange_left_y;
					printf("点击左侧按钮%d,%d\n",x,y);
					click(x,y);				
					printf("开始休息%f毫秒\n",time/2-(nochange_right_x-100)/2);
					Sleep(time/2-(nochange_right_x-50));
					for(x=x;x<=nScreenWidth-100;x++)
					{ 
						move(x,y);
						printf("移动到%d,%d\n",x,y);
						Sleep(1);
					} 
					printf("移动结束,移动了%d毫秒\n",nochange_right_x-100);
					x=nochange_right_x;y=nochange_right_y;
					printf("开始休息%f毫秒\n",time/2-(nochange_right_x-100)/2);
					Sleep(time/2-(nochange_right_x-50)); 
					system("cls");
				}
			}
			else if(choice2==9)
			{
				system("cls");
				goto backmenu;
			}
			else
			{
				system("cls");
				printf("未知选项,请重新输入:\n");
				goto c2_chooseagain;
			}
		case 3:
				printf("\n作者的话:\n如果可以的话还是请你认真读英语小说,本软件仅供学习研究。\n");
				printf("关于规避掉线检测:由于网站设定,长时间不改变鼠标位置会被判定为掉线。\n");
				printf("所以当每一页的阅读时间快到一半时,程序会让鼠标移动一段距离。\n");
				printf("停止的地方不一定是下次点击的位置,且鼠标移动不会影响单页阅读时间。\n");
				printf("按b返回主菜单。\n");
				while(1)
				{	
				SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE),FOREGROUND_INTENSITY |FOREGROUND_RED | FOREGROUND_GREEN | FOREGROUND_BLUE);
				back=getch();
				fflush(stdin);
				if(back=='b')
				{
					system("cls");
					goto backmenu;
				}
				}
				
		case 4:
		default:
			printf("未知命令,请重新输入\n");
			goto choose_again;
	}
	 
}

终于完工了,累死我啦😂