以前用输入法注入的时候需要用到的代码,写的还不错,分享一下吧,顺便当个备用
view source
print?
01 //根据进程名获取进程ID
02 DWORD GetPidByProcessName(TCHAR * pProcess)
03 {
04 HANDLE hSnapshot;
05 PROCESSENTRY32 lppe;
06 //创建系统快照
07 hSnapshot = ::CreateToolhelp32Snapshot(TH32CS_SNAPPROCESS, NULL); //#include<Tlhelp32.h>
08 if (hSnapshot == NULL)
09 return 0;
10 //初始化 lppe 的大小
11 lppe.dwSize = sizeof (lppe);
12 //查找第一个进程
13 if (!::Process32First(hSnapshot, &lppe))
14 return false ;
15 do
16 {
17 if(StrCmp(lppe.szExeFile, pProcess) == 0)//#include<shlwapi.h>
18 {
19 return lppe.th32ProcessID;
20 }
21 }
22 while (::Process32Next(hSnapshot, &lppe)); //查找下一个进程
23
24 return 1;
25 }
26
27 //根据进程ID获取窗口句
柄
28 HWND GetHwndByPid(DWORD dwProcessID)
29 {
30 //返回Z序顶部的窗口句
柄
31 HWND hWnd = ::GetTopWindow(0);
32 while ( hWnd )
33 {
34 DWORD pid = 0;
35 //根据窗口句柄获取进程
ID
36 DWORD dwTheardId = ::GetWindowThreadProcessId( hWnd,&pid);
37
38 if (dwTheardId != 0)
39 {
40 if ( pid == dwProcessID )
41 {
42 return hWnd;
43 }
44 }
45 //返回z序中的前一个或后一个窗口的句
柄
46 hWnd = ::GetNextWindow(hWnd , GW_HWNDNEXT);
47 }
48 return hWnd;
49 }
50 //前端显示并置顶窗口
51 void ShowForeGround(HWND hWnd)
52 {
53 if (hWnd)
54 {
55 //显示窗口
56 ::ShowWindow(hWnd, SW_NORMAL);
57
58 //前端显示
59 ::SetForegroundWindow(hWnd);
60
61 //窗口置顶
62 ::SetWindowPos(hWnd,HWND_TOPMOST,0,0,0,0,SWP_NOMOVE|SWP_NOSIZE);
63 }
64 else
65 {
66 ::MessageBox(NULL, _T("未找到窗口"), _T("提示"),MB_OK);
67 }
68 }
69 void main()
70 {
71 // TODO: 在此添加控件通知处理程序代码
72 DWORD dwPid = GetPidByProcessName(_T("notepad.exe"));
73 HWND hWnd = GetHwndByPid(dwPid);
74 ShowForeGround(hWnd);
75 }。