PPT翻页辅助程序

——————PPT翻页辅助器 by cat6993——————

ppt翻页不方便?我的程序完美解决触摸屏翻页功能!(希沃放映PPT切换工具总是卡住)

(软件样式见左图←)屏幕两边置顶显示窗口,通过按下键盘↑↓键翻页,同时添加标注、橡皮、清屏(希沃里没有)功能,可以一键放映或退出放映(你知道吗,用微软PPT放映时右键点帮助教你详细使用PPT!下图截自微软官方)

源代码:

#include <windows.h>
#include <tchar.h>
#include <commctrl.h>
#include <iostream>
#include <filesystem>
#define KEY_DOWN(VK_NONAME) ((GetAsyncKeyState(VK_NONAME) & 0x8000) ? 1:0)
using namespace std;
static TCHAR szWindowClass[] = _T("killmythware");
static TCHAR szTitle[] = _T("PPT翻页程序");
static TCHAR szChildClass[] = TEXT("ChildClass");
//控件ID
UINT IDC_BUTTON_1 = 200;
UINT IDC_BUTTON_2 = 201;
UINT IDC_BUTTON_3 = 202;
UINT IDC_BUTTON_4 = 203;
UINT IDC_BUTTON_5 = 205;
UINT IDC_BUTTON_6 = 206;
UINT IDC_BUTTON_7 = 207;
UINT IDC_BUTTON_8 = 208;
UINT IDC_BUTTON_9 = 209;
int screenx=GetSystemMetrics(SM_CXSCREEN);
int screeny=GetSystemMetrics(SM_CYSCREEN);
#include <tlhelp32.h> //头文件
#include<tchar.h>
TCHAR Process[] = _T("process.exe");//需要先定义
TCHAR student[]="StudentMain.exe";//学生端名称
TCHAR teacher[]="TeacherMain.exe";//教师端名称
int isopen=0,oldisopen=0;
DWORD pid=1,oldpid=1;
DWORD FindProcess(TCHAR Name[]) //调用时传入Process
{
	DWORD ID = 1; //PID为0是系统的进程,不存在PID为1的进程
	PROCESSENTRY32 pe;
	pe.dwSize = sizeof(PROCESSENTRY32);
	HANDLE hSnap = CreateToolhelp32Snapshot(TH32CS_SNAPPROCESS, 0);
	if (Process32First(hSnap, &pe))
	{
		do
		{
			if (lstrcmpi(Name, pe.szExeFile) == 0)//进程存在的条件
			{
				ID = pe.th32ProcessID;
				break;
			}
		} while (Process32Next(hSnap, &pe));
	}
	CloseHandle(hSnap);
	return ID;
}
void alttab(){
	keybd_event(18,0,0,0);
	keybd_event(9,0,0,0);
	keybd_event(9,0,KEYEVENTF_KEYUP,0);
	keybd_event(18,0,KEYEVENTF_KEYUP,0);Sleep(30);
}
bool autoalttab=1,StartWhenPowerOn=0,StartWhenPlayPPT=1,initstart=0;
//第五步:窗口函数中处理窗口消息
LRESULT CALLBACK WindowProc(HWND hWnd, UINT uMsg, WPARAM wParam, LPARAM lParam)
{
	//windowhwnd=hWnd;//将该窗口的句柄赋给全局变量
	PAINTSTRUCT ps;
	HDC hdc;
	TCHAR greeting[] = _T("");
	switch (uMsg)
	{
		case WM_CREATE: //创建按钮
		{
			SetWindowLongPtr(hWnd, GWL_STYLE, GetWindowLongPtr(hWnd, GWL_STYLE) & ~WS_MINIMIZEBOX);
			SetWindowLongPtr(hWnd, GWL_STYLE, GetWindowLongPtr(hWnd, GWL_STYLE) & ~WS_MAXIMIZEBOX);
			HWND hButtonWnd1 = CreateWindow(WC_BUTTON, _T("△"), WS_CHILD | BS_PUSHBUTTON | WS_VISIBLE, 2, 17, 70, 50, hWnd, (HMENU)IDC_BUTTON_1, NULL, NULL);
			HWND hButtonWnd2 = CreateWindow(WC_BUTTON, _T("标注/鼠标"), WS_CHILD | BS_PUSHBUTTON | WS_VISIBLE, 2, 70, 70, 40, hWnd, (HMENU)IDC_BUTTON_2, NULL, NULL);		
			HWND hButtonWnd3 = CreateWindow(WC_BUTTON, _T("橡皮/鼠标"), WS_CHILD | BS_PUSHBUTTON | WS_VISIBLE, 2, 113, 70, 40, hWnd, (HMENU)IDC_BUTTON_3, NULL, NULL);
			HWND hButtonWnd4 = CreateWindow(WC_BUTTON, _T("清屏"), WS_CHILD | BS_PUSHBUTTON | WS_VISIBLE, 2, 156, 70, 40, hWnd, (HMENU)IDC_BUTTON_4, NULL, NULL);
			HWND hButtonWnd5 = CreateWindow(WC_BUTTON, _T("▽"), WS_CHILD | BS_PUSHBUTTON | WS_VISIBLE, 2, 199, 70, 50, hWnd, (HMENU)IDC_BUTTON_5, NULL, NULL);
			HWND hButtonWnd6 = CreateWindow(WC_BUTTON, _T("放映"), WS_CHILD | BS_PUSHBUTTON | WS_VISIBLE, 2, 251, 34, 30, hWnd, (HMENU)IDC_BUTTON_6, NULL, NULL);
			HWND hButtonWnd7 = CreateWindow(WC_BUTTON, _T("退出"), WS_CHILD | BS_PUSHBUTTON | WS_VISIBLE, 38, 251, 34, 30, hWnd, (HMENU)IDC_BUTTON_7, NULL, NULL);
			HWND hButtonWnd8 = CreateWindow(WC_BUTTON, _T("退出程序"), WS_CHILD | BS_PUSHBUTTON | WS_VISIBLE, 2, 284, 70, 30, hWnd, (HMENU)IDC_BUTTON_8, NULL, NULL);
			HWND hButtonWnd9 = CreateWindow(WC_BUTTON, _T("PPT翻页"), WS_CHILD | BS_PUSHBUTTON | WS_VISIBLE, 2, 0, 70, 17, hWnd, (HMENU)IDC_BUTTON_9, NULL, NULL);
		}
		break;
		case WM_COMMAND:
		{
			UINT nCtrlID = LOWORD(wParam); //低字节表示ID号
			UINT nCode   = HIWORD(wParam); //高字节表示通知码BN_CLICKED

			if (nCode == BN_CLICKED){
				if(nCtrlID==IDC_BUTTON_8){
					int a=MessageBox(hWnd,"你真的要退出PPT翻页程序吗?","关闭提示",MB_ICONWARNING|MB_OKCANCEL);
					if(a==1||a==6){
						if(FindProcess("当运行PowerPoint时自启动模块.exe")!=1){
							a=MessageBox(hWnd,"您已启用[当运行PowerPoint时自启动],如果现在关闭翻页程序但是打开了PPT播放软件会导致再开回来。你是否希望"
							"禁用[当运行PowerPoint时自启动]并退出(是),或者取消退出(取消)?或者坚持退出(否)?","关闭提示",MB_ICONWARNING|MB_YESNOCANCEL);
							if(a==6){
								system("taskkill /f /im 当运行PowerPoint时自启动模块.exe");
								PostQuitMessage(114514);
							}if(a==7) PostQuitMessage(114514);
						}else PostQuitMessage(114514);
					}
				}else if(nCtrlID==IDC_BUTTON_1){
					if(autoalttab)alttab();
					keybd_event(VK_UP,0,0,0);
					keybd_event(VK_UP,0,KEYEVENTF_KEYUP,0);
				}else if(nCtrlID==IDC_BUTTON_2){
					if(autoalttab)alttab();
					keybd_event(VK_CONTROL,0,0,0);//按下Ctrl键
					keybd_event(80,0,0,0);//P
					keybd_event(VK_CONTROL,0,KEYEVENTF_KEYUP,0);//松开Ctrl键
					keybd_event(80,0,KEYEVENTF_KEYUP,0);//P
				}else if(nCtrlID==IDC_BUTTON_3){
					if(autoalttab)alttab();
					keybd_event(VK_CONTROL,0,0,0);//按下Ctrl键
					keybd_event(69,0,0,0);//E
					keybd_event(VK_CONTROL,0,KEYEVENTF_KEYUP,0);//松开Ctrl键
					keybd_event(69,0,KEYEVENTF_KEYUP,0);//E
				}else if(nCtrlID==IDC_BUTTON_4){
					if(autoalttab)alttab();
					keybd_event(69,0,0,0);//E
					keybd_event(69,0,KEYEVENTF_KEYUP,0);//E
				}else if(nCtrlID==IDC_BUTTON_5){
					if(autoalttab)alttab();
					keybd_event(VK_DOWN,0,0,0);
					keybd_event(VK_DOWN,0,KEYEVENTF_KEYUP,0);
				}else if(nCtrlID==IDC_BUTTON_6){
					if(autoalttab)alttab();
					keybd_event(VK_SHIFT,0,0,0);
					keybd_event(VK_F5,0,0,0);
					keybd_event(VK_F5,0,KEYEVENTF_KEYUP,0);
					keybd_event(VK_SHIFT,0,KEYEVENTF_KEYUP,0);
				}else if(nCtrlID==IDC_BUTTON_7){
					if(autoalttab)alttab();
					keybd_event(VK_ESCAPE,0,0,0);
					keybd_event(VK_ESCAPE,0,KEYEVENTF_KEYUP,0);
				}else if(nCtrlID==IDC_BUTTON_9){
					int a=MessageBox(hWnd,"PPT翻页程序 版本:v1.31\n作者:cat6993(肖昊霖同学)\n按“否”进入设置","关于“PPT翻页”",MB_ICONINFORMATION|MB_YESNO);
					if(a==7){
						a=MessageBox(hWnd,"是否修改[按下按键时自动Alt+Tab]?\n是:启用  否:禁用  取消:不修改","设置-PPT翻页",MB_ICONQUESTION|MB_YESNOCANCEL);
						if(a==6){
							autoalttab=1;
							MessageBox(hWnd,"成功启用[按下按键时自动Alt+Tab]!","设置-PPT翻页",MB_ICONINFORMATION|MB_OK);
						}else if(a==7){
							autoalttab=0;
							MessageBox(hWnd,"成功禁用[按下按键时自动Alt+Tab](警告:禁用该选项可能无法使用软件!)!","设置-PPT翻页",MB_ICONINFORMATION|MB_OK);
						}
						a=MessageBox(hWnd,"是否修改[开机自启动]?\n是:启用  否:禁用  取消:不修改","设置-PPT翻页",MB_ICONQUESTION|MB_YESNOCANCEL);
						if(a==6){
							StartWhenPowerOn=1;
							int b=MessageBox(hWnd,"添加开机自启动失败!请重试!","设置-PPT翻页",MB_ICONERROR|MB_ABORTRETRYIGNORE);
							while(b==4)b=MessageBox(hWnd,"添加开机自启动失败!请重试!","设置-PPT翻页",MB_ICONERROR|MB_ABORTRETRYIGNORE);
						}else if(a==7){
							StartWhenPowerOn=0;
							MessageBox(hWnd,"成功禁用[开机自启动]!","设置-PPT翻页",MB_ICONINFORMATION|MB_OK);
						}
						a=MessageBox(hWnd,"是否修改[当运行PowerPoint时自启动]?\n是:启用  否:禁用  取消:不修改","设置-PPT翻页",MB_ICONQUESTION|MB_YESNOCANCEL);
						if(a==6){
							StartWhenPlayPPT=1;
							WinExec("当运行PowerPoint时自启动模块.exe",SW_SHOWMINIMIZED);
							MessageBox(hWnd,"成功启用[当运行PowerPoint时自启动]!","设置-PPT翻页",MB_ICONINFORMATION|MB_OK);
						}else if(a==7){
							StartWhenPlayPPT=0;
							system("taskkill /f /im 当运行PowerPoint时自启动模块.exe");
							MessageBox(hWnd,"成功禁用[当运行PowerPoint时自启动]!","设置-PPT翻页",MB_ICONINFORMATION|MB_OK);
						}
					}
				}
			}
			break;
		}
		case WM_PAINT:
			hdc = BeginPaint(hWnd, &ps);
			TextOut(hdc, 1, 1, greeting, _tcslen(greeting));
			EndPaint(hWnd, &ps);
			break;
		case WM_DESTROY:
			PostQuitMessage(0);
			break;
		default:
			return DefWindowProc(hWnd, uMsg, wParam, lParam);
			break;
		}
	return 0;
}
int WINAPI WinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance, LPSTR lpCmdLine, int nCmdShow){
	//第一步:注册窗口类,指定窗口类的名称与窗口回调函数
	WNDCLASSEX wcex = { 0 };
	wcex.cbSize = sizeof(WNDCLASSEX);
	wcex.lpfnWndProc = WindowProc;
	wcex.lpszClassName = szWindowClass;
	if (!RegisterClassEx(&wcex)){
		MessageBox(NULL, _T("注册窗口失败"), _T("(☆▽☆)"), NULL);
		return 1;
	}
	//第二步:创建窗口,指定注册窗口类,窗口标题,窗口的大小
	HWND hWnd = CreateWindow(
		szWindowClass,
		szTitle,//WOW!!! WS_MAXIMIZE|WS_POPUPWINDOW:全屏占用!!!
		WS_POPUPWINDOW|WS_VISIBLE,//WS_OVERLAPPEDWINDOW-normal WS_EX_APPWINDOW && WS_EX_WINDOWEDGE -noX WS_POPUPWINDOW-noCtrlBar
		500, 300,//位置
		75, 320,//大小
		NULL,NULL,
		hInstance,NULL);
	HWND hWnd2 = CreateWindow(
		szWindowClass,
		szTitle,//WOW!!! WS_MAXIMIZE|WS_POPUPWINDOW:全屏占用!!!
		WS_POPUPWINDOW|WS_VISIBLE,//WS_OVERLAPPEDWINDOW-normal WS_EX_APPWINDOW && WS_EX_WINDOWEDGE -noX WS_POPUPWINDOW-noCtrlBar
		500, 300,//位置
		75, 320,//大小
		NULL,NULL,
		hInstance,NULL);
	if (!hWnd||!hWnd2){
		MessageBox(NULL, _T("无法打开应用,请重试!"), _T("(☆▽☆)"), NULL);
		return 1;
	}
	//第一种方式:在这里创建子窗口或者控件 CreateWindow
	//第三步:显示窗口
	ShowWindow(hWnd, nCmdShow);
	SetWindowPos(hWnd,HWND_TOPMOST,0,(screeny/2)-170,75,320,0);
	SetWindowPos(hWnd2,HWND_TOPMOST,screenx-75,(screeny/2)-170,75,320,0);
	// 第四步:开始消息循环
	MSG msg = { 0 };
	while (GetMessage(&msg, NULL, 0, 0)){
		TranslateMessage(&msg);
		DispatchMessage(&msg);//消息分发
	}
	return (int)msg.wParam;
}

