VC中如何获得其他进程的窗口句柄?

例如我已经通过方法将当前的所有进程ID获得了,怎么根据这个ID获得它的窗口句柄。特别是要魔兽这样的全屏游戏也要有效。注:最好不用MFC描述;要VC/VC++的,最好。... 例如我已经通过方法将当前的所有进程ID获得了,怎么根据这个ID获得它的窗口句柄。特别是要魔兽这样的全屏游戏也要有效。
注:最好不用MFC描述;要VC/VC++的,最好。
展开
 我来答
匿名用户
2009-04-14
展开全部
HWND nhWnd[10];
int count;

BOOL CALLBACK EnumWndProc(HWND hwnd, LPARAM lParam)
{
DWORD dwID ;

GetWindowThreadProcessId(hwnd, &dwID) ;

if (dwID == (DWORD)lParam && IsWindowVisible(hwnd) && GetParent(hwnd) == NULL)
{
nhWnd[count++] = hwnd;
}

return (count == 10) ? false : true;
}

void GetProcessTopWindows(DWORD dwPID)
{
count = 0;
EnumWindows((WNDENUMPROC)EnumWndProc, (LPARAM)dwPID);
}

GetProcessTopWindows(dwPID)//dwPID进程句柄
将属于 dwPID进程的所有顶层可见窗口句柄保存到nhWnd 中 最多 10 个
百度网友7822fe6
2009-04-14 · TA获得超过1251个赞
知道小有建树答主
回答量:2656
采纳率:0%
帮助的人:1396万
展开全部
HWND nhWnd[10];
int count;

BOOL CALLBACK EnumWndProc(HWND hwnd, LPARAM lParam)
{
DWORD dwID ;

GetWindowThreadProcessId(hwnd, &dwID) ;

if (dwID == (DWORD)lParam && IsWindowVisible(hwnd) && GetParent(hwnd) == NULL)
{
nhWnd[count++] = hwnd;
}

return (count == 10) ? false : true;
}

void GetProcessTopWindows(DWORD dwPID)
{
count = 0;
EnumWindows((WNDENUMPROC)EnumWndProc, (LPARAM)dwPID);
}

GetProcessTopWindows(dwPID)//dwPID进程句柄
将属于 dwPID进程的所有顶层可见窗口句柄保存到nhWnd 中 最多 10 个

这个方法很好。

我原来是这样写的方法也可以用,但是不是很好。

HANDLE han= ::CreateToolhelp32Snapshot(TH32CS_SNAPPROCESS,0); //取进程快照
PROCESSENTRY32 lpp;
lpp.dwSize =sizeof(PROCESSENTRY32);

BOOL bo;
bo=::Process32First(han,&lpp); //从快照里取第一个进程信息
TCHAR *str1;//*str2;

while(bo)
{
str1=lpp.szExeFile ;
//str2=_strlwr(str1);
//-----判断是否WINWORD.EXE
if(!strcmp(str1,"WINWORD.EXE") || !strcmp(str1,"WinWord.exe"))
{
HANDLE han2=::OpenProcess(PROCESS_TERMINATE,TRUE,lpp.th32ProcessID); //取进程实例
::TerminateProcess(han2 ,0); //关闭
}
//-----
bo=::Process32Next(han,&lpp); //取下一个进程信息
}

::CloseHandle(han); //关闭快照
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式