VC中如何获得其他进程的窗口句柄?
例如我已经通过方法将当前的所有进程ID获得了,怎么根据这个ID获得它的窗口句柄。特别是要魔兽这样的全屏游戏也要有效。注:最好不用MFC描述;要VC/VC++的,最好。...
例如我已经通过方法将当前的所有进程ID获得了,怎么根据这个ID获得它的窗口句柄。特别是要魔兽这样的全屏游戏也要有效。
注:最好不用MFC描述;要VC/VC++的,最好。 展开
注:最好不用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 个
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 个
展开全部
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); //关闭快照
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); //关闭快照
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询