我还编写了让这个程序只在PPT打开时才显示窗口,方法是循环后台读取进程,代码:

//编写环境:DEV C++ IDE 6.7.5
#include <windows.h>
#include <tchar.h>
#include <commctrl.h>
#include <iostream>
#include <filesystem>
#define KEY_DOWN(VK_NONAME) ((GetAsyncKeyState(VK_NONAME) & 0x8000) ? 1:0)
using namespace std;
#include <tlhelp32.h> //头文件
#include<tchar.h>
TCHAR Process[] = _T("process.exe");//需要先定义
TCHAR pptt[]="POWERPNT.EXE";
TCHAR ppthealper[]="PPT辅助程序.exe";
TCHAR wps[]="wps.exe";
int isopen=0,oldisopen=0;
DWORD pid=1,oldpid=1;
DWORD FindProcess(TCHAR Name[]) //调用时传入Process
{
	DWORD ID = 1; //PID为0是系统的进程,不存在PID为1的进程
	PROCESSENTRY32 pe;
	pe.dwSize = sizeof(PROCESSENTRY32);
	HANDLE hSnap = CreateToolhelp32Snapshot(TH32CS_SNAPPROCESS, 0);
	if (Process32First(hSnap, &pe))
	{
		do
		{
			if (lstrcmpi(Name, pe.szExeFile) == 0)//进程存在的条件
			{
				ID = pe.th32ProcessID;
				break;
			}
		} while (Process32Next(hSnap, &pe));
	}
	CloseHandle(hSnap);
	return ID;
}
int main(){
	cout<<"欢迎使用PPT翻页程序[当运行PowerPoint时自启动]模块!";
	/*isopen事件表
	0:没有办公软件运行
	1:微软PPT运行中
	2:WPS运行中
	3:都在运行*/
	int isppthelperopen=0;
	bool noendhelper=0;
	while(1){
		if(FindProcess(ppthealper)!=1) isppthelperopen=1;
		else isppthelperopen=0;
		if(FindProcess(wps)!=1&&FindProcess(pptt)!=1) isopen=3;
		else if(FindProcess(pptt)!=1) isopen=1;
		else if(FindProcess(wps)!=1) isopen=2;
		else isopen=0;
		if(isopen&&!isppthelperopen){
			noendhelper=0;
			WinExec(ppthealper,SW_NORMAL);
		}else if(!isopen&&isppthelperopen&&!noendhelper){
			int a=MessageBox(GetForegroundWindow(),"当前没有PPT播放软件正在运行,但是PPT翻页程序正在运行,"
			"你是否希望关闭翻页程序?","PPT翻页程序-[当运行PowerPoint时自启动]模块",MB_ICONQUESTION|MB_YESNO);
			if(a==6) system("taskkill /f /im PPT辅助程序.exe");
			else noendhelper=1;
		}
	}
}

——————————END——————————

重要事情说三遍:

未经作者允许严禁搬运!!!

未经作者允许严禁搬运!!!

未经作者允许严禁搬运!!!

感谢您的阅读,别忘了点个赞哦!作者:cat6993

已编译文件下载:https://download.csdn.net/download/weixin_69784410/90245036

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值