当前位置:新励学网 > 秒知问答 > win32的进程作用

win32的进程作用

发表时间:2024-07-28 12:36:36 来源:网友投稿

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;

}

免责声明:本站发布的教育资讯(图片、视频和文字)以本站原创、转载和分享为主,文章观点不代表本网站立场。

如果本文侵犯了您的权益,请联系底部站长邮箱进行举报反馈,一经查实,我们将在第一时间处理,感谢您对本站的关注!