如何在已知进程名称和id的情况下激活该进程对应的窗口?
我用下面这段代码,取到了进程"3SConf.exe"的进程ID:
DWORD dwProc[1024], dwLen = 0;
EnumProcesses(dwProc, sizeof(dwProc), &dwLen);
for (DWORD i = 1; i < dwLen / sizeof(DWORD); i++)
{
HANDLE hProc;
TCHAR szProcessName [256] = {0};
HMODULE ahMod[10];
DWORD dwNeeded;
hProc = OpenProcess (PROCESS_ALL_ACCESS,FALSE,dwProc[i]);
if (hProc)
{
if (EnumProcessModules (hProc, ahMod, sizeof(ahMod), &dwNeeded))
{
if (GetModuleBaseName(hProc, ahMod[0], szProcessName, sizeof(szProcessName))){
if (strcmp(szProcessName,_T("3SConf.exe"))==0) {
EnumWindows(EnumWindowsProc,0);
}
TRACE("Proc: %ld :%s\n", dwProc[i], szProcessName);
}
}
CloseHandle (hProc);
}
}
其中EnumWindows(EnumWindowsProc,dwProc[i])是自己写的回调函数:
BOOL CALLBACK _stdcall EnumWindowsProc(HWND hWnd,LPARAM lParam)
{
DWORD ProcID = 0;
GetWindowThreadProcessId(hWnd,&ProcID);
if(ProcID == lParam)
{
HWND pWnd = hWnd;
while(GetParent(pWnd)!=NULL)
pWnd = GetParent(pWnd);
SetActiveWindow(pWnd);
}
return TRUE;
}
执行结果,能够在遍历到3SConf.exe的进程的时候进入回调函数,也能执行到SetActiveWindow这句话,可是并没有激活3SConf.exe的窗口,请问应该怎么写才对?
谢谢!
问题点数:50、回复次数:4Top
1 楼kingzai(stevenzhu)回复于 2004-11-01 19:53:55 得分 45
SetForegroundWindow
BringWindowToTop试一下
Top
2 楼ttzzgg_80713_()回复于 2004-11-01 20:11:10 得分 0
窗口调为前台不容易成功。我作个记号。你用楼上的试一下Top
3 楼oyljerry(【勇敢的心】→ ㊣提拉米苏√㊣)回复于 2004-11-01 21:59:06 得分 0
ShowWindow()Top
4 楼cx0928(阳光)回复于 2004-11-04 10:59:26 得分 5
BringWindowToTopTop




