Window获取所有运行的进程

本文介绍了一个使用C++实现的任务管理器遍历方法,通过创建进程快照并遍历所有活动进程来获取进程ID和名称,并记录遍历时间。该程序利用了Windows API函数如CreateToolhelp32Snapshot和Process32First等。

通过遍历任务管理器,输出当前正在运行的进程ID和Name。

同时打印出遍历过程所消耗的时间。

/*
@Date:2014/6/8
@Author:Alex
*/

#include <iostream>
#include <string>  
#include <map>  
#include <windows.h>  
#include <TlHelp32.h>
using namespace std;

bool traverseProcesses(map<std::wstring,int> &_mapProcess)
{
    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);  
  
    int num(0);  
	
    while(bResult)   
    {  
		std::wstring name = pe32.szExeFile;  
        int id = pe32.th32ProcessID;  
 
		std::cout << "[" << ++num << "]: "<< "--ProcessID:" << id;  

		std::wcout<<"--Process Name:" << name<<endl;
  
        _mapProcess.insert(std::pair<wstring, int>(name, id)); //字典存储  
        bResult = Process32Next(hProcessSnap,&pe32);  
    }  
  
    CloseHandle(hProcessSnap);  
    return true;  
}
int main(int argc, char*argv[])
{
	map<std::wstring,int> mapProcess;
	
	DWORD start = ::GetTickCount();
	traverseProcesses(mapProcess);
	
	DWORD end = ::GetTickCount();
	cout<<"waste time:"<<end-start<<endl;
	getchar();
	return 0;
}

### 在 Windows 中通过命令以管理员身份运行Windows 操作系统中,可以通过多种方式利用命令提示符(CMD)来启动具有管理员权限程序或界面。以下是几种常见的方法。 #### 方法一:使用 `runas` 命令 `runas` 是一种允许用户以不同账户权限运行特定工具和程序的方式。例如,要以管理员身份运行 CMD,可以按照以下步骤操作: ```cmd runas /user:Administrator cmd.exe ``` 这将提示输入管理员密码,之后将以管理员权限开启一个新的 CMD 窗口[^4]。 #### 方法二:结合快捷键与运行对话框 另一种快速获取管理员权限的方法是通过系统的运行对话框配合键盘快捷键完成。具体过程如下: 1. **调出运行窗口**:按下 `Win + R` 组合键; 2. **输入命令**:在此处键入 `cmd` 字样; 3. **提升权限**:同时按住 `Ctrl + Shift + Enter` 来代替普通的回车确认,这样可以直接请求以最高权限即管理员模式执行所指定的应用程序[^3]。 #### 方法三:经由任务管理器发起 当常规手段受限时,还可以借助始终可用的任务管理器来进行更高层次的操作尝试: - 启动任务管理器可通过 `Ctrl + Shift + Esc` 快捷键达成; - 接着选择菜单项里的“文件”选项卡下的“新建任务 (N)... ”条目; - 对于希望赋予超级用户控制权的新建作业而言,在其对应的复选框中标记上“以管埋员身分运作”,最后填入欲加载的服务名称如 `explorer.exe` 或者再次回到最初的讨论对象——命令处理器实例化字符串 `cmd.exe` 即可。 --- ### 提供一段示例代码用于演示如何自动化这一流程 如果频繁需要用到这些技巧的话,不妨考虑编写一个小脚本来简化日常维护工作负担。这里给出一个简单的 VBScript 范例用来模拟上述第二种情形的效果: ```vbscript Set WshShell = CreateObject("WScript.Shell") WshShell.Run "cmd", 1, True ' 参数说明:"cmd"表示要执行的命令;第二个参数决定显示状态(最小化、最大化等),此处设为正常大小;第三个参数等待命令结束再继续。 WshShell.SendKeys "^%{ENTER}" ' 发送 Ctrl+Shift+Enter 键盘事件序列激活 UAC 请求提权 ``` 保存上面这段文字到 `.vbs` 文件当中双击即可触发整个动作链路从而获得带高特权级别的交互环境[^5]。
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值