知道一个程序的HANDLE,那麽如何知道它的窗口的CWnd或者HWND???

jxyhelen1 2003-08-26 08:55:56
请大侠们指教了,我现在知道程序的Handle,那么我怎么才能
知道它的窗口的CWnd,因为我想把它的窗口提到最前面来
条件是我只是知道Handle,还有进程ID,和它的在任务管理器中
进程->映象名称也可得到,急阿!!!!!!!!!!!
...全文
115 17 打赏 收藏 转发到动态 举报
写回复
用AI写文章
17 条回复
切换为时间正序
请发表友善的回复…
发表回复
zzqzzq 2003-08-27
  • 打赏
  • 举报
回复
HWND hWnd = :;GetWindow(GetDesktopWindow(),GW_HWNDFIRST);
DWORD dwID;//hWnd--窗口对应的进程ID
while (hWnd!=INVALID_HANDLE_VALUE)
{
::GetWindowThreadProcess(hWnd,&dwID);
if(dwID==ProcescID)//ProcescID为目标进程ID
{
所求窗口句柄=hWnd;
break;
}
hWnd = :;GetWindow(hWnd,GW_HWNDNEXT);
}

jxyhelen1 2003-08-27
  • 打赏
  • 举报
回复
我要取得的是其他应用程序的窗口句柄,也就是说如何遍历
系统正在运行的其他程序的窗口呢?不是本程序的窗口。
xiaohedou 2003-08-27
  • 打赏
  • 举报
回复
参与!
wudhu 2003-08-27
  • 打赏
  • 举报
回复
自己建一个CWnd,然后跟句柄联起来。
CWnd m_wndClient;
m_wndClient.Attach(m_hWnd);
//
m_wndClient.Detach();

jxyhelen1 2003-08-27
  • 打赏
  • 举报
回复
to zzqzzq:我如何遍历目前所有的窗口,取得每一个窗口的hWnd呢?
zzqzzq 2003-08-27
  • 打赏
  • 举报
回复
进程句柄与窗口句柄不同,一个进程句柄可以对应多个窗口句柄,上面的方法只是给出一个对应。
zzqzzq 2003-08-27
  • 打赏
  • 举报
回复
下列代码经过测试。
HWND hWnd = ::GetTopWindow(NULL);
DWORD dwID;//hWnd--窗口对应的进程ID
while (hWnd!=NULL)
{
::GetWindowThreadProcessId(hWnd,&dwID);
if(dwID==ProcescID)//ProcescID为目标进程ID
{
所求窗口句柄=hWnd;
break;
}
hWnd = ::GetWindow(hWnd,GW_HWNDNEXT);
}
jxyhelen1 2003-08-27
  • 打赏
  • 举报
回复
to yndfcd:我想知道你测试过了吗,我按照你的方法试了
可是还不行阿?
yndfcd 2003-08-27
  • 打赏
  • 举报
回复
zqqzqq的思路是对的,可惜他错了一点,那就是GetWindow返回的值是NULL(如果没有找到的话),而不是INVALID_HANDLE_VALUE。在window中NULL定义为0.后一个定义成什了,不记得了。不过肯定不是0)。所以它的判断语句是错的。还有就是要加一个GW_CHILD;
第一句写成这样GetWindow(NULL, GW_CHILDE | GW_HWNDFIRST);

还有一个API拼写错误 -> ::GetWindowThreadProcessId。 :)
jxyhelen1 2003-08-27
  • 打赏
  • 举报
回复
to zzqzzq:我用你的方法可是取得的hWnd都是NULL的,不行阿?
你试过了吗?
to zhouyong0371:我的条件是知道HANDLE,不是HWND,他们俩
相同吗??
0x191 2003-08-27
  • 打赏
  • 举报
回复
static CWnd* PASCAL FromHandle( HWND hWnd );

Returns a pointer to a CWnd object when given a handle to a window. If a CWnd object is not attached to the handle, a temporary CWnd object is created and attached.

The pointer may be temporary and should not be stored for later use.

zhouyong0371 2003-08-27
  • 打赏
  • 举报
回复
CWnd::FromHandlePermanent
This method retrieves a pointer to a CWnd object when you have a handle to a window.

This function, unlike CWnd::FromHandle, does not create temporary objects.

static CWnd* PASCAL FromHandlePermanent(
HWND hWnd );
收到以后做一下类型的强制转换就可以了。
zhouyong0371 2003-08-27
  • 打赏
  • 举报
回复
CWnd::FromHandle
This method retrieves a pointer to a CWnd object when you have a handle to a window.

static CWnd* PASCAL FromHandle(
HWND hWnd );
xghost 2003-08-27
  • 打赏
  • 举报
回复
CWnd* pWnd = CWnd::FromHandlePermanent(hWnd);
bluestone 2003-08-26
  • 打赏
  • 举报
回复
MARK
zzqzzq 2003-08-26
  • 打赏
  • 举报
回复
遍历窗口,通过DWORD GetWindowThreadProcess(HANDLE hWnd,LPROCESS lpdwProcess) 比较进程ID,可得所需窗口句柄hWnd。
瞧俺老孙的 2003-08-26
  • 打赏
  • 举报
回复
你是如何知道程序的Handle??
我不明白啊
应该可以得到HWND的
然后你随便啊

16,550

社区成员

发帖
与我相关
我的任务
社区描述
VC/MFC相关问题讨论
社区管理员
  • 基础类社区
  • Creator Browser
  • encoderlee
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

        VC/MFC社区版块或许是CSDN最“古老”的版块了,记忆之中,与CSDN的年龄几乎差不多。随着时间的推移,MFC技术渐渐的偏离了开发主流,若干年之后的今天,当我们面对着微软的这个经典之笔,内心充满着敬意,那些曾经的记忆,可以说代表着二十年前曾经的辉煌……
        向经典致敬,或许是老一代程序员内心里面难以释怀的感受。互联网大行其道的今天,我们期待着MFC技术能够恢复其曾经的辉煌,或许这个期待会永远成为一种“梦想”,或许一切皆有可能……
        我们希望这个版块可以很好的适配Web时代,期待更好的互联网技术能够使得MFC技术框架得以重现活力,……

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