hook+dll+ShowWindow

nowkok 2009-05-07 10:51:07
小弟初学C++,看孙鑫的教程到hook部分时候,仿照例子做了一个,实现的功能就是全局按F12恢复窗口,其他键最小化窗口。现在问题是 ShowWindow 好像是在窗口最小化的时候没效果一样,但MessageBox一直有效果,我怀疑是g_hWnd为空NULL了,所以没效果,代码如下,大家帮帮忙,多谢。调用这个DLL的项目是个对话框项目。

#include <windows.h>
#include <stdio.h>

HHOOK g_hKeyBoard;
HWND g_hWnd=NULL;
LRESULT CALLBACK KeyboardProc(
int code, // hook code
WPARAM wParam, // virtual-key code
LPARAM lParam // keystroke-message information
)
{
if(VK_F12==wParam)
{
ShowWindow(g_hWnd,SW_RESTORE);
}
else
{
ShowWindow(g_hWnd,SW_MINIMIZE);
}
UpdateWindow(g_hWnd);
return 1;
}

void SetHook(HWND hWnd)
{
g_hWnd=hWnd;
g_hKeyBoard=SetWindowsHookEx(WH_KEYBOARD,KeyboardProc,GetModuleHandle("hookdll"),0);
}
...全文
117 6 打赏 收藏 转发到动态 举报
写回复
用AI写文章
6 条回复
切换为时间正序
请发表友善的回复…
发表回复
nowkok 2009-05-07
  • 打赏
  • 举报
回复
明白了,问题解决,原来这么回事,多谢 jingzhongrong及其他各位的解答,结帖
fengrx 2009-05-07
  • 打赏
  • 举报
回复
正解!!!

[Quote=引用 2 楼 jingzhongrong 的回复:]
C/C++ code#pragmadata_seg("HOOKDLLSHARE")HHOOK g_hKeyBoard;
HWND g_hWnd=NULL;#pragmadata_seg()#pragmacomment(linker,"/SECTION:HOOKDLLSHARE,RWS")

在def文件中添加
SECTIONS
HOOKDLLSHARE Read Write Shared

DLL的共享变量要放在共享数据段中。因为DLL被加载到不同进程的地址空间里,在执行SetHook的进程里g_hWnd有值,在其他进程里为NULL。


[/Quote]
nowkok 2009-05-07
  • 打赏
  • 举报
回复
句柄 是 在调用程序 OnInitDialog里SetHook(m_hWnd),dll里面的进去调用g_hWnd是有值
N_star 2009-05-07
  • 打赏
  • 举报
回复
看不出来哪里有问题。。。。。
jingzhongrong 2009-05-07
  • 打赏
  • 举报
回复

#pragma data_seg("HOOKDLLSHARE")
HHOOK g_hKeyBoard;
HWND g_hWnd=NULL;
#pragma data_seg()
#pragma comment(linker,"/SECTION:HOOKDLLSHARE,RWS")


在def文件中添加
SECTIONS
HOOKDLLSHARE Read Write Shared

DLL的共享变量要放在共享数据段中。因为DLL被加载到不同进程的地址空间里,在执行SetHook的进程里g_hWnd有值,在其他进程里为NULL。

Allen_zhang 2009-05-07
  • 打赏
  • 举报
回复
第一:你这个句柄怎样来的?
第二:你既然怀疑他是空的?调试一下不就知道了?或者打印一下他的值

16,472

社区成员

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

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

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