Windows API ——CreateToolhelp32Snapshot——查找进程

来源:互联网 发布:mac 网页关闭 复原 编辑:程序博客网 时间:2024/05/01 19:08
 1 //根据进程名获取进程ID 2 DWORD GetPidByProcessName(TCHAR *pProcess)  3 {  4     HANDLE hSnapshot;  5     PROCESSENTRY32 lppe;  6     //创建系统快照  7     hSnapshot = ::CreateToolhelp32Snapshot(TH32CS_SNAPPROCESS, NULL); //#include<Tlhelp32.h> 8  9     if (hSnapshot == NULL) 10         return 0; 11 12     //初始化 lppe 的大小 13     lppe.dwSize = sizeof(lppe); 14 15     //查找第一个进程 16     if (!::Process32First(hSnapshot, &lppe))17         return false; 18     do 19     { 20         if(StrCmp(lppe.szExeFile, pProcess) == 0)//#include<shlwapi.h>21         { 22             return lppe.th32ProcessID;23         }   24     } 25     while (::Process32Next(hSnapshot, &lppe)); //查找下一个进程  26 27     return 1;28 }29 30 //根据进程ID获取窗口句柄31 HWND GetHwndByPid(DWORD dwProcessID)32 {33     //返回Z序顶部的窗口句柄34     HWND hWnd = ::GetTopWindow(0);35 36     while ( hWnd )37     {38         DWORD pid = 0;39         //根据窗口句柄获取进程ID40         DWORD dwTheardId = ::GetWindowThreadProcessId( hWnd,&pid);41 42         if (dwTheardId != 0)43         {44             if ( pid == dwProcessID )45             {46                 return hWnd;47             }48         }49         //返回z序中的前一个或后一个窗口的句柄50         hWnd = ::GetNextWindow(hWnd , GW_HWNDNEXT);51 52     }53     return hWnd;54 }55 56 //前端显示并置顶窗口57 void ShowForeGround(HWND hWnd)58 {59 60     if (hWnd)61     {62         //显示窗口63         ::ShowWindow(hWnd, SW_NORMAL);64 65         //前端显示66         ::SetForegroundWindow(hWnd);67 68         //窗口置顶69         ::SetWindowPos(hWnd,HWND_TOPMOST,0,0,0,0,SWP_NOMOVE|SWP_NOSIZE);70     }71     else72     {73         ::MessageBox(NULL, _T("未找到窗口"), _T("提示"),MB_OK);74     }75 }76 77 void CMFCApplication1Dlg::OnBnClickedMfcbutton1()78 {79     // TODO: 在此添加控件通知处理程序代码80     DWORD dwPid = GetPidByProcessName(_T("notepad.exe"));81     HWND hWnd = GetHwndByPid(dwPid);82     ShowForeGround(hWnd);83 }