——————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