win32 启动和结束进程
来源:互联网 发布:数据分析兼职平台 编辑:程序博客网 时间:2024/05/17 21:06
CreateProcess函数的最后一个参数是一个指向PROCESS_INFORMATION结构体的指针,该结构的成员可以保存被创建进程的ID和句柄。
新建按钮资源
typedef struct _PROCESS_INFORMATION { HANDLE hProcess; //进程的句柄 HANDLE hThread; //主线程的句柄 DWORD dwProcessId; //进程ID DWORD dwThreadId; //主线程ID } PROCESS_INFORMATION, *PPROCESS_INFORMATION, *LPPROCESS_INFORMATION;
CreateProcess函数的最后两个参数都是指针,因此我们在使用时,要先定义STARTUPINFO和PROCESS_INFORMATION类型的变量,并使用ZeroMemory函数将其成员初始化。ZeroMemory函数可以将一段内存中的数据初始化为0.
PROCESS_INFORMATION pro_info; //进程信息 STARTUPINFO sti; //启动信息 //...... // 初始化两个结构体 ZeroMemory(&pro_info, sizeof(PROCESS_INFORMATION)); ZeroMemory(&sti, sizeof(STARTUPINFO));
接着调用CreateProcess创建进程.
CreateProcess(L"C:\\Windows\\System32\\calc.exe",NULL,NULL,NULL,FALSE,0,NULL,NULL,&sti,&pro_info);
调用成功后,PROCESS_INFORMATION结构体的hProcess就保存了被创建的进程的句柄了。
要结束进程,调用TerminateProcess函数,第一个参数就是刚才创建的时程的句柄,第二个参数是退出码,通过GetExitCodeProcess函数可以获取。
DWORD exitCode; //退出码 //......... GetExitCodeProcess(pro_info.hProcess,&exitCode); //获取退出码 TerminateProcess(pro_info.hProcess, exitCode); // 关闭句柄 CloseHandle(pro_info.hThread); CloseHandle(pro_info.hProcess);
再介绍一个在应用程序中运行其他程序的方法,那就是使用Shell函数——ShellExecute。
HINSTANCE ShellExecute( _In_opt_ HWND hwnd, _In_opt_ LPCTSTR lpOperation, _In_ LPCTSTR lpFile, _In_opt_ LPCTSTR lpParameters, _In_opt_ LPCTSTR lpDirectory, _In_ INT nShowCmd );
我们这里只是运行一个程序,没有其他操作,所以,带 In_opt的可选参数可以直接NULL,lpFile指定我们要运行程序的路径,如果是一个exe文件,那lpParameters可以指定命令行参数,但我们这里不需要,所以继续NULL,最后一个参数好理解,和ShowWindow函数一样。
于是,用ShellExecute函数打开记事本程序,当然记得包含shellapi.h。
ShellExecute(NULL,NULL,L"C:\\Windows\\System32\\notepad.exe",NULL,NULL,SW_SHOWNORMAL);
对话框中完整代码
INT_PTR CALLBACK DlgProc(HWND hDlg, UINT msg, WPARAM wParam, LPARAM lParam){ switch (msg) { int wmId, wmEvent; case WM_COMMAND: { wmId = LOWORD(wParam); wmEvent = HIWORD(wParam); switch (wmId) { case 1000: { PROCESS_INFORMATION pro_info; //进程信息 STARTUPINFO sti; //启动信息 //...... // 初始化两个结构体 ZeroMemory(&pro_info, sizeof(PROCESS_INFORMATION)); ZeroMemory(&sti, sizeof(STARTUPINFO)); /*sti.cb = sizeof(STARTUPINFO); sti.dwFlags = STARTF_USESHOWWINDOW; sti.wShowWindow = SW_SHOW;*/ CreateProcess(L"C:\\Windows\\System32\\calc.exe", NULL, NULL, NULL, FALSE, 0, NULL, NULL, &sti, &pro_info); } break; case 1001: { PROCESS_INFORMATION pro_info; //进程信息 STARTUPINFO sti; //启动信息 //...... // 初始化两个结构体 ZeroMemory(&pro_info, sizeof(PROCESS_INFORMATION)); ZeroMemory(&sti, sizeof(STARTUPINFO)); DWORD exitCode; //退出码 //......... GetExitCodeProcess(pro_info.hProcess, &exitCode); //获取退出码 TerminateProcess(pro_info.hProcess, exitCode); // 关闭句柄 CloseHandle(pro_info.hThread); CloseHandle(pro_info.hProcess); } break; case 1002: { ShellExecute(NULL, NULL, L"C:\\Windows\\System32\\notepad.exe", NULL, NULL, SW_SHOWNORMAL); } default: return DefWindowProc(hDlg, msg, wParam, lParam); } } } return (INT_PTR)FALSE;}
0 0
- win32 启动和结束进程
- 启动和结束进程
- 跟我一起玩Win32开发(17):启动和结束进程
- 启动和等待进程结束
- C# 启动和结束进程
- 启动和等待进程结束
- VC获取进程启动和结束时间
- VC获取进程启动和结束时间
- VC获取进程启动和结束时间
- Erlang 督程 启动和结束子进程
- c#启动和结束外部进程
- 在VC中如何结束进程和启动新进程?
- 在VC中如何结束进程和启动新进程?
- 在VC中如何结束进程和启动新进程?
- 在VC中如何结束进程和启动新进程
- 在VC中如何结束进程和启动新进程?
- 在VC中如何结束进程和启动新进程?
- VC中如何结束进程和启动新进程
- 嗯
- ReactJS 傻瓜教程
- SQL 触发器
- 已知一个数组 20 个元素(随机 1 到 100 之间包含 1 和 100),求大于平均数的元素个数,并动态生成一个新数组保存
- LeetCode:Excel Sheet Column Number
- win32 启动和结束进程
- Leetcode--easy系列6
- XAMPP本地访问慢
- Objective-C类的定义详解与实例
- iOS-KVO究竟怎么用
- Android---59---Toast的使用
- HLJU周赛5解题报告
- 版本控制工具总结
- iOS学习笔记(3)UIButton