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 }
  • 相关阅读:
    Max Function
    动态语句语法:EXEC\SP_EXECUTESQL语法(转载)
    [转帖]在SQL SERVER中实现RSA加密算法
    [转]C#实现QQ接口软件QQ的HTTP接口协议探究
    用一条sql语句删除表中所相同的记录
    SQL Server存储过程 对数组参数的循环处理
    在WinDBG中, 使用.shell命令来搜索字符串
    SharePoint提供的一些javascript函数
    IP协议里的Time To Live(TTL)
    SharePoint Application Pool的推荐设置
  • 原文地址:https://www.cnblogs.com/FWFC/p/6357837.html
Copyright © 2011-2022 走看看