win32的进程作用
Win32进程间通信的方式主要有:
(1)剪贴板(Clip Board);
(2)动态数据交换(Dynamic Data Exchange);
(3)部件对象模型(Component Object Model);
(4)文件映射(File Mapping);
(5)邮件槽(Mail Slots);
(6)管道(Pipes);
(7)Win32套接字(Socket);
(8)远程过程调用(Remote Procedure Call);
(9)WM_COPYDATA消息(WM_COPYDATA Message)。 在WIN32中,可使用在PSAPI .DLL中提供的Process status Helper函数帮助我们获取进程信息。
(1)EnumProcesses()函数可以获取进程的ID,其原型为:
BOOL EnumProcesses(DWORD * lpidProcess, DWORD cb, DWORD*cbNeeded);
参数lpidProcess:一个足够大的DWORD类型的数组,用于存放进程的ID值;参数cb:存放进程ID值的数组的最大长度,是一个DWORD类型的数据;
参数cbNeeded:指向一个DWORD类型数据的指针,用于返回进程的数目;
函数返回值:如果调用成功,返回TRUE,同时将所有进程的ID值存放在lpidProcess参数所指向的数组中,进程个数存放在cbNeeded参数所指向的变量中;如果调用失败,返回FALSE。
(2)GetModuleFileNameExA()函数可以实现通过进程句柄获取进程文件名,其原型为:
DWORD GetModuleFileNameExA(HANDLE hProcess, HMODULE hModule,LPTSTR lpstrFileName, DWORD nsize);
参数hProcess:接受进程句柄的参数,是HANDLE类型的变量;
参数hModule:指针型参数,在本文的程序中取值为NULL;
参数lpstrFileName:LPTSTR类型的指针,用于接受主调函数传递来的用于存放进程名的字符数组指针;
参数nsize:lpstrFileName所指数组的长度;
函数返回值:如果调用成功,返回一个大于0的DWORD类型的数据,同时将hProcess所对应的进程名存放在lpstrFileName参数所指向的数组中;如果调用失败,则返回0。
通过下列代码就可以遍历系统中的进程,获得进程列表:
//获取当前进程总数
EnumProcesses(process_ids, sizeof(process_ids), num_processes);
//遍历进程
for (int i = 0; i < num_processes; i++)
{
//根据进程ID获取句柄
process[i] = OpenProcess(PROCESS_QUERY_INFORMATION | PROCESS_VM_READ, 0,
process_ids[i]);
//通过句柄获取进程文件名
if (GetModuleFileNameExA(process[i], NULL, File_name, sizeof(fileName)))
cout << fileName << endl;
}
免责声明:本站发布的教育资讯(图片、视频和文字)以本站原创、转载和分享为主,文章观点不代表本网站立场。
如果本文侵犯了您的权益,请联系底部站长邮箱进行举报反馈,一经查实,我们将在第一时间处理,感谢您对本站的关注!
新励学网教育平台
海量全面 · 详细解读 · 快捷可靠
累积科普文章数:18,862,126篇