设为首页 加入收藏

TOP

Windows编程 - 开启/关闭/遍历程序的类 代码(C++)
2015-07-24 06:37:18 】 浏览:4814
Tags:Windows 编程 开启 关闭 程序 代码

开启/关闭/遍历程序的类 代码(C++)

类包含4个函数, 启动程序, 遍历所有进程, 关闭程序, 遍历进程依赖的动态链接库.

示例: Image.exe是预先生成的可执行程序(exe), 启动程序, 间隔5秒, 关闭程序.

使用方法参加测试程序.

代码:

/*
 * process.h
 *
 *  Created on: 2014.06.08
 *      Author: Spike
 */

/*vs 2012*/

#ifndef TRAVERSEPROCESSMODEL_H
#define TRAVERSEPROCESSMODEL_H

#include 
  
   
#include 
   
     #include 
    
      #include
      #include <windows.h> #include 
      
        //snapshot class Process { public: bool startProcess (const std::string _name); bool terminateProcess (const std::string _name); bool traverseModels (const std::string _name); bool traverseProcesses (std::map
       
        & _nameID); }; #endif //TRAVERSEPROCESSMODEL_H /* * process.cpp * * Created on: 2014.06.08 * Author: Spike */ /*vs 2012*/ #include process.h using namespace std; bool Process::startProcess (const std::string name) { STARTUPINFO si; //参数设置 memset(&si, 0, sizeof(STARTUPINFO)); si.cb = sizeof(STARTUPINFO); si.dwFlags = STARTF_USESHOWWINDOW; si.wShowWindow = SW_SHOW; PROCESS_INFORMATION pi; //参数结束 /*printf(Please enter the name of process to start:); std::string name; cin >> name;*/ if (!CreateProcessA(NULL, (LPSTR)name.c_str(), NULL, NULL, FALSE, 0,NULL,NULL,&si,&pi)) { cout<
        
         & _nameID) { PROCESSENTRY32 pe32; pe32.dwSize = sizeof(pe32); HANDLE hProcessSnap = CreateToolhelp32Snapshot(TH32CS_SNAPPROCESS, 0); if (hProcessSnap == INVALID_HANDLE_VALUE) { std::cout << CreateToolhelp32Snapshot Error! << std::endl;; return false; } BOOL bResult =Process32First(hProcessSnap, &pe32); while(bResult) { std::string name = pe32.szExeFile; int id = pe32.th32ProcessID; //std::cout << Process Name: << name << << ProcessID: << id<< std::endl; _nameID.insert(std::pair
         
          (name, id)); //字典存储 bResult = Process32Next(hProcessSnap,&pe32); } CloseHandle(hProcessSnap); return true; } bool Process::terminateProcess (const std::string _name) { std::map
          
            nameID; if (!traverseProcesses(nameID)) { cout << Traverse Processes Error! << endl; } DWORD dwId; /*printf(Please enter the name of process to terminal:); std::string name; cin >> name;*/ dwId = nameID[_name]; BOOL bRet = FALSE; HANDLE hProcess = OpenProcess(PROCESS_TERMINATE, FALSE, dwId); if(hProcess != NULL) bRet = TerminateProcess(hProcess, 0); CloseHandle(hProcess); if(bRet){ std::cout << Terminate Process Success! << std::endl; } else { std::cout << Terminate Process Error! << std::endl; return false; } return true; } bool Process::traverseModels (const std::string _name) { std::map
           
             nameID; if (!traverseProcesses(nameID)) { cout << Traverse Processes Error! << endl; } DWORD dwId; /*printf(Please enter the name of process to traverse processmodels:); std::string name; cin >> name;*/ dwId = nameID[_name]; HANDLE hModuleSnap = CreateToolhelp32Snapshot(TH32CS_SNAPMODULE, dwId); if(hModuleSnap == INVALID_HANDLE_VALUE){ printf(CreateToolhelp32SnapshotError! ); return false; } MODULEENTRY32 module32; module32.dwSize = sizeof(module32); BOOL bResult = Module32First(hModuleSnap, &module32); while(bResult){ std::wcout << Module: << std::left << std::setw(25) << module32.szModule << << endl << Path: << module32.szExePath << std::endl; bResult = Module32Next(hModuleSnap, &module32); } CloseHandle(hModuleSnap); return true; } 
           
          
         
        
       
      
    
   
  

测试代码:

/*
 * main.cpp
 *
 *  Created on: 2014.06.08
 *      Author: Spike
 */

/*vs 2012*/

#include process.h

using namespace std;

int main(void)
{
	Process tpm;

	const std::string name = D:/Test/Image.exe;
	const std::string programme = Image.exe;

	if (!tpm.startProcess(name)) {
		cout << Start Processe Error! << endl;
	}

	Sleep(5000);

	if(!tpm.terminateProcess(programme)){
		cout << Terminate Process Error! << endl;
	}

	return 0;
}

输出:

/

/

】【打印繁体】【投稿】【收藏】 【推荐】【举报】【评论】 【关闭】 【返回顶部
上一篇HDU1219--AC Me 下一篇poj 3270 Cow Sorting(初涉置换群)

最新文章

热门文章

Hot 文章

Python

C 语言

C++基础

大数据基础

linux编程基础

C/C++面试题目