如何由HWND转为HINSTANCE??

angelcool 2005-03-28 11:02:21
RT
...全文
1291 20 打赏 收藏 转发到动态 举报
写回复
用AI写文章
20 条回复
切换为时间正序
请发表友善的回复…
发表回复
angelcool 2005-03-28
  • 打赏
  • 举报
回复
to tabris17(四不象)
没错。我也认为有点怪。
但是我在程序中如下修改:
HINSTANCE m_hInstance=AfxGetInstanceHandle();
glhHook = SetWindowsHookEx(WH_KEYBOARD, KeyboardProc, m_hInstance, 0 );

这个钩子函数也起作用。
所以我才想将此处的m_hInstance换成我想要的程序的hInstance。
tabris17 2005-03-28
  • 打赏
  • 举报
回复
如果楼主说的是

HHOOK SetWindowsHookEx(
int idHook,
HOOKPROC lpfn,
HINSTANCE hMod,
DWORD dwThreadId
);

中的HINSTANCE hMod的话,那就你的理解错误了

此处的hMod指的是自身进程中HOOK DLL的hModule,可以用GetModuleHandle取得
tabris17 2005-03-28
  • 打赏
  • 举报
回复
MFC的函数可以获得呀!一定有的,只是我们现在没发现。


=================


MFC获得的那是自己进程的HINSTANCE
tabris17 2005-03-28
  • 打赏
  • 举报
回复
一般情况下

进程EXE的HINSTANCE的值是0x00400000
angelcool 2005-03-28
  • 打赏
  • 举报
回复
不会吧!
MFC的函数可以获得呀!一定有的,只是我们现在没发现。
tabris17 2005-03-28
  • 打赏
  • 举报
回复

先用GetWindowThreadProcessId函数来得到该窗口的所属进程ID


可以用GetModuleHandleEx函数得到HMODULE,其中lpModuleName参数传递为NULL就可以了
windowssky 2005-03-28
  • 打赏
  • 举报
回复
据我了解是不可以的,你问问别人,不好意思!
windowssky 2005-03-28
  • 打赏
  • 举报
回复
解得:不能实现
angelcool 2005-03-28
  • 打赏
  • 举报
回复
已知:程序B的HWND,它的标题
求:程序B的HINSTANCE
前提:要求在程序A中实现。
windowssky 2005-03-28
  • 打赏
  • 举报
回复
你是想通过地址获得句柄??
angelcool 2005-03-28
  • 打赏
  • 举报
回复
对不起,没说清。

我是在程序A中要获得程序B的HINSTANCE。
windowssky 2005-03-28
  • 打赏
  • 举报
回复
这个好象不能转换,地址和句柄好象没有对应关系!
吹泡泡的小猫 2005-03-28
  • 打赏
  • 举报
回复
在mfc程序中可以用AfxGetInstance得到程序的instance
angelcool 2005-03-28
  • 打赏
  • 举报
回复
我在创建钩子时需要指定程序的HINSTANCE,但是现在我只知道它的HWND,所以想知道如何能获取它的HINSTANCE.或者通过其他信息获得也可以。
有什么函数可以获得一个程序的HINSTANCE吗?
tabris17 2005-03-28
  • 打赏
  • 举报
回复
结论是不能转化
tabris17 2005-03-28
  • 打赏
  • 举报
回复
HINSTANCE的本质是模块基地址,他仅仅在同一进程中才有意义

跨进程的HINSTANCE是没有意义的

你把HINSTANCE的值打印出来看看就知道了

HINSTANCE和HWND是没有关系的


HWND是线程相关的,你可以通过HWND找到该窗口所属进程和线程

windowssky 2005-03-28
  • 打赏
  • 举报
回复
在库中是这样定义的:
typedef void __RPC_FAR *HWND;
typedef void __RPC_FAR *HINSTANCE;
类型一样啊
angelcool 2005-03-28
  • 打赏
  • 举报
回复
不行,获得的信息不对。它的值和HWND的一样。
windowssky 2005-03-28
  • 打赏
  • 举报
回复
强行转换不行吗?
angelcool 2005-03-28
  • 打赏
  • 举报
回复
这个钩子函数也起作用。
------------------
我知道了,因为是在本进程里实现的钩子函数的功能,所以将本进程的HINSTANCE赋给它时,它能够捕捉本进程的键盘消息。

我是将原来编写为DLL的钩子函数的实现部分加入到程序中。
那么怎样能实现获取其他程序的消息呢???
(因为我还需要这些消息做一些特殊的处理,所以需要将钩子的实现加入到本程序中)

16,470

社区成员

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

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

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