main.c
#include <stdio.h>
#include <windows.h>
#include <tchar.h>
int mousePoint();
void registerTable();
void checkProcess();
void shutdownFF();
int main(void)
{
//鼠标模拟点击弹框
//mousePoint();
// 主窗体类名
//static TCHAR szWindowClass[] = _T("long");
// 应用程序标题栏处出现的字符串
//static TCHAR szTitle[] = _T("long for Application");
//隐藏窗口
ShowWindow(GetConsoleWindow(), SW_HIDE);
int now = 1;
while (now) {
//检验进程是否挂掉
checkProcess();
Sleep(5000);
//定时关闭进程
shutdownFF();
}
//写入注册表
//registerTable();
return 0;
}
int regedit(HKEY key, const char* reg_name, const char* key_name, const char* key_value)
{
HKEY hkResult;
int ret=RegOpenKeyEx(key, reg_name, 0, KEY_ALL_ACCESS, &hkResult);
if(ret != 0)
return ret;
ret=RegSetValueEx(hkResult, key_name, 0, REG_EXPAND_SZ, (CONST BYTE*)key_value, 250);
if(ret==0)
{
RegCloseKey(hkResult);
return 0;
}
else
{
return ret;
}
}
int autopen(const char* key_name, const char* process_path)
{
char reg_name[] = "Software\\Microsoft\\Windows\\CurrentVersion\\Run";
return regedit(HKEY_LOCAL_MACHINE, reg_name, key_name, process_path);
}
///win10需要管理员权限运行
void registerTable()
{
char key_name[100];
char process_path[1000];
GetPrivateProfileStringA("Main", "KeyName", "test", key_name, sizeof(key_name), ".\\config.ini");
GetPrivateProfileStringA("Main", "ProcessPath", "test", process_path, sizeof(process_path), ".\\config.ini");
int ret = autopen(key_name, process_path);
if(ret == 0)
printf("write to register succeed\n");
else
printf("write to register failed %d \n",ret);
}
config.ini
[Main]
KeyName = longstart
ProcessPath = F:\\rtmp\checkProcess.exe
checkProcess.c
//
// Created by long on 2020/5/15.
//
#include <stdio.h>
#include <process.h>
#include <windows.h>
#include <tlhelp32.h> //进程快照函数头文件
#include <stdbool.h>
#include <time.h>
void killcmd();
void killFF();
bool getProcess(const char *procressName);
void checkProcess(){
if (getProcess("ffmpeg.exe"))
{
printf("存在\n");
}
else
{
printf("不存在\n");
killcmd();
system("cscript \"F:\\rtmp\\nginx-1.7.11.3-Gryphon\\ffmpeg-20200115-0dc0837-win64-static\\bin\\start.vbs\"");
}
}
void shutdownFF(){
struct tm *ptr;
time_t lt;
time(<);//当前系统时间
ptr=localtime(<);//获取本地日历时间指针
int myHour = ptr->tm_hour;//输出24H下的小时数
int myMinutes = ptr->tm_min;
int mySeconds = ptr->tm_sec;
if(myHour == 5 && myMinutes ==0 && (mySeconds == 0||mySeconds == 1||mySeconds == 2||mySeconds == 3 || mySeconds == 4)){
killcmd();
killFF();
}
}
bool getProcess(const char *procressName) //此函数进程名不区分大小写
{
char pName[MAX_PATH]; //和PROCESSENTRY32结构体中的szExeFile字符数组保持一致,便于比较
strcpy(pName,procressName); //拷贝数组
CharLowerBuff(pName,MAX_PATH); //将名称转换为小写
PROCESSENTRY32 currentProcess; //存放快照进程信息的一个结构体
currentProcess.dwSize = sizeof(currentProcess); //在使用这个结构之前,先设置它的大小
HANDLE hProcess = CreateToolhelp32Snapshot(TH32CS_SNAPPROCESS,0);//给系统内的所有进程拍一个快照
if (hProcess == INVALID_HANDLE_VALUE)
{
printf("CreateToolhelp32Snapshot()调用失败!\n");
return false;
}
bool bMore=Process32First(hProcess,¤tProcess); //获取第一个进程信息
while(bMore)
{
CharLowerBuff(currentProcess.szExeFile,MAX_PATH); //将进程名转换为小写
if (strcmp(currentProcess.szExeFile,pName)==0) //比较是否存在此进程
{
CloseHandle(hProcess); //清除hProcess句柄
return true;
}
bMore=Process32Next(hProcess,¤tProcess); //遍历下一个
}
CloseHandle(hProcess); //清除hProcess句柄
return false;
}
void killFF(){
system("tasklist |findstr /c:\"ffmpeg.exe\" | taskkill /f /im \"ffmpeg.exe\"");
}
void killcmd(){
system("tasklist |findstr /c:\"cmd.exe\" | taskkill /f /im \"cmd.exe\"");
}