zoukankan      html  css  js  c++  java
  • 第三例:禁用程序

    这个程序是我再重新再看这本书时,想起的以前写过的一个这样的程序,如今想起来觉得也是很好,因为此处这个程序完美的融合了前面的知识点。

    介绍一下,这个程序书上没有的,我想到这个可以后台运行用来持续关闭掉任意一个程序,只要知道程序名字,格式如“MicrosoftEdge.exe”,就可以后台关掉这个程序,并且无法再打开,原理就是在一个循环里不断查找这个成勋是否还存在,一旦发现存在立即关闭,如果没有发现,则持续查找,此程序可以通过任务管理器后台关闭,程序没有前台框框。

    代码如下:

     1 #include<stdio.h>
     2 #include<windows.h>
     3 #include<tlhelp32.h>
     4 #include<string.h>
     5 #include<stdlib.h>
     6 //结束进程 
     7 bool TerminateProcessFromId(DWORD ProcessId)
     8 {
     9     bool bRet = false;
    10     HANDLE hProcess = ::OpenProcess(PROCESS_ALL_ACCESS,false,ProcessId);
    11     if(hProcess != NULL)
    12     {
    13         bRet = ::TerminateProcess(hProcess,0);
    14     }
    15     ::CloseHandle(hProcess);
    16     return bRet;
    17 }
    18 
    19 //通过进程名字查找进程ID 
    20 DWORD SearchProcessIdFromName(const char* p)
    21 {
    22     PROCESSENTRY32 pe32;
    23     pe32.dwSize = sizeof(pe32);
    24     DWORD ProcessIdRet =-1;
    25     if(p == NULL)
    26     {
    27         return -1;
    28     }
    29     HANDLE hProcessSnapshot = ::CreateToolhelp32Snapshot(TH32CS_SNAPPROCESS,0);
    30     bool bMore = ::Process32First(hProcessSnapshot,&pe32);
    31     while(bMore)
    32     {
    33         printf("%s
    ",pe32.szExeFile);
    34         if(strcmp(pe32.szExeFile,p) == 0)
    35         {
    36             ProcessIdRet = pe32.th32ProcessID;
    37             printf("
    
    
    ");
    38             break;
    39         }
    40         bMore = ::Process32Next(hProcessSnapshot,&pe32);
    41     }
    42     ::CloseHandle(hProcessSnapshot);
    43     return ProcessIdRet;
    44 }
    45 
    46 int main(int argc,char* argv[])
    47 {
    48     HWND hwndDos = GetForegroundWindow();//获取前台窗口句柄 
    49     char szName[30];
    50     scanf("%s",szName);
    51     ShowWindow(hwndDos,SW_HIDE);//隐藏前台窗口 
    52     while(1)//持续搜查并关闭监视的程序 
    53     {
    54         DWORD dwProcessId = SearchProcessIdFromName(szName);
    55         ::TerminateProcessFromId(dwProcessId);
    56     }
    57     return 0;
    58 }
  • 相关阅读:
    根据指定月份,打印该月份所属的季节
    求出1~100之间,既是3又是7的倍数的自然数出现的次数
    打印所有的水仙花数
    升景坊单间短期出租
    找出1000以内的所有完数
    ssh config host
    shell获取ip
    mongodb sharding 简单部署记录
    tcp转发
    openssl和Java的keytool证书相关的命令总结
  • 原文地址:https://www.cnblogs.com/FWFC/p/6357837.html
Copyright © 2011-2022 走看看