知道系统进程的ID,如何能获得该进程主窗口的句柄呢?急,最好能有原程序!谢了!

MiT 2001-05-10 10:57:00
加精
...全文
139 10 打赏 收藏 转发到动态 举报
写回复
用AI写文章
10 条回复
切换为时间正序
请发表友善的回复…
发表回复
jinxi_gao 2001-09-30
  • 打赏
  • 举报
回复
fhfdh
Brierbird 2001-06-26
  • 打赏
  • 举报
回复
FB2000的函数OK!!!解决了我的一个问题哪:)
不解 2001-05-24
  • 打赏
  • 举报
回复
如果仅仅是类型转换问题,是否可以考虑强制性类型转换。 记得第一个参数类型应该是WNDENUMPROC.
duz 2001-05-12
  • 打赏
  • 举报
回复
你在哪里用了小写的bool了?c/c++可是大小些敏感的。
不过看不到有哪里的错误会引起这个信息,而且bool类型到int类型的转化也不会引起错误信息。确认一下你的出错信息?
MiT 2001-05-11
  • 打赏
  • 举报
回复
错误信息是不能转换bool类型到int类型!
fb2000 2001-05-11
  • 打赏
  • 举报
回复
好象是BOOL CALLBACK YourEnumProc前面的中文空格引起的。
下面这段代码是测试通过后直接粘过来的。

#include "windows.h"

typedef struct tagWNDINFO
{
DWORD dwProcessId;
HWND hWnd;
} WNDINFO, *LPWNDINFO;

BOOL CALLBACK YourEnumProc(HWND hWnd, LPARAM lParam)
{
DWORD dwProcessId;
GetWindowThreadProcessId(hWnd, &dwProcessId);
LPWNDINFO pInfo = (LPWNDINFO)lParam;
if(dwProcessId == pInfo->dwProcessId)
{
pInfo->hWnd = hWnd;
return FALSE;
}
return TRUE;
}

HWND GetProcessMainWnd(DWORD dwProcessId)
{
WNDINFO wi;
wi.dwProcessId = dwProcessId;
wi.hWnd = NULL;
EnumWindows(YourEnumProc,(LPARAM)&wi);
return wi.hWnd;
}
fb2000 2001-05-11
  • 打赏
  • 举报
回复
错误消息是什么?
MiT 2001-05-11
  • 打赏
  • 举报
回复
但编译的时候在 EnumWindows这一句出错???
fb2000 2001-05-11
  • 打赏
  • 举报
回复
typedef struct tagWNDINFO
{
DWORD dwProcessId;
HWND hWnd;
} WNDINFO, *LPWNDINFO;

BOOL CALLBACK YourEnumProc(HWND hWnd,LPARAM lParam)
{
DWORD dwProcessId;
GetWindowThreadProcessId(hWnd, &dwProcessId);
LPWNDINFO pInfo = (LPWNDINFO)lParam;
if(dwProcessId == pInfo->dwProcessId)
{
pInfo->hWnd = hWnd;
return FALSE;
}
return TRUE;
}

HWND GetProcessMainWnd(DWORD dwProcessId)
{
WNDINFO wi;
wi.dwProcessId = dwProcessId;
wi.hWnd = NULL;
EnumWindows(YourEnumProc,(LPARAM)&wi);
return wi.hWnd;
}
duz 2001-05-11
  • 打赏
  • 举报
回复
一个进程可以拥有很多主窗口,也可以不拥有主窗口,所以这样的函数是不存在的,所幸的是,相反的函数是有的。
所以我们可以调用EnumWindows来判断所有的窗口是否属于这个进程。
BOOL CALLBACK YourEnumProc(HWND hwnd,LPARAM lParam)
{
DWORD dwProcessId;
GetWindowThreadProcessId(hwnd,&dwProcessId);
if(dwProcessId==(DWORD)lParam)
{
printf("Window %x is a main window of process %d\n",hwnd,lParam);
}
return TRUE;
}

EnumWindows(YourEnumProc,(LPARAM)dwProcessId);

15,471

社区成员

发帖
与我相关
我的任务
社区描述
VC/MFC 进程/线程/DLL
社区管理员
  • 进程/线程/DLL社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