C#关闭VM进程的方法见2.1.6,C++代码如下:
1. C++
2.
3. BOOL CcodehDlg::KillProcessByName(std::string & processName)
4. {
5. BOOL bRet = FALSE;
6. HANDLE SnapShot, ProcessHandle;
7. SHFILEINFO shSmall;
8. PROCESSENTRY32 ProcessInfo;
9. ProcessInfo.dwSize = sizeof(PROCESSENTRY32);
10.
11. string strSearchName;
12. string strRunProcessName;
13. //get the process list in the snapshot.
14. SnapShot = CreateToolhelp32Snapshot(TH32CS_SNAPPROCESS, 0);
15. if (SnapShot != NULL)
16. {
17. //提升升级工具进程权限为SE_DEBUG_NAME,否则XP下无法杀掉进程
18. HANDLE hToken;
19. if (OpenProcessToken(GetCurrentProcess(), TOKEN_ALL_ACCESS, &hToken))
20. {
21. LUID luid;
22. if (LookupPrivilegeValue(NULL, SE_DEBUG_NAME, &luid))
23. {
24. TOKEN_PRIVILEGES TokenPrivileges;
25. TokenPrivileges.PrivilegeCount = 1;
26. TokenPrivileges.Privileges[0].Attributes = SE_PRIVILEGE_ENABLED;
27. TokenPrivileges.Privileges[0].Luid = luid;
28. AdjustTokenPrivileges(hToken, FALSE, &TokenPrivileges, 0, NULL, NULL);
29. }
30. CloseHandle(hToken);
31. }
32.
33. BOOL Status = Process32First(SnapShot, &ProcessInfo);
34. while (Status)
35. {
36. // 获取进程文件信息
37. SHGetFileInfo(ProcessInfo.szExeFile, 0, &shSmall, sizeof(shSmall), SHGFI_ICON | SHGFI_SMALLICON);
38.
39. // 检测进程是否需要关闭
40. TCHAR tszProcess[64] = { 0 };
41. lstrcpy(tszProcess, LPCWSTR(processName.c_str()));
42. if (lstrcmp(tszProcess, ProcessInfo.szExeFile) == 0)
43. {
44. //if (processName == string::fromWCharArray(ProcessInfo.szExeFile)) {
45. // 获取进程句柄,强行关闭
46.
47. MessageBoxA(NULL, "杀死进程成功", "杀死进程成功", MB_OK);
48. ProcessHandle = OpenProcess(PROCESS_ALL_ACCESS, FALSE, ProcessInfo.th32ProcessID);
49. if (ProcessHandle != NULL)
50. {
51. bRet = TerminateProcess(ProcessHandle, 1);
52. CloseHandle(ProcessHandle);
53. }
54. }
55. // 获取下一个进程的信息
56. Status = Process32Next(SnapShot, &ProcessInfo);
57. }
58. }
59. return bRet;
60. }
基于C++OpenCV实现VisionMaster中的“直线边缘缺陷检测”
2024-03-04 09:41:20